diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..fea960c1 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,16 @@ +name: build +on: [push, pull_request] + +jobs: + luacheck: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Install Luarocks + run: | + sudo apt-get update -qyy + sudo apt-get install luarocks -qyy + - name: Install Luacheck + run: luarocks install --local luacheck + - name: Run Luacheck + run: $HOME/.luarocks/bin/luacheck mods diff --git a/.gitignore b/.gitignore index a57dbc90..ef02689c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,22 @@ -## Generic ignorable patterns and files -*~ -.*.swp -*bak* -tags -*.vim +## Files related to minetest development cycle +/*.patch +# GNU Patch reject file +*.rej +## Editors and Development environments +*~ +*.swp +*.bak* +*.orig +# Vim +*.vim +# Kate +.*.kate-swp +.swp.* +# Eclipse (LDT) +.project +.settings/ +.buildpath +.metadata +# Idea IDE +.idea/* diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 00000000..77868c1c --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,18 @@ +variables: + GIT_SUBMODULE_STRATEGY: recursive + +stages: + - check + +code-quality: + image: registry.gitlab.com/craigbarnes/dockerfiles/lua-testing + interruptible: true + stage: check + retry: + max: 2 + when: + - runner_system_failure + - stuck_or_timeout_failure + script: + - luarocks install luacheck + - luacheck mods diff --git a/.gitmodules b/.gitmodules new file mode 100755 index 00000000..8f236303 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,329 @@ +[submodule "mods/illuna"] + path = mods/illuna + url = ../../Illuna-Minetest/illuna.git +[submodule "mods/wine"] + path = mods/wine + url = https://notabug.org/TenPlus1/wine +[submodule "mods/death_messages"] + path = mods/death_messages + url = ../../Illuna-Minetest/death_messages.git +[submodule "mods/worldedit"] + path = mods/worldedit + url = https://github.com/Uberi/Minetest-WorldEdit +[submodule "mods/xdecor"] + path = mods/xdecor + url = ../../Illuna-Minetest/xdecor.git +[submodule "mods/wardrobe"] + path = mods/wardrobe + url = ../../Illuna-Minetest/wardrobe.git +[submodule "mods/ctravelnet"] + path = mods/ctravelnet + url = ../../Illuna-Minetest/ctravelnet.git +[submodule "mods/cottages"] + path = mods/cottages + url = ../../Illuna-Minetest/cottages.git/ +[submodule "mods/bows"] + path = mods/bows + url = ../../Illuna-Minetest/bows + branch = master +[submodule "mods/pkarcs"] + path = mods/pkarcs + url = ../../Illuna-Minetest/pkarcs +[submodule "mods/columnia"] + path = mods/columnia + url = ../../Illuna-Minetest/columnia +[submodule "mods/homedecor_modpack"] + path = mods/homedecor_modpack + url = ../../Illuna-Minetest/homedecor_modpack +[submodule "mods/magical_potion"] + path = mods/magical_potion + url = ../../Illuna-Minetest/magical_potion +[submodule "mods/mtfoods"] + path = mods/mtfoods + url = https://github.com/Philipbenr/mtfoods +[submodule "mods/mtcandy"] + path = mods/mtcandy + url = ../../Illuna-Minetest/mtcandy +[submodule "mods/teleport_potion"] + path = mods/teleport_potion + url = ../../Illuna-Minetest/teleport_potion +[submodule "mods/halloween_mobs"] + path = mods/halloween_mobs + url = ../../Illuna-Minetest/halloween_mobs +[submodule "mods/ethereal"] + path = mods/ethereal + url = ../../Illuna-Minetest/ethereal +[submodule "mods/technic"] + path = mods/technic + url = ../../Illuna-Minetest/technic +[submodule "mods/markers"] + path = mods/markers + url = https://github.com/Sokomine/markers +[submodule "mods/golems"] + path = mods/golems + url = ../../Illuna-Minetest/golems +[submodule "mods/princess"] + path = mods/princess + url = https://github.com/pithydon/princess +[submodule "mods/city_block"] + path = mods/city_block + url = https://github.com/minetest-mods/city_block +[submodule "mods/glow"] + path = mods/glow + url = https://github.com/bdjnk/glow +[submodule "mods/character_creator"] + path = mods/character_creator + url = https://github.com/minetest-mods/character_creator +[submodule "mods/illuna_ethereal"] + path = mods/illuna_ethereal + url = ../../Illuna-Minetest/illuna_ethereal +[submodule "mods/bacon"] + path = mods/bacon + url = https://github.com/mootpoint/bacon +[submodule "mods/geomoria"] + path = mods/geomoria + url = https://github.com/duane-r/geomoria +[submodule "mods/integral"] + path = mods/integral + url = ../../Illuna-Minetest/integral +[submodule "mods/illuna_extras"] + path = mods/illuna_extras + url = ../../Illuna-Minetest/illuna_extras +[submodule "mods/underworlds"] + path = mods/underworlds + url = ../../Illuna-Minetest/underworlds +[submodule "mods/caverealms"] + path = mods/caverealms + url = ../../Illuna-Minetest/caverealms +[submodule "mods/fun_caves"] + path = mods/fun_caves + url = ../../Illuna-Minetest/fun_caves +[submodule "mods/hopper"] + path = mods/hopper + url = https://github.com/minetest-mods/hopper +[submodule "mods/digilines"] + path = mods/digilines + url = https://github.com/minetest-mods/digilines +[submodule "mods/turtle"] + path = mods/turtle + url = https://github.com/minetest-mods/turtle +[submodule "mods/xconnected"] + path = mods/xconnected + url = https://github.com/Sokomine/xconnected +[submodule "mods/under_sky"] + path = mods/under_sky + url = https://github.com/Ezhh/under_sky +[submodule "mods/travelnet"] + path = mods/travelnet + url = https://github.com/Sokomine/travelnet +[submodule "mods/torches"] + path = mods/torches + url = https://github.com/minetest-mods/torches +[submodule "mods/steel"] + path = mods/steel + url = ../../Illuna-Minetest/steel +[submodule "mods/replacer"] + path = mods/replacer + url = https://github.com/Sokomine/replacer +[submodule "mods/quartz"] + path = mods/quartz + url = https://github.com/minetest-mods/quartz +[submodule "mods/names_per_ip"] + path = mods/names_per_ip + url = https://github.com/SmallJoker/names_per_ip +[submodule "mods/mobs_more_monsters"] + path = mods/mobs_more_monsters + url = ../../Illuna-Minetest/mobs_more_monsters +[submodule "mods/moreores"] + path = mods/moreores + url = ../../Illuna-Minetest/moreores +[submodule "mods/wiki"] + path = mods/wiki + url = ../../Illuna-Minetest/wiki +[submodule "mods/mg_villages"] + path = mods/mg_villages + url = https://github.com/Sokomine/mg_villages +[submodule "mods/handle_schematics"] + path = mods/handle_schematics + url = https://github.com/Sokomine/handle_schematics +[submodule "mods/unified_inventory"] + path = mods/unified_inventory + url = ../../Illuna-Minetest/unified_inventory +[submodule "modpacks/mydoors"] + path = modpacks/mydoors + url = https://github.com/minetest-mods/mydoors +[submodule "mods/sneak_glitch"] + path = mods/sneak_glitch + url = https://github.com/SmallJoker/sneak_glitch +[submodule "mods/mycastle"] + path = mods/mycastle + url = ../../Illuna-Minetest/mycastle +[submodule "mods/mesecons"] + path = mods/mesecons + url = ../../Illuna-Minetest/mesecons +[submodule "mods/other_worlds"] + path = mods/other_worlds + url = ../../Illuna-Minetest/other_worlds +[submodule "mods/loud_walking"] + path = mods/loud_walking + url = ../../Illuna-Minetest/loud_walking +[submodule "mods/playerskins"] + path = mods/playerskins + url = ../../Illuna-Minetest/playerskins +[submodule "mods/dmobs"] + path = mods/dmobs + url = ../../Illuna-Minetest/dmobs +[submodule "mods/mobs_animal"] + path = mods/mobs_animal + url = ../../Illuna-Minetest/mobs_animal +[submodule "mods/mobs_monster"] + path = mods/mobs_monster + url = ../../Illuna-Minetest/mobs_monster +[submodule "mods/mobs_redo"] + path = mods/mobs_redo + url = ../../Illuna-Minetest/mobs_redo +[submodule "mods/basic_robot"] + path = mods/basic_robot + url = ../../Illuna-Minetest/basic_robot +[submodule "mods/irc"] + path = mods/irc + url = ../../Illuna-Minetest/irc +[submodule "mods/playereffects"] + path = mods/playereffects + url = ../../Illuna-Minetest/playereffects +[submodule "mods/chat3"] + path = mods/chat3 + url = ../../Illuna-Minetest/chat3 +[submodule "mods/protector"] + path = mods/protector + url = ../../Illuna-Minetest/protector +[submodule "mods/illuna_costumes"] + path = mods/illuna_costumes + url = ../../Illuna-Minetest/illuna_costumes +[submodule "mods/areas"] + path = mods/areas + url = ../../Illuna-Minetest/areas +[submodule "mods/3d_armor"] + path = mods/3d_armor + url = ../../Illuna-Minetest/3d_armor +[submodule "mods/technic_armor"] + path = mods/technic_armor + url = https://github.com/stujones11/technic_armor +[submodule "mods/hazmat_suit"] + path = mods/hazmat_suit + url = https://github.com/stujones11/hazmat_suit +[submodule "mods/player_monoids"] + path = mods/player_monoids + url = https://github.com/minetest-mods/player_monoids +[submodule "mods/mob_horse"] + path = mods/mob_horse + url = ../../Illuna-Minetest/mob_horse +[submodule "mods/matrix"] + path = mods/matrix + url = https://github.com/entuland/lua-matrix +[submodule "mods/rhotator"] + path = mods/rhotator + url = ../../Illuna-Minetest/rhotator +[submodule "mods/sea"] + path = mods/sea + url = ../../Illuna-Minetest/minetest-mod-sea +[submodule "mods/xban2"] + path = mods/xban2 + url = https://github.com/minetest-mods/xban2 + branch = master +[submodule "mods/chakram"] + path = mods/chakram + url = ../../Illuna-Minetest/chakram +[submodule "mods/hangglider"] + path = mods/hangglider + url = ../../Illuna-Minetest/minetest-hangglider +[submodule "mods/hangglider_regular"] + path = mods/hangglider_regular + url = ../../Illuna-Minetest/minetest-hangglider-regular +[submodule "mods/illuna_events"] + path = mods/illuna_events + url = ../../Illuna-Minetest/illuna_events.git +[submodule "mods/eventkeys"] + path = mods/eventkeys + url = https://github.com/auouymous/eventkeys +[submodule "mods/cloaking"] + path = mods/cloaking + url = https://github.com/luk3yx/minetest-cloaking +[submodule "mods/moreblocks"] + path = mods/moreblocks + url = https://github.com/minetest-mods/moreblocks +[submodule "mods/arrow_signs"] + path = mods/arrow_signs + url = https://bitbucket.org/adrido/arrow_signs/ +[submodule "mods/bitchange"] + path = mods/bitchange + url = ../../Illuna-Minetest/bitchange +[submodule "mods/bridges"] + path = mods/bridges + url = https://github.com/Sokomine/bridges +[submodule "mods/christmas_craft"] + path = mods/christmas_craft + url = ../../Illuna-Minetest/christmas_craft +[submodule "mods/maptools"] + path = mods/maptools + url = https://github.com/calinou/maptools +[submodule "mods/medieval_craft"] + path = mods/medieval_craft + url = https://bitbucket.org/kingarthursteam/medieval_craft +[submodule "mods/mobf_trader"] + path = mods/mobf_trader + url = https://github.com/Sokomine/mobf_trader +[submodule "mods/spawners"] + path = mods/spawners + url = ../../Illuna-Minetest/spawners +[submodule "mods/skybox"] + path = mods/skybox + url = ../../Illuna-Minetest/skybox +[submodule "mods/moreglass"] + path = mods/moreglass + url = ../../Illuna-Minetest/moreglass.git +[submodule "mods/hbsprint"] + path = mods/hbsprint + url = https://github.com/minetest-mods/hbsprint +[submodule "mods/hudbars"] + path = mods/hudbars + url = https://repo.or.cz/minetest_hudbars.git +[submodule "mods/hbarmor"] + path = mods/hbarmor + url = git://repo.or.cz/minetest_hbarmor.git +[submodule "mods/hbhunger"] + path = mods/hbhunger + url = https://repo.or.cz/minetest_hbhunger.git +[submodule "mods/headanim"] + path = mods/headanim + url = https://github.com/LoneWolfHT/headanim/ +[submodule "mods/medieval_inner_glasses"] + path = mods/medieval_inner_glasses + url = https://github.com/kodrag/medieval-inner-glasses +[submodule "mods/we_undo"] + path = mods/we_undo + url = https://github.com/HybridDog/we_undo +[submodule "mods/basic_materials"] + path = mods/basic_materials + url = https://github.com/mt-mods/basic_materials +[submodule "mods/basic_signs"] + path = mods/basic_signs + url = https://github.com/mt-mods/basic_signs +[submodule "mods/biome_lib"] + path = mods/biome_lib + url = https://github.com/mt-mods/biome_lib +[submodule "mods/pipeworks"] + path = mods/pipeworks + url = https://github.com/mt-mods/pipeworks +[submodule "mods/signs_lib"] + path = mods/signs_lib + url = https://github.com/mt-mods/signs_lib +[submodule "mods/unifieddyes"] + path = mods/unifieddyes + url = https://github.com/mt-mods/unifieddyes +[submodule "mods/colored_eggs"] + path = mods/colored_eggs + url = https://github.com/auouymous/colored_eggs +[submodule "mods/monitoring"] + path = mods/monitoring + url = https://github.com/minetest-monitoring/monitoring diff --git a/.luacheckrc b/.luacheckrc new file mode 100644 index 00000000..72c7582f --- /dev/null +++ b/.luacheckrc @@ -0,0 +1,60 @@ +ignore = { + -- list taken from https://stackoverflow.com/questions/49158143/how-to-ignore-luacheck-warnings/49160695#56618022 as + -- all the third party mods would be hard to manage otherwise + + --"011", -- A syntax error. + --"021", -- An invalid inline option. + "022", -- An unpaired inline push directive. + "023", -- An unpaired inline pop directive. + "111", -- Setting an undefined global variable. + "112", -- Mutating an undefined global variable. + "113", -- Accessing an undefined global variable. + "121", -- Setting a read-only global variable. + "122", -- Setting a read-only field of a global variable. + "131", -- Unused implicitly defined global variable. + "142", -- Setting an undefined field of a global variable. + "143", -- Accessing an undefined field of a global variable. + "211", -- Unused local variable. + "212", -- Unused argument. + "213", -- Unused loop variable. + "221", -- Local variable is accessed but never set. + "231", -- Local variable is set but never accessed. + "232", -- An argument is set but never accessed. + "233", -- Loop variable is set but never accessed. + "241", -- Local variable is mutated but never accessed. + "311", -- Value assigned to a local variable is unused. + "312", -- Value of an argument is unused. + "313", -- Value of a loop variable is unused. + "314", -- Value of a field in a table literal is unused. + "321", -- Accessing uninitialized local variable. + "331", -- Value assigned to a local variable is mutated but never accessed. + "341", -- Mutating uninitialized local variable. + "411", -- Redefining a local variable. + "412", -- Redefining an argument. + "413", -- Redefining a loop variable. + "421", -- Shadowing a local variable. + "422", -- Shadowing an argument. + "423", -- Shadowing a loop variable. + "431", -- Shadowing an upvalue. + "432", -- Shadowing an upvalue argument. + "433", -- Shadowing an upvalue loop variable. + "511", -- Unreachable code. + "512", -- Loop can be executed at most once. + "521", -- Unused label. + "531", -- Left-hand side of an assignment is too short. + "532", -- Left-hand side of an assignment is too long. + "541", -- An empty do end block. + "542", -- An empty if branch. + "551", -- An empty statement. + "561", -- Cyclomatic complexity of a function is too high. + "571", -- A numeric for loop goes from #(expr) down to 1 or less without negative step. + "611", -- A line consists of nothing but whitespace. + "612", -- A line contains trailing whitespace. + "613", -- Trailing whitespace in a string. + "614", -- Trailing whitespace in a comment. + "621", -- Inconsistent indentation (SPACE followed by TAB). + "631", -- Line is too long. +} + + + diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 00000000..48f0b8d1 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,519 @@ +License of media (textures and sounds) +-------------------------------------- +Copyright (C) 2010-2012 celeron55, Perttu Ahola +See README.txt in each mod directory for information about other authors. + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +http://creativecommons.org/licenses/by-sa/3.0/ + +License of menu/header.png +Copyright (C) 2015 paramat CC BY-SA 3.0 + + +License of source code +---------------------- +Copyright (C) 2010-2012 celeron55, Perttu Ahola +See README.txt in each mod directory for information about other authors. + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/README.md b/README.md new file mode 100644 index 00000000..099a7e03 --- /dev/null +++ b/README.md @@ -0,0 +1,33 @@ +# Minetest Game + +The default game bundled in the Minetest engine. + +For further information, check [this forum topic](https://forum.minetest.net/viewtopic.php?f=15&t=9724). + +Also see the [Minetest Wiki](https://wiki.minetest.net/Subgames/Minetest_Game) for more information. + +## Installation + +- Unzip the archive, rename the folder to `minetest_game` and +place it in .. `minetest/games/` + +- GNU/Linux: If you use a system-wide installation place it in `~/.minetest/games/`. + +The Minetest engine can be found at [GitHub](https://github.com/minetest/minetest). + +For further information or help, see: [Installing Mods](https://wiki.minetest.net/Installing_Mods). + +## Compatibility + +The Minetest Game GitHub `master` `HEAD` is generally compatible with the GitHub +`master` `HEAD` of the Minetest engine. + +Additionally, when the Minetest engine is tagged to be a certain version (e.g. +`0.4.10`), Minetest Game is tagged with the version, too. + +When stable releases are made, Minetest Game and the Minetest engine is packaged +and made available at [www.minetest.net](https://www.minetest.net/downloads/). + +## Licensing + +See `LICENSE.txt` diff --git a/README.txt b/README.txt deleted file mode 100644 index 7c5c6730..00000000 --- a/README.txt +++ /dev/null @@ -1,50 +0,0 @@ -The main game for the Minetest game engine [minetest_game] -========================================================== - -To build the wholeness of the Minetest project, insert this repository as - /games/minetest_game -in the Minetest Engine. - -The Minetest Engine can be found in: - https://github.com/minetest/minetest/ - -Compatibility --------------- -The minetest_game github master HEAD is generally compatible with the github -master HEAD of minetest. - -Additionally, when the minetest engine is tagged to be a certain version (eg. -0.4.dev-20120326), minetest_game is tagged with the version too. - -When stable releases are made, minetest_game is packaged and made available in - http://minetest.net/download.php -and in case the repository has grown too much, it may be reset. In that sense, -this is not a "real" git repository. (Package maintainers please note!) - -License of source code ----------------------- -Copyright (C) 2010-2012 celeron55, Perttu Ahola -See README.txt in each mod directory for information about other authors. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program 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 Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -License of media (textures and sounds) --------------------------------------- -Copyright (C) 2010-2012 celeron55, Perttu Ahola -See README.txt in each mod directory for information about other authors. - -Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) -http://creativecommons.org/licenses/by-sa/3.0/ - diff --git a/game.conf b/game.conf index 99bfec03..5bb625df 100644 --- a/game.conf +++ b/game.conf @@ -1,2 +1,3 @@ -name = Minetest -common_mods = default, bucket, creative, doors, dye, fire, stairs, vessels, wool +title = TechEth Game +author = Minetest, Illuna +description = Game of the Illuna TechEth flagship-server, based on the official minetest_game diff --git a/game_api.txt b/game_api.txt new file mode 100644 index 00000000..c8b4cec3 --- /dev/null +++ b/game_api.txt @@ -0,0 +1,1147 @@ +Minetest Game API +================= +GitHub Repo: https://github.com/minetest/minetest_game + + +Introduction +------------ + +The Minetest Game game offers multiple new possibilities in addition to the Minetest engine's built-in API, +allowing you to add new plants to farming mod, buckets for new liquids, new stairs and custom panes. +For information on the Minetest API, visit https://github.com/minetest/minetest/blob/master/doc/lua_api.txt +Please note: + + * [XYZ] refers to a section the Minetest API + * [#ABC] refers to a section in this document + * [pos] refers to a position table `{x = -5, y = 0, z = 200}` + + +Bucket API +---------- + +The bucket API allows registering new types of buckets for non-default liquids. + + bucket.register_liquid( + "default:lava_source", -- name of the source node + "default:lava_flowing", -- name of the flowing node + "bucket:bucket_lava", -- name of the new bucket item (or nil if liquid is not takeable) + "bucket_lava.png", -- texture of the new bucket item (ignored if itemname == nil) + "Lava Bucket", -- text description of the bucket item + {lava_bucket = 1}, -- groups of the bucket item, OPTIONAL + false -- force-renew, OPTIONAL. Force the liquid source to renew if it has + -- a source neighbour, even if defined as 'liquid_renewable = false'. + -- Needed to avoid creating holes in sloping rivers. + ) + +The filled bucket item is returned to the player that uses an empty bucket pointing to the given liquid source. +When punching with an empty bucket pointing to an entity or a non-liquid node, the on_punch of the entity or node will be triggered. + + +Beds API +-------- + + beds.register_bed( + "beds:bed", -- Bed name + def -- See [#Bed definition] + ) + + * `beds.can_dig(bed_pos)` Returns a boolean whether the bed at `bed_pos` may be dug + * `beds.read_spawns() ` Returns a table containing players respawn positions + * `beds.kick_players()` Forces all players to leave bed + * `beds.skip_night()` Sets world time to morning and saves respawn position of all players currently sleeping + +### Bed definition + + { + description = "Simple Bed", + inventory_image = "beds_bed.png", + wield_image = "beds_bed.png", + tiles = { + bottom = {'Tile definition'}, -- the tiles of the bottom part of the bed. + top = {Tile definition} -- the tiles of the bottom part of the bed. + }, + nodebox = { + bottom = 'regular nodebox', -- bottom part of bed (see [Node boxes]) + top = 'regular nodebox', -- top part of bed (see [Node boxes]) + }, + selectionbox = 'regular nodebox', -- for both nodeboxes (see [Node boxes]) + recipe = { -- Craft recipe + {"group:wool", "group:wool", "group:wool"}, + {"group:wood", "group:wood", "group:wood"} + } + } + + +Bones API +--------- + +An ordered list of listnames (default: "main", "craft") of the player inventory, +that will be placed into bones or dropped on player death can be looked up or changed +in `bones.player_inventory_lists`. + +e.g. `table.insert(bones.player_inventory_lists, "backpack")` + + +Creative API +------------ + +Use `creative.register_tab(name, title, items)` to add a tab with filtered items. +For example, + + creative.register_tab("tools", "Tools", minetest.registered_tools) + +is used to show all tools. Name is used in the sfinv page name, title is the +human readable title. + +Creative provides `creative.is_enabled_for(name)`, which is identical in +functionality to the engine's `minetest.creative_is_enabled(name)`. +Its use is deprecated and it should also not be overriden. + +The contents of `creative.formspec_add` is appended to every creative inventory +page. Mods can use it to add additional formspec elements onto the default +creative inventory formspec to be drawn after each update. + +Group overrides can be used for any registered item, node or tool. Use one of +the groups stated below to pick which category it will appear in. + + node = 1 -- Appears in the Nodes category + tool = 1 -- Appears in the Tools category + craftitem = 1 -- Appears in the Items category + + +Chests API +---------- + +The chests API allows the creation of chests, which have their own inventories for holding items. + +`default.chest.get_chest_formspec(pos)` + + * Returns a formspec for a specific chest. + * `pos` Location of the chest node, e.g `{x = 1, y = 1, z = 1}` + +`default.chest.chest_lid_obstructed(pos)` + + * Returns a boolean depending on whether or not a chest has its top obstructed by a solid node. + * `pos` Location of the chest node, e.g `{x = 1, y = 1, z = 1}` + +`default.chest.chest_lid_close(pn)` + + * Closes the chest that a player is currently looking in. + * `pn` The name of the player whose chest is going to be closed + +`default.chest.open_chests` + + * A table indexed by player name to keep track of who opened what chest. + * Key: The name of the player. + * Value: A table containing information about the chest the player is looking at. + e.g `{ pos = {1, 1, 1}, sound = null, swap = "default:chest" }` + +`default.chest.register_chest(name, def)` + + * Registers new chest + * `name` Name for chest e.g. "default:chest" + * `def` See [#Chest Definition] + +### Chest Definition + + description = "Chest", + tiles = { + "default_chest_top.png", + "default_chest_top.png", + "default_chest_side.png", + "default_chest_side.png", + "default_chest_front.png", + "default_chest_inside.png" + }, -- Textures which are applied to the chest model. + sounds = default.node_sound_wood_defaults(), + sound_open = "default_chest_open", + sound_close = "default_chest_close", + groups = {choppy = 2, oddly_breakable_by_hand = 2}, + protected = false, -- If true, only placer can modify chest. + + +Doors API +--------- + +The doors mod allows modders to register custom doors and trapdoors. + +`doors.registered_doors[name] = Door definition` + * Table of registered doors, indexed by door name + +`doors.registered_trapdoors[name] = Trapdoor definition` + * Table of registered trap doors, indexed by trap door name + +`doors.register_door(name, def)` + + * Registers new door + * `name` Name for door + * `def` See [#Door definition] + +`doors.register_trapdoor(name, def)` + + * Registers new trapdoor + * `name` Name for trapdoor + * `def` See [#Trapdoor definition] + +`doors.register_fencegate(name, def)` + + * Registers new fence gate + * `name` Name for fence gate + * `def` See [#Fence gate definition] + +`doors.get(pos)` + + * `pos` A position as a table, e.g `{x = 1, y = 1, z = 1}` + * Returns an ObjectRef to a door, or nil if the position does not contain a door + + ### Methods + + :open(player) -- Open the door object, returns if door was opened + :close(player) -- Close the door object, returns if door was closed + :toggle(player) -- Toggle the door state, returns if state was toggled + :state() -- returns the door state, true = open, false = closed + + the "player" parameter can be omitted in all methods. If passed then + the usual permission checks will be performed to make sure the player + has the permissions needed to open this door. If omitted then no + permission checks are performed. + +`doors.door_toggle(pos, node, clicker)` + + * Toggle door open or shut + * `pos` Position of the door + * `node` Node definition + * `clicker` Player definition for the player that clicked on the door + +### Door definition + + description = "Door description", + inventory_image = "mod_door_inv.png", + groups = {choppy = 2}, + model = "mod_door", -- (optional) + -- Model name without a suffix ("big_door" not "big_door_a.obj", "big_door_b.obj") + tiles = {"mod_door.png"}, -- UV map. + -- The front and back of the door must be identical in appearence as they swap on + -- open/close. + recipe = craftrecipe, + sounds = default.node_sound_wood_defaults(), -- optional + sound_open = sound play for open door, -- optional + sound_close = sound play for close door, -- optional + gain_open = 0.3, -- optional, defaults to 0.3 + gain_close = 0.3, -- optional, defaults to 0.3 + protected = false, -- If true, only placer can open the door (locked for others) + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing), + -- optional function containing the on_rightclick callback, defaults to a doors.door_toggle-wrapper + use_texture_alpha = "clip", + +### Trapdoor definition + + description = "Trapdoor description", + inventory_image = "mod_trapdoor_inv.png", + nodebox_closed = {} -- Nodebox for closed model + nodebox_opened = {} -- Nodebox for opened model + -- (optional) both nodeboxes must be used, not one only + groups = {choppy = 2}, + tile_front = "doors_trapdoor.png", -- the texture for the front and back of the trapdoor + tile_side = "doors_trapdoor_side.png", + -- The texture for the four sides of the trapdoor. + -- The texture should have the trapdoor side drawn twice, in the lowest and highest + -- 1/8ths of the texture, both upright. The area between is not used. + -- The lower 1/8th will be used for the closed trapdoor, the higher 1/8th will be used + -- for the open trapdoor. + sounds = default.node_sound_wood_defaults(), -- optional + sound_open = sound play for open door, -- optional + sound_close = sound play for close door, -- optional + gain_open = 0.3, -- optional, defaults to 0.3 + gain_close = 0.3, -- optional, defaults to 0.3 + protected = false, -- If true, only placer can open the door (locked for others) + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) , + -- function containing the on_rightclick callback + use_texture_alpha = "clip", + +### Fence gate definition + + description = "Wooden Fence Gate", + texture = "default_wood.png", -- `backface_culling` will automatically be + -- set to `true` if not specified. + material = "default:wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults(), -- optional + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + -- function containing the on_rightclick callback + + +Dungeon Loot API +---------------- + +The mod that places chests with loot in dungeons provides an API to register additional loot. + +`dungeon_loot.register(def)` + + * Registers one or more loot items + * `def` Can be a single [#Loot definition] or a list of them + +`dungeon_loot.registered_loot` + + * Table of all registered loot, not to be modified manually + +### Loot definition + + name = "item:name", + chance = 0.5, + -- ^ chance value from 0.0 to 1.0 that the item will appear in the chest when chosen + -- Due to an extra step in the selection process, 0.5 does not(!) mean that + -- on average every second chest will have this item + count = {1, 4}, + -- ^ table with minimum and maximum amounts of this item + -- optional, defaults to always single item + y = {-32768, -512}, + -- ^ table with minimum and maximum heights this item can be found at + -- optional, defaults to no height restrictions + types = {"desert"}, + -- ^ table with types of dungeons this item can be found in + -- supported types: "normal" (the cobble/mossycobble one), "sandstone" + -- "desert" and "ice" + -- optional, defaults to no type restrictions + + +Fence API +--------- + +Allows creation of new fences with "fencelike" drawtype. + +`default.register_fence(name, item definition)` + + Registers a new fence. Custom fields texture and material are required, as + are name and description. The rest is optional. You can pass most normal + nodedef fields here except drawtype. The fence group will always be added + for this node. + +### fence definition + + name = "default:fence_wood", + description = "Wooden Fence", + texture = "default_wood.png", + material = "default:wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + + +Walls API +--------- + +The walls API allows easy addition of stone auto-connecting wall nodes. + +walls.register(name, desc, texture, mat, sounds) +^ name = "walls:stone_wall". Node name. +^ desc = "A Stone wall" +^ texture = "default_stone.png" +^ mat = "default:stone". Used to auto-generate crafting recipe. +^ sounds = sounds: see [#Default sounds] + + +Farming API +----------- + +The farming API allows you to easily register plants and hoes. + +`farming.register_hoe(name, hoe definition)` + * Register a new hoe, see [#hoe definition] + +`farming.register_plant(name, Plant definition)` + * Register a new growing plant, see [#Plant definition] + +`farming.registered_plants[name] = definition` + * Table of registered plants, indexed by plant name + +### Hoe Definition + + + { + description = "", -- Description for tooltip + inventory_image = "unknown_item.png", -- Image to be used as wield- and inventory image + max_uses = 30, -- Uses until destroyed + material = "", -- Material for recipes + recipe = { -- Craft recipe, if material isn't used + {"air", "air", "air"}, + {"", "group:stick"}, + {"", "group:stick"}, + } + } + +### Plant definition + + { + description = "", -- Description of seed item + harvest_description = "", -- Description of harvest item + -- (optional, derived automatically if not provided) + inventory_image = "unknown_item.png", -- Image to be used as seed's wield- and inventory image + steps = 8, -- How many steps the plant has to grow, until it can be harvested + -- ^ Always provide a plant texture for each step, format: modname_plantname_i.png (i = stepnumber) + minlight = 13, -- Minimum light to grow + maxlight = default.LIGHT_MAX -- Maximum light to grow + } + + +Fire API +-------- + +Add group flammable when registering a node to make fire seek for it. +Add it to an item to make it burn up when dropped in lava or fire. +New node def property: + +`on_burn(pos)` + + * Called when fire attempts to remove a burning node. + * `pos` Position of the burning node. + + `on_ignite(pos, igniter)` + + * Called when Flint and steel (or a mod defined ignitor) is used on a node. + Defining it may prevent the default action (spawning flames) from triggering. + * `pos` Position of the ignited node. + * `igniter` Player that used the tool, when available. + + +Give Initial Stuff API +---------------------- + +`give_initial_stuff.give(player)` + +^ Give initial stuff to "player" + +`give_initial_stuff.add(stack)` + +^ Add item to the initial stuff +^ Stack can be an ItemStack or a item name eg: "default:dirt 99" +^ Can be called after the game has loaded + +`give_initial_stuff.clear()` + +^ Removes all items from the initial stuff +^ Can be called after the game has loaded + +`give_initial_stuff.get_list()` + +^ returns list of item stacks + +`give_initial_stuff.set_list(list)` + +^ List of initial items with numeric indices. + +`give_initial_stuff.add_from_csv(str)` + +^ str is a comma separated list of initial stuff +^ Adds items to the list of items to be given + + +Player API +---------- + +The player API can register player models and update the player's appearance. + +* `player_api.globalstep(dtime, ...)` + * The function called by the globalstep that controls player animations. + You can override this to replace the globalstep with your own implementation. + * Receives all args that minetest.register_globalstep() passes + +* `player_api.register_model(name, def)` + * Register a new model to be used by players + * `name`: model filename such as "character.x", "foo.b3d", etc. + * `def`: see [#Model definition] + * Saved to player_api.registered_models + +* `player_api.registered_models[name]` + * Get a model's definition + * `name`: model filename + * See [#Model definition] + +* `player_api.set_model(player, model_name)` + * Change a player's model + * `player`: PlayerRef + * `model_name`: model registered with `player_api.register_model` + +* `player_api.set_animation(player, anim_name, speed)` + * Applies an animation to a player if speed or anim_name differ from the currently playing animation + * `player`: PlayerRef + * `anim_name`: name of the animation + * `speed`: keyframes per second. If nil, the default from the model def is used + +* `player_api.set_textures(player, textures)` + * Sets player textures + * `player`: PlayerRef + * `textures`: array of textures. If nil, the default from the model def is used + +* `player_api.set_textures(player, index, texture)` + * Sets one of the player textures + * `player`: PlayerRef + * `index`: Index into array of all textures + * `texture`: the texture string + +* `player_api.get_animation(player)` + * Returns a table containing fields `model`, `textures` and `animation` + * Any of the fields of the returned table may be nil + * `player`: PlayerRef + +* `player_api.player_attached` + * A table that maps a player name to a boolean + * If the value for a given player is set to true, the default player animations + (walking, digging, ...) will no longer be updated, and knockback from damage is + prevented for that player + * Example of usage: A mod sets a player's value to true when attached to a vehicle + +### Model Definition + + { + animation_speed = 30, -- Default animation speed, in keyframes per second + textures = {"character.png"}, -- Default array of textures + animations = { + -- [anim_name] = { + -- x = , + -- y = , + -- collisionbox = , -- (optional) + -- eye_height = , -- (optional) + -- -- suspend client side animations while this one is active (optional) + -- override_local = + -- }, + stand = ..., lay = ..., walk = ..., mine = ..., walk_mine = ..., -- required animations + sit = ... -- used by boats and other MTG mods + }, + -- Default object properties, see lua_api.txt + visual_size = {x = 1, y = 1}, + collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3}, + stepheight = 0.6, + eye_height = 1.47 + } + + +TNT API +------- + +`tnt.register_tnt(definition)` + +^ Register a new type of tnt. + + * `name` The name of the node. If no prefix is given `tnt` is used. + * `description` A description for your TNT. + * `radius` The radius within which the TNT can destroy nodes. The default is 3. + * `damage_radius` The radius within which the TNT can damage players and mobs. By default it is twice the `radius`. + * `sound` The sound played when explosion occurs. By default it is `tnt_explode`. + * `disable_drops` Disable drops. By default it is set to false. + * `ignore_protection` Don't check `minetest.is_protected` before removing a node. + * `ignore_on_blast` Don't call `on_blast` even if a node has one. + * `tiles` Textures for node + * `side` Side tiles. By default the name of the tnt with a suffix of `_side.png`. + * `top` Top tile. By default the name of the tnt with a suffix of `_top.png`. + * `bottom` Bottom tile. By default the name of the tnt with a suffix of `_bottom.png`. + * `burning` Top tile when lit. By default the name of the tnt with a suffix of `_top_burning_animated.png". + +`tnt.boom(position[, definition])` + +^ Create an explosion. + +* `position` The center of explosion. +* `definition` The TNT definion as passed to `tnt.register` with the following addition: + * `explode_center` false by default which removes TNT node on blast, when true will explode center node. + +`tnt.burn(position, [nodename])` + +^ Ignite node at position, triggering its `on_ignite` callback (see fire mod). +If no such callback exists, fallback to turn tnt group nodes to their +"_burning" variant. + nodename isn't required unless already known. + +To make dropping items from node inventories easier, you can use the +following helper function from 'default': + +default.get_inventory_drops(pos, inventory, drops) + +^ Return drops from node inventory "inventory" in drops. + +* `pos` - the node position +* `inventory` - the name of the inventory (string) +* `drops` - an initialized list + +The function returns no values. The drops are returned in the `drops` +parameter, and drops is not reinitialized so you can call it several +times in a row to add more inventory items to it. + + +`on_blast` callbacks: + +Both nodedefs and entitydefs can provide an `on_blast()` callback + +`nodedef.on_blast(pos, intensity)` +^ Allow drop and node removal overriding +* `pos` - node position +* `intensity` - TNT explosion measure. larger or equal to 1.0 +^ Should return a list of drops (e.g. {"default:stone"}) +^ Should perform node removal itself. If callback exists in the nodedef +^ then the TNT code will not destroy this node. + +`entitydef.on_blast(luaobj, damage)` +^ Allow TNT effects on entities to be overridden +* `luaobj` - LuaEntityRef of the entity +* `damage` - suggested HP damage value +^ Should return a list of (bool do_damage, bool do_knockback, table drops) +* `do_damage` - if true then TNT mod wil damage the entity +* `do_knockback` - if true then TNT mod will knock the entity away +* `drops` - a list of drops, e.g. {"wool:red"} + + +Screwdriver API +--------------- + +The screwdriver API allows you to control a node's behaviour when a screwdriver is used on it. +To use it, add the `on_screwdriver` function to the node definition. + +`on_rotate(pos, node, user, mode, new_param2)` + + * `pos` Position of the node that the screwdriver is being used on + * `node` that node + * `user` The player who used the screwdriver + * `mode` screwdriver.ROTATE_FACE or screwdriver.ROTATE_AXIS + * `new_param2` the new value of param2 that would have been set if on_rotate wasn't there + * return value: false to disallow rotation, nil to keep default behaviour, true to allow + it but to indicate that changed have already been made (so the screwdriver will wear out) + * use `on_rotate = false` to always disallow rotation + * use `on_rotate = screwdriver.rotate_simple` to allow only face rotation + + +Sethome API +----------- + +The sethome API adds three global functions to allow mods to read a players home position, +set a players home position and teleport a player to home position. + +`sethome.get(name)` + + * `name` Player who's home position you wish to get + * return value: false if no player home coords exist, position table if true + +`sethome.set(name, pos)` + + * `name` Player who's home position you wish to set + * `pos` Position table containing coords of home position + * return value: false if unable to set and save new home position, otherwise true + +`sethome.go(name)` + + * `name` Player you wish to teleport to their home position + * return value: false if player cannot be sent home, otherwise true + + +Sfinv API +--------- + +It is recommended that you read this link for a good introduction to the +sfinv API by its author: https://rubenwardy.com/minetest_modding_book/en/chapters/sfinv.html + +### sfinv Methods + +**Pages** + +* sfinv.set_page(player, pagename) - changes the page +* sfinv.get_page(player) - get the current page name. Will never return nil +* sfinv.get_homepage_name(player) - get the page name of the first page to show to a player +* sfinv.register_page(name, def) - register a page, see section below +* sfinv.override_page(name, def) - overrides fields of an page registered with register_page. + * Note: Page must already be defined, (opt)depend on the mod defining it. +* sfinv.set_player_inventory_formspec(player) - (re)builds page formspec + and calls set_inventory_formspec(). +* sfinv.get_formspec(player, context) - builds current page's formspec + +**Contexts** + +* sfinv.get_or_create_context(player) - gets the player's context +* sfinv.set_context(player, context) + +**Theming** + +* sfinv.make_formspec(player, context, content, show_inv, size) - adds a theme to a formspec + * show_inv, defaults to false. Whether to show the player's main inventory + * size, defaults to `size[8,8.6]` if not specified +* sfinv.get_nav_fs(player, context, nav, current_idx) - creates tabheader or "" + +### sfinv Members + +* pages - table of pages[pagename] = def +* pages_unordered - array table of pages in order of addition (used to build navigation tabs). +* contexts - contexts[playername] = player_context +* enabled - set to false to disable. Good for inventory rehaul mods like unified inventory + +### Context + +A table with these keys: + +* page - current page name +* nav - a list of page names +* nav_titles - a list of page titles +* nav_idx - current nav index (in nav and nav_titles) +* any thing you want to store + * sfinv will clear the stored data on log out / log in + +### sfinv.register_page + +sfinv.register_page(name, def) + +def is a table containing: + +* `title` - human readable page name (required) +* `get(self, player, context)` - returns a formspec string. See formspec variables. (required) +* `is_in_nav(self, player, context)` - return true to show in the navigation (the tab header, by default) +* `on_player_receive_fields(self, player, context, fields)` - on formspec submit. +* `on_enter(self, player, context)` - called when the player changes pages, usually using the tabs. +* `on_leave(self, player, context)` - when leaving this page to go to another, called before other's on_enter + +### get formspec + +Use sfinv.make_formspec to apply a layout: + + return sfinv.make_formspec(player, context, [[ + list[current_player;craft;1.75,0.5;3,3;] + list[current_player;craftpreview;5.75,1.5;1,1;] + image[4.75,1.5;1,1;gui_furnace_arrow_bg.png^[transformR270] + listring[current_player;main] + listring[current_player;craft] + image[0,4.25;1,1;gui_hb_bg.png] + image[1,4.25;1,1;gui_hb_bg.png] + image[2,4.25;1,1;gui_hb_bg.png] + image[3,4.25;1,1;gui_hb_bg.png] + image[4,4.25;1,1;gui_hb_bg.png] + image[5,4.25;1,1;gui_hb_bg.png] + image[6,4.25;1,1;gui_hb_bg.png] + image[7,4.25;1,1;gui_hb_bg.png] + ]], true) + +See above (methods section) for more options. + +### Customising themes + +Simply override this function to change the navigation: + + function sfinv.get_nav_fs(player, context, nav, current_idx) + return "navformspec" + end + +And override this function to change the layout: + + function sfinv.make_formspec(player, context, content, show_inv, size) + local tmp = { + size or "size[8,8.6]", + theme_main, + sfinv.get_nav_fs(player, context, context.nav_titles, context.nav_idx), + content + } + if show_inv then + tmp[4] = theme_inv + end + return table.concat(tmp, "") + end + + +Stairs API +---------- + +The stairs API lets you register stairs and slabs and ensures that they are registered the same way as those +delivered with Minetest Game, to keep them compatible with other mods. + +The following node attributes are sourced from the recipeitem: + * use_texture_alpha + * sunlight_propagates + * light_source + * If the recipeitem is a fuel, the stair/slab is also registered as a fuel of proportionate burntime. + +`stairs.register_stair(subname, recipeitem, groups, images, description, sounds, worldaligntex)` + + * Registers a stair + * `subname`: Basically the material name (e.g. cobble) used for the stair name. Nodename pattern: "stairs:stair_subname" + * `recipeitem`: Item used in the craft recipe, e.g. "default:cobble", may be `nil` + * `groups`: See [Known damage and digging time defining groups] + * `images`: See [Tile definition] + * `description`: Used for the description field in the stair's definition + * `sounds`: See [#Default sounds] + * `worldaligntex`: A bool to set all textures world-aligned. Default false. See [Tile definition] + +`stairs.register_slab(subname, recipeitem, groups, images, description, sounds, worldaligntex)` + + * Registers a slab + * `subname`: Basically the material name (e.g. cobble) used for the slab name. Nodename pattern: "stairs:slab_subname" + * `recipeitem`: Item used in the craft recipe, e.g. "default:cobble" + * `groups`: See [Known damage and digging time defining groups] + * `images`: See [Tile definition] + * `description`: Used for the description field in the slab's definition + * `sounds`: See [#Default sounds] + * `worldaligntex`: A bool to set all textures world-aligned. Default false. See [Tile definition] + +`stairs.register_stair_inner(subname, recipeitem, groups, images, description, sounds, worldaligntex, full_description)` + + * Registers an inner corner stair + * `subname`: Basically the material name (e.g. cobble) used for the stair name. Nodename pattern: "stairs:stair_inner_subname" + * `recipeitem`: Item used in the craft recipe, e.g. "default:cobble", may be `nil` + * `groups`: See [Known damage and digging time defining groups] + * `images`: See [Tile definition] + * `description`: Used for the description field in the stair's definition with "Inner" prepended + * `sounds`: See [#Default sounds] + * `worldaligntex`: A bool to set all textures world-aligned. Default false. See [Tile definition] + * `full_description`: Overrides the description, bypassing string concatenation. This is useful for translation. (optional) + +`stairs.register_stair_outer(subname, recipeitem, groups, images, description, sounds, worldaligntex, full_description)` + + * Registers an outer corner stair + * `subname`: Basically the material name (e.g. cobble) used for the stair name. Nodename pattern: "stairs:stair_outer_subname" + * `recipeitem`: Item used in the craft recipe, e.g. "default:cobble", may be `nil` + * `groups`: See [Known damage and digging time defining groups] + * `images`: See [Tile definition] + * `description`: Used for the description field in the stair's definition with "Outer" prepended + * `sounds`: See [#Default sounds] + * `worldaligntex`: A bool to set all textures world-aligned. Default false. See [Tile definition] + * `full_description`: Overrides the description, bypassing string concatenation. This is useful for translation. (optional) + +``` +stairs.register_stair_and_slab(subname, recipeitem, groups, images, desc_stair, desc_slab, + sounds, worldaligntex, desc_stair_inner, desc_stair_outer) +``` + + * A wrapper for stairs.register_stair, stairs.register_slab, stairs.register_stair_inner, stairs.register_stair_outer + * Uses almost the same arguments as stairs.register_stair + * `desc_stair`: Description for stair nodes. For corner stairs 'Inner' or 'Outer' will be prefixed unless + `desc_stair_inner` or `desc_stair_outer` are specified, which are used instead. + * `desc_slab`: Description for slab node + * `desc_stair_inner`: Description for inner stair node + * `desc_stair_outer`: Description for outer stair node + + +Xpanes API +---------- + +Creates panes that automatically connect to each other + +`xpanes.register_pane(subname, def)` + + * `subname`: used for nodename. Result: "xpanes:subname" and "xpanes:subname_{2..15}" + * `def`: See [#Pane definition] + +### Pane definition + + { + textures = { + "texture for front and back", + (unused), + "texture for the 4 edges" + }, -- More tiles aren't supported + groups = {group = rating}, -- Uses the known node groups, see [Known damage and digging time defining groups] + sounds = SoundSpec, -- See [#Default sounds] + recipe = {{"","","","","","","","",""}}, -- Recipe field only + use_texture_alpha = true, -- Optional boolean (default: `false`) for colored glass panes + } + + +Raillike definitions +-------------------- + +The following nodes use the group `connect_to_raillike` and will only connect to +raillike nodes within this group and the same group value. +Use `minetest.raillike_group()` to get the group value. + +| Node type | Raillike group name +|-----------------------|--------------------- +| default:rail | "rail" +| tnt:gunpowder | "gunpowder" +| tnt:gunpowder_burning | "gunpowder" + +Example: +If you want to add a new rail type and want it to connect with default:rail, +add `connect_to_raillike=minetest.raillike_group("rail")` into the `groups` table +of your node. + + +Default sounds +-------------- + +Sounds inside the default table can be used within the sounds field of node definitions. + + * `default.node_sound_defaults()` + * `default.node_sound_stone_defaults()` + * `default.node_sound_dirt_defaults()` + * `default.node_sound_sand_defaults()` + * `default.node_sound_wood_defaults()` + * `default.node_sound_leaves_defaults()` + * `default.node_sound_glass_defaults()` + * `default.node_sound_metal_defaults()` + + +Default constants +----------------- + +`default.LIGHT_MAX` The maximum light level (see [Node definition] light_source) + + +GUI and formspecs +----------------- + +`default.get_hotbar_bg(x, y)` + + * Get the hotbar background as string, containing the formspec elements + * x: Horizontal position in the formspec + * y: Vertical position in the formspec + +`default.gui_bg` + + * Deprecated, remove from mods. + +`default.gui_bg_img` + + * Deprecated, remove from mods. + +`default.gui_slots` + + * Deprecated, remove from mods. + +`default.gui_survival_form` + + * Entire formspec for the survival inventory + +`default.get_furnace_active_formspec(fuel_percent, item_percent)` + + * Get the active furnace formspec using the defined GUI elements + * fuel_percent: Percent of how much the fuel is used + * item_percent: Percent of how much the item is cooked + +`default.get_furnace_inactive_formspec()` + + * Get the inactive furnace formspec using the defined GUI elements + + +Leafdecay +--------- + +To enable leaf decay for leaves when a tree is cut down by a player, +register the tree with the default.register_leafdecay(leafdecaydef) +function. + +If `param2` of any registered node is ~= 0, the node will always be +preserved. Thus, if the player places a node of that kind, you will +want to set `param2 = 1` or so. + +The function `default.after_place_leaves` can be set as +`after_place_node of a node` to set param2 to 1 if the player places +the node (should not be used for nodes that use param2 otherwise +(e.g. facedir)). + +If the node is in the `leafdecay_drop` group then it will always be +dropped as an item. + +`default.register_leafdecay(leafdecaydef)` + +`leafdecaydef` is a table, with following members: + { + trunks = {"default:tree"}, -- nodes considered trunks + leaves = {"default:leaves", "default:apple"}, + -- nodes considered for removal + radius = 3, -- radius to consider for searching + } + +Note: all the listed nodes in `trunks` have their `on_after_destruct` +callback overridden. All the nodes listed in `leaves` have their +`on_timer` callback overridden. + + +Dyes +---- + +Minetest Game dyes are registered with: + + groups = {dye = 1, color_ = 1}, + +To make recipes that will work with dyes from many mods, define them using the +dye group and the color groups. + +Dye color groups: + + * `color_white` + * `color_grey` + * `color_dark_grey` + * `color_black` + * `color_red` + * `color_pink` + * `color_orange` + * `color_brown` + * `color_yellow` + * `color_green` + * `color_dark_green` + * `color_blue` + * `color_cyan` + * `color_violet` + * `color_magenta` + +Example of one shapeless recipe using the dye group and a color group: + + minetest.register_craft({ + type = "shapeless", + output = ":item_yellow", + recipe = {":item_no_color", "group:dye,color_yellow"}, + }) + + +Trees +----- + + * `default.grow_tree(pos, is_apple_tree)` + * Grows a mgv6 tree or apple tree at pos + + * `default.grow_jungle_tree(pos)` + * Grows a mgv6 jungletree at pos + + * `default.grow_pine_tree(pos)` + * Grows a mgv6 pinetree at pos + + * `default.grow_new_apple_tree(pos)` + * Grows a new design apple tree at pos + + * `default.grow_new_jungle_tree(pos)` + * Grows a new design jungle tree at pos + + * `default.grow_new_pine_tree(pos)` + * Grows a new design pine tree at pos + + * `default.grow_new_snowy_pine_tree(pos)` + * Grows a new design snowy pine tree at pos + + * `default.grow_new_acacia_tree(pos)` + * Grows a new design acacia tree at pos + + * `default.grow_new_aspen_tree(pos)` + * Grows a new design aspen tree at pos + + * `default.grow_bush(pos)` + * Grows a bush at pos + + * `default.grow_acacia_bush(pos)` + * Grows an acaia bush at pos + + * `default.grow_pine_bush(pos)` + * Grows a pine bush at pos + + * `default.grow_blueberry_bush(pos)` + * Grows a blueberry bush at pos + + +Carts +----- + + carts.register_rail( + "mycarts:myrail", -- Rail name + nodedef, -- standard nodedef + railparams -- rail parameter struct (optional) + ) + + railparams = { + on_step(obj, dtime), -- Event handler called when + -- cart is on rail + acceleration, -- integer acceleration factor (negative + -- values to brake) + } + + The event handler is called after all default calculations + are made, so the custom on_step handler can override things + like speed, acceleration, player attachment. The handler will + likely be called many times per second, so the function needs + to make sure that the event is handled properly. + + +Key API +------- + +The key API allows mods to add key functionality to nodes that have +ownership or specific permissions. Using the API will make it so +that a node owner can use skeleton keys on their nodes to create keys +for that node in that location, and give that key to other players, +allowing them some sort of access that they otherwise would not have +due to node protection. + +To make your new nodes work with the key API, you need to register +two callback functions in each nodedef: + + +`on_key_use(pos, player)` + * Is called when a player right-clicks (uses) a normal key on your + * node. + * `pos` - position of the node + * `player` - PlayerRef + * return value: none, ignored + +The `on_key_use` callback should validate that the player is wielding +a key item with the right key meta secret. If needed the code should +deny access to the node functionality. + +If formspecs are used, the formspec callbacks should duplicate these +checks in the metadata callback functions. + + +`on_skeleton_key_use(pos, player, newsecret)` + + * Is called when a player right-clicks (uses) a skeleton key on your + * node. + * `pos` - position of the node + * `player` - PlayerRef + * `newsecret` - a secret value(string) + * return values: + * `secret` - `nil` or the secret value that unlocks the door + * `name` - a string description of the node ("a locked chest") + * `owner` - name of the node owner + +The `on_skeleton_key_use` function should validate that the player has +the right permissions to make a new key for the item. The newsecret +value is useful if the node has no secret value. The function should +store this secret value somewhere so that in the future it may compare +key secrets and match them to allow access. If a node already has a +secret value, the function should return that secret value instead +of the newsecret value. The secret value stored for the node should +not be overwritten, as this would invalidate existing keys. + +Aside from the secret value, the function should retun a descriptive +name for the node and the owner name. The return values are all +encoded in the key that will be given to the player in replacement +for the wielded skeleton key. + +if `nil` is returned, it is assumed that the wielder did not have +permissions to create a key for this node, and no key is created. + +`default.register_craft_metadata_copy(ingredient, result)` +---------------------------------------------------------- + +This function registers a shapeless recipe that takes `ingredient` +and `result` as input and outputs `result`. + +The metadata of the input `result` is copied to the output `result`. + + +Log API +------- + +Logs action of the player with a node at a certain position. +By default only actions of real players are logged. +Actions of non-players (usually machines) are logged only when +setting `log_non_player_actions` is enabled. +A player is considered non-player if `player:is_player()` returns +`false` or `player.is_fake_player` is truthy. The use of +`is_fake_player` is an unofficial standard between mods. +These non-players are marked by the content of `is_fake_player` +(if it is a string) or a "*" in brackets after the player name in +the log. + +`default.log_player_action(player, ...)` + + * `player` The player who performed the action + * `message_parts` Any mumber of message parts describing the action + in 3rd person singular present tense. It can also + contain a `pos` which is logged as "(X,Y,Z)" + +`default.set_inventory_action_loggers(def, name)` + + * sets the callbacks `on_metadata_inventory_move`, + `on_metadata_inventory_put` and `on_metadata_inventory_take` + that log corresponding actions + * `def` See [Node definition] + * `name` Description of the node in the log message diff --git a/menu/header.png b/menu/header.png new file mode 100644 index 00000000..ecd861f8 Binary files /dev/null and b/menu/header.png differ diff --git a/menu/icon.png b/menu/icon.png new file mode 100644 index 00000000..323149bc Binary files /dev/null and b/menu/icon.png differ diff --git a/minetest.conf b/minetest.conf new file mode 100644 index 00000000..e69de29b diff --git a/minetest.conf.example b/minetest.conf.example new file mode 100644 index 00000000..bb6eb644 --- /dev/null +++ b/minetest.conf.example @@ -0,0 +1,80 @@ +# This file contains settings of Minetest Game that can be changed in +# minetest.conf. +# By default, all the settings are commented and not functional. +# Uncomment settings by removing the preceding #. + +# Whether creative mode (fast digging of all blocks, unlimited resources) should +# be enabled. +#creative_mode = false + +# Sets the behaviour of the inventory items when a player dies. +# bones: Store items in a bone node but drop items if inside protected area. +# drop: Drop items on the ground. +# keep: Player keeps items. +#bones_mode = bones + +# The time in seconds after which the bones of a dead player can be looted by +# everyone. +# 0 to disable. +#share_bones_time = 1200 + +# How much earlier the bones of a dead player can be looted by +# everyone if the player dies in a protected area they don't own. +# 0 to disable. By default it is "share_bones_time" divide by four. +#share_bones_time_early = 300 + +# Inform player of condition and location of new bones. +#bones_position_message = false + +# Whether fire should be enabled. If disabled, 'basic_flame' nodes will +# disappear. +# 'permanent_flame' nodes will remain with either setting. +#enable_fire = true + +# Enable flame sound. +#flame_sound = true + +# Whether lavacooling should be enabled. +#enable_lavacooling = true + +# Whether the stuff in initial_stuff should be given to new players. +#give_initial_stuff = false +#initial_stuff = default:pick_steel,default:axe_steel,default:shovel_steel, +default:torch 99,default:cobble 99 + +# Whether the TNT mod should be enabled. +#enable_tnt = + +# The radius of a TNT explosion. +#tnt_radius = 3 + +# Enable the stairs mod ABM that replaces the old 'upside down' +# stair and slab nodes in old maps with the new param2 versions. +#enable_stairs_replace_abm = false + +# Whether to allow respawning in beds. +# Default value is true. +#enable_bed_respawn = true + +# Whether players can skip night by sleeping. +# Default value is true. +#enable_bed_night_skip = true + +# If enabled, fences and walls cannot be jumped over. +#enable_fence_tall = false + +# Whether the engine's spawn search, which does not check for a suitable +# starting biome, is used. +# Default value is false. +#engine_spawn = false + +# Whether river water source nodes create flowing sounds. +# Helps rivers create more sound, especially on level sections. +#river_source_sounds = false + +# Enable cloud and shadow intensity variation by the 'weather' mod. +# Non-functional in V6 or Singlenode mapgens. +#enable_weather = true + +# If enabled, non-player actions are logged +#log_non_player_actions = false diff --git a/modpacks/mydoors b/modpacks/mydoors new file mode 160000 index 00000000..1e7ace69 --- /dev/null +++ b/modpacks/mydoors @@ -0,0 +1 @@ +Subproject commit 1e7ace698bf06f363955d4e77a1fe7f68ecb1128 diff --git a/mods/3d_armor b/mods/3d_armor new file mode 160000 index 00000000..1fd6a10b --- /dev/null +++ b/mods/3d_armor @@ -0,0 +1 @@ +Subproject commit 1fd6a10bf8cac86bd5eb0593aa6f2381d3b904f2 diff --git a/mods/areas b/mods/areas new file mode 160000 index 00000000..5d031415 --- /dev/null +++ b/mods/areas @@ -0,0 +1 @@ +Subproject commit 5d0314158a4e1a436a28292df004fdc8466c0150 diff --git a/mods/arrow_signs b/mods/arrow_signs new file mode 160000 index 00000000..f180f724 --- /dev/null +++ b/mods/arrow_signs @@ -0,0 +1 @@ +Subproject commit f180f7246dec209c50004812a6d776d83aab6aad diff --git a/mods/bacon b/mods/bacon new file mode 160000 index 00000000..d6654f5e --- /dev/null +++ b/mods/bacon @@ -0,0 +1 @@ +Subproject commit d6654f5e74b3051d42cbdd791934340a7076d608 diff --git a/mods/basic_materials b/mods/basic_materials new file mode 160000 index 00000000..9d55f991 --- /dev/null +++ b/mods/basic_materials @@ -0,0 +1 @@ +Subproject commit 9d55f9916d20779ecbf93c7e95dae8adebd2079b diff --git a/mods/basic_robot b/mods/basic_robot new file mode 160000 index 00000000..304f55fe --- /dev/null +++ b/mods/basic_robot @@ -0,0 +1 @@ +Subproject commit 304f55fe830149e9eb495d20ea12cbfcc05d44cb diff --git a/mods/basic_signs b/mods/basic_signs new file mode 160000 index 00000000..6f4f80bd --- /dev/null +++ b/mods/basic_signs @@ -0,0 +1 @@ +Subproject commit 6f4f80bdc6c153c3e7745f182c5e1f2e30f14b50 diff --git a/mods/beds/README.txt b/mods/beds/README.txt new file mode 100644 index 00000000..7b35e141 --- /dev/null +++ b/mods/beds/README.txt @@ -0,0 +1,30 @@ +Minetest Game mod: beds +======================= +See license.txt for license information. + +Authors of source code +---------------------- +Originally by BlockMen (MIT) +Various Minetest developers and contributors (MIT) + +Authors of media (textures) +--------------------------- +BlockMen (CC BY-SA 3.0) + All textures unless otherwise noted + +TumeniNodes (CC BY-SA 3.0) + beds_bed_under.png + +This mod adds a bed to Minetest which allows players to skip the night. +To sleep, right click on the bed. If playing in singleplayer mode the night gets skipped +immediately. If playing multiplayer you get shown how many other players are in bed too, +if all players are sleeping the night gets skipped. The night skip can be forced if more +than half of the players are lying in bed and use this option. + +Another feature is a controlled respawning. If you have slept in bed (not just lying in +it) your respawn point is set to the beds location and you will respawn there after +death. +You can disable the respawn at beds by setting "enable_bed_respawn = false" in +minetest.conf. +You can disable the night skip feature by setting "enable_bed_night_skip = false" in +minetest.conf or by using the /set command in-game. diff --git a/mods/beds/api.lua b/mods/beds/api.lua new file mode 100644 index 00000000..4a9c6679 --- /dev/null +++ b/mods/beds/api.lua @@ -0,0 +1,184 @@ + +local reverse = true + +local function destruct_bed(pos, n) + local node = minetest.get_node(pos) + local other + + if n == 2 then + local dir = minetest.facedir_to_dir(node.param2) + other = vector.subtract(pos, dir) + elseif n == 1 then + local dir = minetest.facedir_to_dir(node.param2) + other = vector.add(pos, dir) + end + + if reverse then + reverse = not reverse + minetest.remove_node(other) + minetest.check_for_falling(other) + beds.remove_spawns_at(pos) + beds.remove_spawns_at(other) + else + reverse = not reverse + end +end + +function beds.register_bed(name, def) + minetest.register_node(name .. "_bottom", { + description = def.description, + inventory_image = def.inventory_image, + wield_image = def.wield_image, + drawtype = "nodebox", + tiles = def.tiles.bottom, + use_texture_alpha = "clip", + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + stack_max = 1, + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 1}, + sounds = def.sounds or default.node_sound_wood_defaults(), + node_box = { + type = "fixed", + fixed = def.nodebox.bottom, + }, + selection_box = { + type = "fixed", + fixed = def.selectionbox, + }, + + on_place = function(itemstack, placer, pointed_thing) + local under = pointed_thing.under + local node = minetest.get_node(under) + local udef = minetest.registered_nodes[node.name] + if udef and udef.on_rightclick and + not (placer and placer:is_player() and + placer:get_player_control().sneak) then + return udef.on_rightclick(under, node, placer, itemstack, + pointed_thing) or itemstack + end + + local pos + if udef and udef.buildable_to then + pos = under + else + pos = pointed_thing.above + end + + local player_name = placer and placer:get_player_name() or "" + + if minetest.is_protected(pos, player_name) and + not minetest.check_player_privs(player_name, "protection_bypass") then + minetest.record_protection_violation(pos, player_name) + return itemstack + end + + local node_def = minetest.registered_nodes[minetest.get_node(pos).name] + if not node_def or not node_def.buildable_to then + return itemstack + end + + local dir = placer and placer:get_look_dir() and + minetest.dir_to_facedir(placer:get_look_dir()) or 0 + local botpos = vector.add(pos, minetest.facedir_to_dir(dir)) + + if minetest.is_protected(botpos, player_name) and + not minetest.check_player_privs(player_name, "protection_bypass") then + minetest.record_protection_violation(botpos, player_name) + return itemstack + end + + local botdef = minetest.registered_nodes[minetest.get_node(botpos).name] + if not botdef or not botdef.buildable_to then + return itemstack + end + + minetest.set_node(pos, {name = name .. "_bottom", param2 = dir}) + minetest.set_node(botpos, {name = name .. "_top", param2 = dir}) + + if not minetest.is_creative_enabled(player_name) then + itemstack:take_item() + end + return itemstack + end, + + on_destruct = function(pos) + destruct_bed(pos, 1) + end, + + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + beds.on_rightclick(pos, clicker) + return itemstack + end, + + on_rotate = function(pos, node, user, _, new_param2) + local dir = minetest.facedir_to_dir(node.param2) + local p = vector.add(pos, dir) + local node2 = minetest.get_node_or_nil(p) + if not node2 or not minetest.get_item_group(node2.name, "bed") == 2 or + not node.param2 == node2.param2 then + return false + end + if minetest.is_protected(p, user:get_player_name()) then + minetest.record_protection_violation(p, user:get_player_name()) + return false + end + if new_param2 % 32 > 3 then + return false + end + local newp = vector.add(pos, minetest.facedir_to_dir(new_param2)) + local node3 = minetest.get_node_or_nil(newp) + local node_def = node3 and minetest.registered_nodes[node3.name] + if not node_def or not node_def.buildable_to then + return false + end + if minetest.is_protected(newp, user:get_player_name()) then + minetest.record_protection_violation(newp, user:get_player_name()) + return false + end + node.param2 = new_param2 + -- do not remove_node here - it will trigger destroy_bed() + minetest.set_node(p, {name = "air"}) + minetest.set_node(pos, node) + minetest.set_node(newp, {name = name .. "_top", param2 = new_param2}) + return true + end, + can_dig = function(pos, player) + return beds.can_dig(pos) + end, + }) + + minetest.register_node(name .. "_top", { + drawtype = "nodebox", + tiles = def.tiles.top, + use_texture_alpha = "clip", + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + pointable = false, + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 2, + not_in_creative_inventory = 1}, + sounds = def.sounds or default.node_sound_wood_defaults(), + drop = name .. "_bottom", + node_box = { + type = "fixed", + fixed = def.nodebox.top, + }, + on_destruct = function(pos) + destruct_bed(pos, 2) + end, + can_dig = function(pos, player) + local node = minetest.get_node(pos) + local dir = minetest.facedir_to_dir(node.param2) + local p = vector.add(pos, dir) + return beds.can_dig(p) + end, + }) + + minetest.register_alias(name, name .. "_bottom") + + minetest.register_craft({ + output = name, + recipe = def.recipe + }) +end diff --git a/mods/beds/beds.lua b/mods/beds/beds.lua new file mode 100644 index 00000000..dc044a35 --- /dev/null +++ b/mods/beds/beds.lua @@ -0,0 +1,109 @@ +-- beds/beds.lua + +-- support for MT game translation. +local S = beds.get_translator + +-- Fancy shaped bed + +beds.register_bed("beds:fancy_bed", { + description = S("Fancy Bed"), + inventory_image = "beds_bed_fancy.png", + wield_image = "beds_bed_fancy.png", + tiles = { + bottom = { + "beds_bed_top1.png", + "beds_bed_under.png", + "beds_bed_side1.png", + "beds_bed_side1.png^[transformFX", + "beds_bed_foot.png", + "beds_bed_foot.png", + }, + top = { + "beds_bed_top2.png", + "beds_bed_under.png", + "beds_bed_side2.png", + "beds_bed_side2.png^[transformFX", + "beds_bed_head.png", + "beds_bed_head.png", + } + }, + nodebox = { + bottom = { + {-0.5, -0.5, -0.5, -0.375, -0.065, -0.4375}, + {0.375, -0.5, -0.5, 0.5, -0.065, -0.4375}, + {-0.5, -0.375, -0.5, 0.5, -0.125, -0.4375}, + {-0.5, -0.375, -0.5, -0.4375, -0.125, 0.5}, + {0.4375, -0.375, -0.5, 0.5, -0.125, 0.5}, + {-0.4375, -0.3125, -0.4375, 0.4375, -0.0625, 0.5}, + }, + top = { + {-0.5, -0.5, 0.4375, -0.375, 0.1875, 0.5}, + {0.375, -0.5, 0.4375, 0.5, 0.1875, 0.5}, + {-0.5, 0, 0.4375, 0.5, 0.125, 0.5}, + {-0.5, -0.375, 0.4375, 0.5, -0.125, 0.5}, + {-0.5, -0.375, -0.5, -0.4375, -0.125, 0.5}, + {0.4375, -0.375, -0.5, 0.5, -0.125, 0.5}, + {-0.4375, -0.3125, -0.5, 0.4375, -0.0625, 0.4375}, + } + }, + selectionbox = {-0.5, -0.5, -0.5, 0.5, 0.06, 1.5}, + recipe = { + {"", "", "group:stick"}, + {"wool:white", "wool:white", "wool:white"}, + {"group:wood", "group:wood", "group:wood"}, + }, +}) + +-- Simple shaped bed + +beds.register_bed("beds:bed", { + description = S("Simple Bed"), + inventory_image = "beds_bed.png", + wield_image = "beds_bed.png", + tiles = { + bottom = { + "beds_bed_top_bottom.png^[transformR90", + "beds_bed_under.png", + "beds_bed_side_bottom_r.png", + "beds_bed_side_bottom_r.png^[transformfx", + "beds_transparent.png", + "beds_bed_side_bottom.png" + }, + top = { + "beds_bed_top_top.png^[transformR90", + "beds_bed_under.png", + "beds_bed_side_top_r.png", + "beds_bed_side_top_r.png^[transformfx", + "beds_bed_side_top.png", + "beds_transparent.png", + } + }, + nodebox = { + bottom = {-0.5, -0.5, -0.5, 0.5, 0.0625, 0.5}, + top = {-0.5, -0.5, -0.5, 0.5, 0.0625, 0.5}, + }, + selectionbox = {-0.5, -0.5, -0.5, 0.5, 0.0625, 1.5}, + recipe = { + {"wool:white", "wool:white", "wool:white"}, + {"group:wood", "group:wood", "group:wood"} + }, +}) + +-- Aliases for PilzAdam's beds mod + +minetest.register_alias("beds:bed_bottom_red", "beds:bed_bottom") +minetest.register_alias("beds:bed_top_red", "beds:bed_top") + +-- Fuel + +minetest.register_craft({ + type = "fuel", + recipe = "beds:fancy_bed_bottom", + burntime = 13, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "beds:bed_bottom", + burntime = 12, +}) diff --git a/mods/beds/functions.lua b/mods/beds/functions.lua new file mode 100644 index 00000000..409aa376 --- /dev/null +++ b/mods/beds/functions.lua @@ -0,0 +1,300 @@ +local pi = math.pi +local is_sp = minetest.is_singleplayer() +local enable_respawn = minetest.settings:get_bool("enable_bed_respawn") +if enable_respawn == nil then + enable_respawn = true +end + +-- support for MT game translation. +local S = beds.get_translator + +-- Helper functions + +local function get_look_yaw(pos) + local rotation = minetest.get_node(pos).param2 + if rotation > 3 then + rotation = rotation % 4 -- Mask colorfacedir values + end + if rotation == 1 then + return pi / 2, rotation + elseif rotation == 3 then + return -pi / 2, rotation + elseif rotation == 0 then + return pi, rotation + else + return 0, rotation + end +end + +local function is_night_skip_enabled() + local enable_night_skip = minetest.settings:get_bool("enable_bed_night_skip") + if enable_night_skip == nil then + enable_night_skip = true + end + return enable_night_skip +end + +local function check_in_beds(players) + local in_bed = beds.player + if not players then + players = minetest.get_connected_players() + end + + for n, player in ipairs(players) do + local name = player:get_player_name() + if not in_bed[name] then + return false + end + end + + return #players > 0 +end + +local function lay_down(player, pos, bed_pos, state, skip) + local name = player:get_player_name() + local hud_flags = player:hud_get_flags() + + if not player or not name then + return + end + + -- stand up + if state ~= nil and not state then + if not beds.player[name] then + -- player not in bed, do nothing + return false + end + beds.bed_position[name] = nil + -- skip here to prevent sending player specific changes (used for leaving players) + if skip then + return + end + player:set_pos(beds.pos[name]) + + -- physics, eye_offset, etc + local physics_override = beds.player[name].physics_override + beds.player[name] = nil + player:set_physics_override({ + speed = physics_override.speed, + jump = physics_override.jump, + gravity = physics_override.gravity + }) + player:set_eye_offset({x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0}) + player:set_look_horizontal(math.random(1, 180) / 100) + player_api.player_attached[name] = false + hud_flags.wielditem = true + player_api.set_animation(player, "stand" , 30) + + -- lay down + else + + -- Check if bed is occupied + for _, other_pos in pairs(beds.bed_position) do + if vector.distance(bed_pos, other_pos) < 0.1 then + minetest.chat_send_player(name, S("This bed is already occupied!")) + return false + end + end + + -- Check if player is moving + if vector.length(player:get_velocity()) > 0.001 then + minetest.chat_send_player(name, S("You have to stop moving before going to bed!")) + return false + end + + -- Check if player is attached to an object + if player:get_attach() then + return false + end + + if beds.player[name] then + -- player already in bed, do nothing + return false + end + + beds.pos[name] = pos + beds.bed_position[name] = bed_pos + beds.player[name] = {physics_override = player:get_physics_override()} + + local yaw, param2 = get_look_yaw(bed_pos) + player:set_look_horizontal(yaw) + local dir = minetest.facedir_to_dir(param2) + -- p.y is just above the nodebox height of the 'Simple Bed' (the highest bed), + -- to avoid sinking down through the bed. + local p = { + x = bed_pos.x + dir.x / 2, + y = bed_pos.y + 0.07, + z = bed_pos.z + dir.z / 2 + } + player:set_physics_override({speed = 0, jump = 0, gravity = 0}) + player:set_pos(p) + player_api.player_attached[name] = true + hud_flags.wielditem = false + player_api.set_animation(player, "lay" , 0) + end + + player:hud_set_flags(hud_flags) +end + +local function get_player_in_bed_count() + local c = 0 + for _, _ in pairs(beds.player) do + c = c + 1 + end + return c +end + +local function update_formspecs(finished) + local ges = #minetest.get_connected_players() + local player_in_bed = get_player_in_bed_count() + local is_majority = (ges / 2) < player_in_bed + + local form_n + local esc = minetest.formspec_escape + if finished then + form_n = beds.formspec .. "label[2.7,9;" .. esc(S("Good morning.")) .. "]" + else + form_n = beds.formspec .. "label[2.2,9;" .. + esc(S("@1 of @2 players are in bed", player_in_bed, ges)) .. "]" + if is_majority and is_night_skip_enabled() then + form_n = form_n .. "button_exit[2,6;4,0.75;force;" .. + esc(S("Force night skip")) .. "]" + end + end + + for name,_ in pairs(beds.player) do + minetest.show_formspec(name, "beds_form", form_n) + end +end + + +-- Public functions + +function beds.kick_players() + for name, _ in pairs(beds.player) do + local player = minetest.get_player_by_name(name) + lay_down(player, nil, nil, false) + end +end + +function beds.skip_night() + minetest.set_timeofday(0.23) +end + +function beds.on_rightclick(pos, player) + local name = player:get_player_name() + local ppos = player:get_pos() + local tod = minetest.get_timeofday() + + if tod > 0.2 and tod < 0.805 then + if beds.player[name] then + lay_down(player, nil, nil, false) + end + minetest.chat_send_player(name, S("You can only sleep at night.")) + return + end + + -- move to bed + if not beds.player[name] then + lay_down(player, ppos, pos) + beds.set_spawns() -- save respawn positions when entering bed + else + lay_down(player, nil, nil, false) + end + + if not is_sp then + update_formspecs(false) + end + + -- skip the night and let all players stand up + if check_in_beds() then + minetest.after(2, function() + if not is_sp then + update_formspecs(is_night_skip_enabled()) + end + if is_night_skip_enabled() then + beds.skip_night() + beds.kick_players() + end + end) + end +end + +function beds.can_dig(bed_pos) + -- Check all players in bed which one is at the expected position + for _, player_bed_pos in pairs(beds.bed_position) do + if vector.equals(bed_pos, player_bed_pos) then + return false + end + end + return true +end + +-- Callbacks +-- Only register respawn callback if respawn enabled +if enable_respawn then + -- respawn player at bed if enabled and valid position is found + minetest.register_on_respawnplayer(function(player) + local name = player:get_player_name() + local pos = beds.spawn[name] + if pos then + player:set_pos(pos) + return true + end + end) +end + +minetest.register_on_leaveplayer(function(player) + local name = player:get_player_name() + lay_down(player, nil, nil, false, true) + beds.player[name] = nil + if check_in_beds() then + minetest.after(2, function() + update_formspecs(is_night_skip_enabled()) + if is_night_skip_enabled() then + beds.skip_night() + beds.kick_players() + end + end) + end +end) + +minetest.register_on_dieplayer(function(player) + local name = player:get_player_name() + local in_bed = beds.player + local pos = player:get_pos() + local yaw = get_look_yaw(pos) + + if in_bed[name] then + lay_down(player, nil, pos, false) + player:set_look_horizontal(yaw) + player:set_pos(pos) + end +end) + +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname ~= "beds_form" then + return + end + + -- Because "Force night skip" button is a button_exit, it will set fields.quit + -- and lay_down call will change value of player_in_bed, so it must be taken + -- earlier. + local last_player_in_bed = get_player_in_bed_count() + + if fields.quit or fields.leave then + lay_down(player, nil, nil, false) + update_formspecs(false) + end + + if fields.force then + local is_majority = (#minetest.get_connected_players() / 2) < last_player_in_bed + if is_majority and is_night_skip_enabled() then + update_formspecs(true) + beds.skip_night() + beds.kick_players() + else + update_formspecs(false) + end + end +end) diff --git a/mods/beds/init.lua b/mods/beds/init.lua new file mode 100644 index 00000000..a1a46ce9 --- /dev/null +++ b/mods/beds/init.lua @@ -0,0 +1,26 @@ +-- beds/init.lua + +-- Load support for MT game translation. +local S = minetest.get_translator("beds") +local esc = minetest.formspec_escape + +beds = {} +beds.player = {} +beds.bed_position = {} +beds.pos = {} +beds.spawn = {} +beds.get_translator = S + +beds.formspec = "size[8,11;true]" .. + "no_prepend[]" .. + "bgcolor[#080808BB;true]" .. + "button_exit[2,10;4,0.75;leave;" .. esc(S("Leave Bed")) .. "]" + +local modpath = minetest.get_modpath("beds") + +-- Load files + +dofile(modpath .. "/functions.lua") +dofile(modpath .. "/api.lua") +dofile(modpath .. "/beds.lua") +dofile(modpath .. "/spawns.lua") diff --git a/mods/beds/license.txt b/mods/beds/license.txt new file mode 100644 index 00000000..f3c517f9 --- /dev/null +++ b/mods/beds/license.txt @@ -0,0 +1,61 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2014-2016 BlockMen +Copyright (C) 2014-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2014-2016 BlockMen +Copyright (C) 2018 TumeniNodes + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/beds/locale/beds.de.tr b/mods/beds/locale/beds.de.tr new file mode 100644 index 00000000..3f2c959e --- /dev/null +++ b/mods/beds/locale/beds.de.tr @@ -0,0 +1,10 @@ +# textdomain: beds +Fancy Bed=Schickes Bett +Simple Bed=Schlichtes Bett +This bed is already occupied!=Dieses Bett ist bereits belegt! +You have to stop moving before going to bed!=Sie müssen stehen bleiben, bevor Sie zu Bett gehen können! +Good morning.=Guten Morgen. +@1 of @2 players are in bed=@1 von @2 Spielern sind im Bett +Force night skip=Überspringen der Nacht erzwingen +You can only sleep at night.=Sie können nur nachts schlafen. +Leave Bed=Bett verlassen diff --git a/mods/beds/locale/beds.eo.tr b/mods/beds/locale/beds.eo.tr new file mode 100644 index 00000000..6acb83d8 --- /dev/null +++ b/mods/beds/locale/beds.eo.tr @@ -0,0 +1,10 @@ +# textdomain: beds +Fancy Bed=Luksa Lito +Simple Bed=Simpla Lito +This bed is already occupied!=Tiu lito jam estas okupata! +You have to stop moving before going to bed!=Vi ĉesu moviĝi por enlitiĝi! +Good morning.=Bonan matenon. +@1 of @2 players are in bed=@1 el @2 ludantoj estas en lito +Force night skip=Devigi noktan salton +You can only sleep at night.=Vi povas dormi nur nokte. +Leave Bed=Ellitiĝi diff --git a/mods/beds/locale/beds.es.tr b/mods/beds/locale/beds.es.tr new file mode 100644 index 00000000..8ef0db73 --- /dev/null +++ b/mods/beds/locale/beds.es.tr @@ -0,0 +1,10 @@ +# textdomain: beds +Fancy Bed=Cama de lujo +Simple Bed=Cama sencilla +This bed is already occupied!=Esta cama esta ocupada +You have to stop moving before going to bed!=Deja de moverte o no podras acostarte +Good morning.=Buenos días. +@1 of @2 players are in bed=@1 de @2 jugadores están durmiendo +Force night skip=Forzar hacer de dia +You can only sleep at night.=Sólo puedes dormir por la noche. +Leave Bed=Levantarse diff --git a/mods/beds/locale/beds.fr.tr b/mods/beds/locale/beds.fr.tr new file mode 100644 index 00000000..43c06e3c --- /dev/null +++ b/mods/beds/locale/beds.fr.tr @@ -0,0 +1,10 @@ +# textdomain: beds +Fancy Bed=Lit chic +Simple Bed=Lit simple +This bed is already occupied!=Ce lit est déjà occupé ! +You have to stop moving before going to bed!=Vous devez arrêter de bouger avant de vous coucher ! +Good morning.=Bonjour. +@1 of @2 players are in bed=@1 joueur(s) sur @2 sont au lit +Force night skip=Forcer le passage de la nuit +You can only sleep at night.=Vous ne pouvez dormir que la nuit. +Leave Bed=Se lever du lit diff --git a/mods/beds/locale/beds.id.tr b/mods/beds/locale/beds.id.tr new file mode 100644 index 00000000..7bcbb5df --- /dev/null +++ b/mods/beds/locale/beds.id.tr @@ -0,0 +1,10 @@ +# textdomain: beds +Fancy Bed=Ranjang Mewah +Simple Bed=Ranjang Sederhana +This bed is already occupied!= +You have to stop moving before going to bed!= +Good morning.=Selamat pagi. +@1 of @2 players are in bed=@1 dari @2 pemain sedang tidur +Force night skip=Paksa lewati malam +You can only sleep at night.=Anda hanya dapat tidur pada waktu malam. +Leave Bed=Tinggalkan Ranjang diff --git a/mods/beds/locale/beds.it.tr b/mods/beds/locale/beds.it.tr new file mode 100644 index 00000000..8f4e14ea --- /dev/null +++ b/mods/beds/locale/beds.it.tr @@ -0,0 +1,10 @@ +# textdomain: beds +Fancy Bed=Letto decorato +Simple Bed=Letto semplice +This bed is already occupied!= +You have to stop moving before going to bed!= +Good morning.= +@1 of @2 players are in bed= +Force night skip= +You can only sleep at night.= +Leave Bed=Alzati dal letto diff --git a/mods/beds/locale/beds.ja.tr b/mods/beds/locale/beds.ja.tr new file mode 100644 index 00000000..50344566 --- /dev/null +++ b/mods/beds/locale/beds.ja.tr @@ -0,0 +1,10 @@ +# textdomain: beds +Fancy Bed=ファンシーなベッド +Simple Bed=シンプルなベッド +This bed is already occupied!=ベッドはすでに使われています! +You have to stop moving before going to bed!=寝るときは動かないでください! +Good morning.=おはようございます。 +@1 of @2 players are in bed=ベッドに@1 / @2人います +Force night skip=強制的に夜をスキップします +You can only sleep at night.=夜しか寝れません。 +Leave Bed=ベッドから出ます diff --git a/mods/beds/locale/beds.jbo.tr b/mods/beds/locale/beds.jbo.tr new file mode 100644 index 00000000..a72f686c --- /dev/null +++ b/mods/beds/locale/beds.jbo.tr @@ -0,0 +1,10 @@ +# textdomain: beds +Fancy Bed=lo selja'i ckana +Simple Bed=lo sampu ckana +This bed is already occupied!=.i lo ti ckana cu canlu +You have to stop moving before going to bed!=lo nu do cando cu sarcu lo nu do sipna +Good morning.=.i .uise'inai cerni +@1 of @2 players are in bed=.i @1 cmima be lu'i @2 le pilno cu vreta lo ckana +Force night skip=bapli le nu co'u nicte +You can only sleep at night.=.i steci le ka nicte kei fa le ka do kakne le ka sipna ca pa ckaji be ce'u +Leave Bed=cliva lo ckana diff --git a/mods/beds/locale/beds.ms.tr b/mods/beds/locale/beds.ms.tr new file mode 100644 index 00000000..4d4310a9 --- /dev/null +++ b/mods/beds/locale/beds.ms.tr @@ -0,0 +1,10 @@ +# textdomain: beds +Fancy Bed=Katil Beragam +Simple Bed=Katil Biasa +This bed is already occupied!= +You have to stop moving before going to bed!= +Good morning.=Selamat pagi. +@1 of @2 players are in bed=@1 daripada @2 pemain sedang tidur +Force night skip=Paksa langkau malam +You can only sleep at night.=Anda hanya boleh tidur pada waktu malam. +Leave Bed=Bangun diff --git a/mods/beds/locale/beds.pl.tr b/mods/beds/locale/beds.pl.tr new file mode 100644 index 00000000..2bc03c61 --- /dev/null +++ b/mods/beds/locale/beds.pl.tr @@ -0,0 +1,10 @@ +# textdomain: beds +Fancy Bed=Fantazyjne łóżko +Simple Bed=Proste łóżko +This bed is already occupied!=To łóżko jest już zajęte! +You have to stop moving before going to bed!=Musisz się zatrzymać aby wejść do łóżka +Good morning.=Dzień dobry. +@1 of @2 players are in bed=@1 z @2 graczy śpią +Force night skip=Wymuś pominięcie nocy +You can only sleep at night.=Możesz spać tylko w nocy. +Leave Bed=Opuść łóżko diff --git a/mods/beds/locale/beds.pt_BR.tr b/mods/beds/locale/beds.pt_BR.tr new file mode 100644 index 00000000..47fb1b93 --- /dev/null +++ b/mods/beds/locale/beds.pt_BR.tr @@ -0,0 +1,10 @@ +# textdomain: beds +Fancy Bed=Cama Bonita +Simple Bed=Cama Simples +This bed is already occupied!=Esta cama já está ocupada! +You have to stop moving before going to bed!=Você precisa parar de se mover antes de ir para cama! +Good morning.=Bom dia. +@1 of @2 players are in bed=@1 de @2 jogadores estão na cama +Force night skip=Forçar o amanhecer +You can only sleep at night.=Você só pode dormir à noite +Leave Bed=Sair da Cama diff --git a/mods/beds/locale/beds.ru.tr b/mods/beds/locale/beds.ru.tr new file mode 100644 index 00000000..73db735c --- /dev/null +++ b/mods/beds/locale/beds.ru.tr @@ -0,0 +1,10 @@ +# textdomain: beds +Fancy Bed=Детализированная Кровать +Simple Bed=Обычная Кровать +This bed is already occupied!=Эта кровать уже занята! +You have to stop moving before going to bed!=Нельзя воспользоваться кроватью на ходу! +Good morning.=Доброе утро. +@1 of @2 players are in bed=@1 из @2 игроков в кровати +Force night skip=Пропустить ночь +You can only sleep at night.=Вы можете спать только ночью. +Leave Bed=Встать с кровати diff --git a/mods/beds/locale/beds.sk.tr b/mods/beds/locale/beds.sk.tr new file mode 100644 index 00000000..5f31f0fd --- /dev/null +++ b/mods/beds/locale/beds.sk.tr @@ -0,0 +1,10 @@ +# textdomain: beds +Fancy Bed=Pekná posteľ +Simple Bed=Jednoduchá posteľ +This bed is already occupied!=Táto posteľ je už obsadená +You have to stop moving before going to bed!=Predtým ako si ľahneš do postele, sa musíš prestať pohybovať! +Good morning.=Dobré ráno. +@1 of @2 players are in bed=@1 z @2 hráčov sú v posteli +Force night skip=Nútene preskočiť noc +You can only sleep at night.=Môžeš spať len v noci. +Leave Bed=Opusti posteľ diff --git a/mods/beds/locale/beds.sv.tr b/mods/beds/locale/beds.sv.tr new file mode 100644 index 00000000..3b737b46 --- /dev/null +++ b/mods/beds/locale/beds.sv.tr @@ -0,0 +1,10 @@ +# textdomain: beds +Fancy Bed=Fin säng +Simple Bed=Enkel säng +This bed is already occupied!=Den här sängen används redan! +You have to stop moving before going to bed!=Du måste stanna innan du kan lägga dig! +Good morning.=God morgon. +@1 of @2 players are in bed=@1 av @2 spelare försöker sova. +Force night skip=Tvinga att hoppa över natt +You can only sleep at night.=Du kan bara sova på natten. +Leave Bed=Lämna säng diff --git a/mods/beds/locale/beds.uk.tr b/mods/beds/locale/beds.uk.tr new file mode 100644 index 00000000..f95da70b --- /dev/null +++ b/mods/beds/locale/beds.uk.tr @@ -0,0 +1,10 @@ +# textdomain: beds +Fancy Bed=Деталізована Постіль +Simple Bed=Звичайна Постіль +This bed is already occupied!=Ця постіль вже зайнята! +You have to stop moving before going to bed!=Не можна скористатись постіллю на ходу! +Good morning.=Доброго ранку. +@1 of @2 players are in bed=@1 з @2 гравців в ліжку +Force night skip=Пропустити ніч +You can only sleep at night.=Ви можете спати тільки вночі. +Leave Bed=Встати з ліжка diff --git a/mods/beds/locale/beds.zh_CN.tr b/mods/beds/locale/beds.zh_CN.tr new file mode 100644 index 00000000..7e6cfc7a --- /dev/null +++ b/mods/beds/locale/beds.zh_CN.tr @@ -0,0 +1,10 @@ +# textdomain: beds +Fancy Bed=花式床 +Simple Bed=简易床 +This bed is already occupied!=床上已有人! +You have to stop moving before going to bed!=上床前要停止移动! +Good morning.=早安! +@1 of @2 players are in bed=@2位玩家中的@1位在床上 +Force night skip=强制跳过夜晚 +You can only sleep at night.=你只能在晚上睡觉。 +Leave Bed=离开床 diff --git a/mods/beds/locale/beds.zh_TW.tr b/mods/beds/locale/beds.zh_TW.tr new file mode 100644 index 00000000..b19b4814 --- /dev/null +++ b/mods/beds/locale/beds.zh_TW.tr @@ -0,0 +1,10 @@ +# textdomain: beds +Fancy Bed=花式床 +Simple Bed=簡易床 +This bed is already occupied!= +You have to stop moving before going to bed!= +Good morning.=早安! +@1 of @2 players are in bed=@2位玩家中的@1位在床上 +Force night skip=強制跳過夜晚 +You can only sleep at night.=你只能在晚上睡覺。 +Leave Bed=離開床 diff --git a/mods/beds/locale/template.txt b/mods/beds/locale/template.txt new file mode 100644 index 00000000..a965787b --- /dev/null +++ b/mods/beds/locale/template.txt @@ -0,0 +1,10 @@ +# textdomain: beds +Fancy Bed= +Simple Bed= +This bed is already occupied!= +You have to stop moving before going to bed!= +Good morning.= +@1 of @2 players are in bed= +Force night skip= +You can only sleep at night.= +Leave Bed= diff --git a/mods/beds/mod.conf b/mods/beds/mod.conf new file mode 100644 index 00000000..450ec138 --- /dev/null +++ b/mods/beds/mod.conf @@ -0,0 +1,3 @@ +name = beds +description = Minetest Game mod: beds +depends = default, wool diff --git a/mods/beds/spawns.lua b/mods/beds/spawns.lua new file mode 100644 index 00000000..1a2ce810 --- /dev/null +++ b/mods/beds/spawns.lua @@ -0,0 +1,72 @@ +local world_path = minetest.get_worldpath() +local org_file = world_path .. "/beds_spawns" +local file = world_path .. "/beds_spawns" +local bkwd = false + +-- check for PA's beds mod spawns +local cf = io.open(world_path .. "/beds_player_spawns", "r") +if cf ~= nil then + io.close(cf) + file = world_path .. "/beds_player_spawns" + bkwd = true +end + +function beds.read_spawns() + local spawns = beds.spawn + local input = io.open(file, "r") + if input and not bkwd then + repeat + local x = input:read("*n") + if x == nil then + break + end + local y = input:read("*n") + local z = input:read("*n") + local name = input:read("*l") + spawns[name:sub(2)] = {x = x, y = y, z = z} + until input:read(0) == nil + io.close(input) + elseif input and bkwd then + beds.spawn = minetest.deserialize(input:read("*all")) + input:close() + beds.save_spawns() + os.rename(file, file .. ".backup") + file = org_file + end +end + +beds.read_spawns() + +function beds.save_spawns() + if not beds.spawn then + return + end + local data = {} + local output = io.open(org_file, "w") + for k, v in pairs(beds.spawn) do + table.insert(data, string.format("%.1f %.1f %.1f %s\n", v.x, v.y, v.z, k)) + end + output:write(table.concat(data)) + io.close(output) +end + +function beds.set_spawns() + for name,_ in pairs(beds.player) do + local player = minetest.get_player_by_name(name) + local p = player:get_pos() + -- but don't change spawn location if borrowing a bed + if not minetest.is_protected(p, name) then + beds.spawn[name] = p + end + end + beds.save_spawns() +end + +function beds.remove_spawns_at(pos) + for name, p in pairs(beds.spawn) do + if vector.equals(vector.round(p), pos) then + beds.spawn[name] = nil + end + end + beds.save_spawns() +end diff --git a/mods/beds/textures/beds_bed.png b/mods/beds/textures/beds_bed.png new file mode 100644 index 00000000..d4b02e77 Binary files /dev/null and b/mods/beds/textures/beds_bed.png differ diff --git a/mods/beds/textures/beds_bed_fancy.png b/mods/beds/textures/beds_bed_fancy.png new file mode 100644 index 00000000..1c9fde9a Binary files /dev/null and b/mods/beds/textures/beds_bed_fancy.png differ diff --git a/mods/beds/textures/beds_bed_foot.png b/mods/beds/textures/beds_bed_foot.png new file mode 100644 index 00000000..af510bb6 Binary files /dev/null and b/mods/beds/textures/beds_bed_foot.png differ diff --git a/mods/beds/textures/beds_bed_head.png b/mods/beds/textures/beds_bed_head.png new file mode 100644 index 00000000..b98b1104 Binary files /dev/null and b/mods/beds/textures/beds_bed_head.png differ diff --git a/mods/beds/textures/beds_bed_side1.png b/mods/beds/textures/beds_bed_side1.png new file mode 100644 index 00000000..8ded54fd Binary files /dev/null and b/mods/beds/textures/beds_bed_side1.png differ diff --git a/mods/beds/textures/beds_bed_side2.png b/mods/beds/textures/beds_bed_side2.png new file mode 100644 index 00000000..a6bdb99d Binary files /dev/null and b/mods/beds/textures/beds_bed_side2.png differ diff --git a/mods/beds/textures/beds_bed_side_bottom.png b/mods/beds/textures/beds_bed_side_bottom.png new file mode 100644 index 00000000..ed80f752 Binary files /dev/null and b/mods/beds/textures/beds_bed_side_bottom.png differ diff --git a/mods/beds/textures/beds_bed_side_bottom_r.png b/mods/beds/textures/beds_bed_side_bottom_r.png new file mode 100644 index 00000000..2d86532d Binary files /dev/null and b/mods/beds/textures/beds_bed_side_bottom_r.png differ diff --git a/mods/beds/textures/beds_bed_side_top.png b/mods/beds/textures/beds_bed_side_top.png new file mode 100644 index 00000000..04b2ba1e Binary files /dev/null and b/mods/beds/textures/beds_bed_side_top.png differ diff --git a/mods/beds/textures/beds_bed_side_top_r.png b/mods/beds/textures/beds_bed_side_top_r.png new file mode 100644 index 00000000..c3c07b1b Binary files /dev/null and b/mods/beds/textures/beds_bed_side_top_r.png differ diff --git a/mods/beds/textures/beds_bed_top1.png b/mods/beds/textures/beds_bed_top1.png new file mode 100644 index 00000000..2b3ae8dc Binary files /dev/null and b/mods/beds/textures/beds_bed_top1.png differ diff --git a/mods/beds/textures/beds_bed_top2.png b/mods/beds/textures/beds_bed_top2.png new file mode 100644 index 00000000..b80353cb Binary files /dev/null and b/mods/beds/textures/beds_bed_top2.png differ diff --git a/mods/beds/textures/beds_bed_top_bottom.png b/mods/beds/textures/beds_bed_top_bottom.png new file mode 100644 index 00000000..43dcc649 Binary files /dev/null and b/mods/beds/textures/beds_bed_top_bottom.png differ diff --git a/mods/beds/textures/beds_bed_top_top.png b/mods/beds/textures/beds_bed_top_top.png new file mode 100644 index 00000000..9b3d08fa Binary files /dev/null and b/mods/beds/textures/beds_bed_top_top.png differ diff --git a/mods/beds/textures/beds_bed_under.png b/mods/beds/textures/beds_bed_under.png new file mode 100644 index 00000000..1a67367d Binary files /dev/null and b/mods/beds/textures/beds_bed_under.png differ diff --git a/mods/beds/textures/beds_transparent.png b/mods/beds/textures/beds_transparent.png new file mode 100644 index 00000000..bd36820b Binary files /dev/null and b/mods/beds/textures/beds_transparent.png differ diff --git a/mods/binoculars/README.txt b/mods/binoculars/README.txt new file mode 100644 index 00000000..0c65f6ea --- /dev/null +++ b/mods/binoculars/README.txt @@ -0,0 +1,37 @@ +Minetest Game mod: binoculars +============================= +See license.txt for license information. + +Authors of source code +---------------------- +paramat (MIT) + +Authors of media (textures) +--------------------------- +paramat (CC BY-SA 3.0): + binoculars_binoculars.png + +Crafting +-------- +binoculars:binoculars + +default:obsidian_glass O +default:bronze_ingot B + +O_O +BBB +O_O + +Usage +----- +In survival mode, use of zoom requires the binoculars item in your inventory, +they will allow a 10 degree field of view. +It can take up to 5 seconds for adding to or removal from inventory to have an +effect, however to instantly allow the use of this zoom 'use' (leftclick) the +item. + +Zoom with a field of view of 15 degrees is automatically allowed in creative +mode and for any player with the 'creative' privilege. + +The 'binoculars.update_player_property()' function is global so can be +redefined by a mod for alternative behaviour. diff --git a/mods/binoculars/init.lua b/mods/binoculars/init.lua new file mode 100644 index 00000000..914a8611 --- /dev/null +++ b/mods/binoculars/init.lua @@ -0,0 +1,73 @@ +-- binoculars/init.lua + +-- Mod global namespace + +binoculars = {} + +-- Load support for MT game translation. +local S = minetest.get_translator("binoculars") + + +-- Update player property +-- Global to allow overriding + +function binoculars.update_player_property(player) + local new_zoom_fov = 0 + + if player:get_inventory():contains_item( + "main", "binoculars:binoculars") then + new_zoom_fov = 10 + elseif minetest.is_creative_enabled(player:get_player_name()) then + new_zoom_fov = 15 + end + + -- Only set property if necessary to avoid player mesh reload + if player:get_properties().zoom_fov ~= new_zoom_fov then + player:set_properties({zoom_fov = new_zoom_fov}) + end +end + + +-- Set player property 'on joinplayer' + +minetest.register_on_joinplayer(function(player) + binoculars.update_player_property(player) +end) + + +-- Cyclic update of player property + +local function cyclic_update() + for _, player in ipairs(minetest.get_connected_players()) do + binoculars.update_player_property(player) + end + minetest.after(4.7, cyclic_update) +end + +minetest.after(4.7, cyclic_update) + + +-- Binoculars item + +minetest.register_craftitem("binoculars:binoculars", { + description = S("Binoculars") .. "\n" .. S("Use with 'Zoom' key"), + inventory_image = "binoculars_binoculars.png", + stack_max = 1, + groups = {tool = 1}, + + on_use = function(itemstack, user, pointed_thing) + binoculars.update_player_property(user) + end, +}) + + +-- Crafting + +minetest.register_craft({ + output = "binoculars:binoculars", + recipe = { + {"default:obsidian_glass", "", "default:obsidian_glass"}, + {"default:bronze_ingot", "default:bronze_ingot", "default:bronze_ingot"}, + {"default:obsidian_glass", "", "default:obsidian_glass"}, + } +}) diff --git a/mods/binoculars/license.txt b/mods/binoculars/license.txt new file mode 100644 index 00000000..f3aefda1 --- /dev/null +++ b/mods/binoculars/license.txt @@ -0,0 +1,59 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2017 paramat + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2017 paramat + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/binoculars/locale/binoculars.de.tr b/mods/binoculars/locale/binoculars.de.tr new file mode 100644 index 00000000..7bd9b9d5 --- /dev/null +++ b/mods/binoculars/locale/binoculars.de.tr @@ -0,0 +1,3 @@ +# textdomain: binoculars +Binoculars=Fernglas +Use with 'Zoom' key=Mit „Zoom“-Taste benutzen diff --git a/mods/binoculars/locale/binoculars.eo.tr b/mods/binoculars/locale/binoculars.eo.tr new file mode 100644 index 00000000..bec8dc14 --- /dev/null +++ b/mods/binoculars/locale/binoculars.eo.tr @@ -0,0 +1,3 @@ +# textdomain: binoculars +Binoculars=Binoklo +Use with 'Zoom' key=Uzi per 'Zomo' klavo diff --git a/mods/binoculars/locale/binoculars.es.tr b/mods/binoculars/locale/binoculars.es.tr new file mode 100644 index 00000000..7b7e77d7 --- /dev/null +++ b/mods/binoculars/locale/binoculars.es.tr @@ -0,0 +1,3 @@ +# textdomain: binoculars +Binoculars=Prismáticos +Use with 'Zoom' key=Usar con la tecla 'Zoom' diff --git a/mods/binoculars/locale/binoculars.fr.tr b/mods/binoculars/locale/binoculars.fr.tr new file mode 100644 index 00000000..3f8b0bc8 --- /dev/null +++ b/mods/binoculars/locale/binoculars.fr.tr @@ -0,0 +1,3 @@ +# textdomain: binoculars +Binoculars=Jumelles +Use with 'Zoom' key=Utiliser avec le bouton « Zoom » diff --git a/mods/binoculars/locale/binoculars.id.tr b/mods/binoculars/locale/binoculars.id.tr new file mode 100644 index 00000000..9a340443 --- /dev/null +++ b/mods/binoculars/locale/binoculars.id.tr @@ -0,0 +1,3 @@ +# textdomain: binoculars +Binoculars=Teropong +Use with 'Zoom' key=Pakai dengan tombol 'Zoom' diff --git a/mods/binoculars/locale/binoculars.it.tr b/mods/binoculars/locale/binoculars.it.tr new file mode 100644 index 00000000..97c7b860 --- /dev/null +++ b/mods/binoculars/locale/binoculars.it.tr @@ -0,0 +1,3 @@ +# textdomain: binoculars +Binoculars=Binocolo +Use with 'Zoom' key=Usalo col tasto 'Ingrandimento' diff --git a/mods/binoculars/locale/binoculars.ja.tr b/mods/binoculars/locale/binoculars.ja.tr new file mode 100644 index 00000000..9766f461 --- /dev/null +++ b/mods/binoculars/locale/binoculars.ja.tr @@ -0,0 +1,3 @@ +# textdomain: binoculars +Binoculars=双眼鏡 +Use with 'Zoom' key=ズームキーで使います diff --git a/mods/binoculars/locale/binoculars.jbo.tr b/mods/binoculars/locale/binoculars.jbo.tr new file mode 100644 index 00000000..e1465696 --- /dev/null +++ b/mods/binoculars/locale/binoculars.jbo.tr @@ -0,0 +1,3 @@ +# textdomain: binoculars +Binoculars=lo reldarvistci +Use with 'Zoom' key=.i tu'a le jvinu banro batke cu tadji lo nu pilno diff --git a/mods/binoculars/locale/binoculars.ms.tr b/mods/binoculars/locale/binoculars.ms.tr new file mode 100644 index 00000000..d38e64fd --- /dev/null +++ b/mods/binoculars/locale/binoculars.ms.tr @@ -0,0 +1,3 @@ +# textdomain: binoculars +Binoculars=Binokular +Use with 'Zoom' key=Guna dengan kekunci 'Zum' diff --git a/mods/binoculars/locale/binoculars.pl.tr b/mods/binoculars/locale/binoculars.pl.tr new file mode 100644 index 00000000..9fbd9032 --- /dev/null +++ b/mods/binoculars/locale/binoculars.pl.tr @@ -0,0 +1,3 @@ +# textdomain: binoculars +Binoculars=Lornetka +Use with 'Zoom' key=Aby użyć naciśnij 'Zoom' diff --git a/mods/binoculars/locale/binoculars.pt_BR.tr b/mods/binoculars/locale/binoculars.pt_BR.tr new file mode 100644 index 00000000..4aabfeff --- /dev/null +++ b/mods/binoculars/locale/binoculars.pt_BR.tr @@ -0,0 +1,3 @@ +# textdomain: binoculars +Binoculars=Binóculos +Use with 'Zoom' key=Use com a tecla de 'Zoom' diff --git a/mods/binoculars/locale/binoculars.ru.tr b/mods/binoculars/locale/binoculars.ru.tr new file mode 100644 index 00000000..6b3aa9e8 --- /dev/null +++ b/mods/binoculars/locale/binoculars.ru.tr @@ -0,0 +1,3 @@ +# textdomain: binoculars +Binoculars=Бинокль +Use with 'Zoom' key=Используется с привилегией 'Zoom' diff --git a/mods/binoculars/locale/binoculars.sk.tr b/mods/binoculars/locale/binoculars.sk.tr new file mode 100644 index 00000000..50083113 --- /dev/null +++ b/mods/binoculars/locale/binoculars.sk.tr @@ -0,0 +1,3 @@ +# textdomain: binoculars +Binoculars=Ďalekohľad +Use with 'Zoom' key=Použi s klávesou "Priblíž" diff --git a/mods/binoculars/locale/binoculars.sv.tr b/mods/binoculars/locale/binoculars.sv.tr new file mode 100644 index 00000000..f8a01db2 --- /dev/null +++ b/mods/binoculars/locale/binoculars.sv.tr @@ -0,0 +1,3 @@ +# textdomain: binoculars +Binoculars=Kikare +Use with 'Zoom' key=Använd med 'Zoom'-knappen diff --git a/mods/binoculars/locale/binoculars.uk.tr b/mods/binoculars/locale/binoculars.uk.tr new file mode 100644 index 00000000..cb1d0e5b --- /dev/null +++ b/mods/binoculars/locale/binoculars.uk.tr @@ -0,0 +1,3 @@ +# textdomain: binoculars +Binoculars=Бінокль +Use with 'Zoom' key=Використовується з правами 'Zoom' diff --git a/mods/binoculars/locale/binoculars.zh_CN.tr b/mods/binoculars/locale/binoculars.zh_CN.tr new file mode 100644 index 00000000..ec46cf8d --- /dev/null +++ b/mods/binoculars/locale/binoculars.zh_CN.tr @@ -0,0 +1,3 @@ +# textdomain: binoculars +Binoculars=望远镜 +Use with 'Zoom' key=与“缩放”键一起使用 diff --git a/mods/binoculars/locale/binoculars.zh_TW.tr b/mods/binoculars/locale/binoculars.zh_TW.tr new file mode 100644 index 00000000..bbe3b390 --- /dev/null +++ b/mods/binoculars/locale/binoculars.zh_TW.tr @@ -0,0 +1,3 @@ +# textdomain: binoculars +Binoculars=望遠鏡 +Use with 'Zoom' key=與“縮放”鍵一起使用 diff --git a/mods/binoculars/locale/template.txt b/mods/binoculars/locale/template.txt new file mode 100644 index 00000000..a5264627 --- /dev/null +++ b/mods/binoculars/locale/template.txt @@ -0,0 +1,3 @@ +# textdomain: binoculars +Binoculars= +Use with 'Zoom' key= diff --git a/mods/binoculars/mod.conf b/mods/binoculars/mod.conf new file mode 100644 index 00000000..4a64ce52 --- /dev/null +++ b/mods/binoculars/mod.conf @@ -0,0 +1,3 @@ +name = binoculars +description = Minetest Game mod: binoculars +depends = default diff --git a/mods/binoculars/textures/binoculars_binoculars.png b/mods/binoculars/textures/binoculars_binoculars.png new file mode 100644 index 00000000..5803d48f Binary files /dev/null and b/mods/binoculars/textures/binoculars_binoculars.png differ diff --git a/mods/biome_lib b/mods/biome_lib new file mode 160000 index 00000000..396ca881 --- /dev/null +++ b/mods/biome_lib @@ -0,0 +1 @@ +Subproject commit 396ca881dfea09fae6671dcd17486b356485cd8a diff --git a/mods/bitchange b/mods/bitchange new file mode 160000 index 00000000..470297ee --- /dev/null +++ b/mods/bitchange @@ -0,0 +1 @@ +Subproject commit 470297eed24beb7e696929b254b7541e5483bd85 diff --git a/mods/boats/README.txt b/mods/boats/README.txt new file mode 100644 index 00000000..a2ccb485 --- /dev/null +++ b/mods/boats/README.txt @@ -0,0 +1,31 @@ +Minetest Game mod: boats +======================== +See license.txt for license information. + +Authors of source code +---------------------- +Originally by PilzAdam (MIT) +Various Minetest developers and contributors (MIT) + +Authors of media (textures and model) +------------------------------------- +Textures: Zeg9 (CC BY-SA 3.0) +Model: thetoon and Zeg9 (CC BY-SA 3.0), + modified by PavelS(SokolovPavel) (CC BY-SA 3.0), + modified by sofar (CC BY-SA 3.0) + +Controls +-------- +Right mouse button = Enter or exit boat when pointing at boat. +Forward = Speed up. + Slow down when moving backwards. +Forward + backward = Enable cruise mode: Boat will accelerate to maximum forward + speed and remain at that speed without needing to hold the + forward key. +Backward = Slow down. + Speed up when moving backwards. + Disable cruise mode. +Left = Turn to the left. + Turn to the right when moving backwards. +Right = Turn to the right. + Turn to the left when moving backwards. diff --git a/mods/boats/init.lua b/mods/boats/init.lua new file mode 100644 index 00000000..52360be4 --- /dev/null +++ b/mods/boats/init.lua @@ -0,0 +1,290 @@ +-- boats/init.lua + +-- Load support for MT game translation. +local S = minetest.get_translator("boats") + +-- +-- Helper functions +-- + +local function is_water(pos) + local nn = minetest.get_node(pos).name + return minetest.get_item_group(nn, "water") ~= 0 +end + + +local function get_velocity(v, yaw, y) + local x = -math.sin(yaw) * v + local z = math.cos(yaw) * v + return {x = x, y = y, z = z} +end + + +local function get_v(v) + return math.sqrt(v.x ^ 2 + v.z ^ 2) +end + +-- +-- Boat entity +-- + +local boat = { + initial_properties = { + physical = true, + -- Warning: Do not change the position of the collisionbox top surface, + -- lowering it causes the boat to fall through the world if underwater + collisionbox = {-0.5, -0.35, -0.5, 0.5, 0.3, 0.5}, + visual = "mesh", + mesh = "boats_boat.obj", + textures = {"default_wood.png"}, + }, + + driver = nil, + v = 0, + last_v = 0, + removed = false, + auto = false +} + + +function boat.on_rightclick(self, clicker) + if not clicker or not clicker:is_player() then + return + end + local name = clicker:get_player_name() + if self.driver and name == self.driver then + -- Cleanup happens in boat.on_detach_child + clicker:set_detach() + + player_api.set_animation(clicker, "stand", 30) + local pos = clicker:get_pos() + pos = {x = pos.x, y = pos.y + 0.2, z = pos.z} + minetest.after(0.1, function() + clicker:set_pos(pos) + end) + elseif not self.driver then + clicker:set_attach(self.object, "", + {x = 0.5, y = 1, z = -3}, {x = 0, y = 0, z = 0}) + + self.driver = name + player_api.player_attached[name] = true + + minetest.after(0.2, function() + player_api.set_animation(clicker, "sit", 30) + end) + clicker:set_look_horizontal(self.object:get_yaw()) + end +end + + +-- If driver leaves server while driving boat +function boat.on_detach_child(self, child) + if child and child:get_player_name() == self.driver then + player_api.player_attached[child:get_player_name()] = false + + self.driver = nil + self.auto = false + end +end + + +function boat.on_activate(self, staticdata, dtime_s) + self.object:set_armor_groups({immortal = 1}) + if staticdata then + self.v = tonumber(staticdata) + end + self.last_v = self.v +end + + +function boat.get_staticdata(self) + return tostring(self.v) +end + + +function boat.on_punch(self, puncher) + if not puncher or not puncher:is_player() or self.removed then + return + end + + local name = puncher:get_player_name() + if self.driver and name == self.driver then + self.driver = nil + puncher:set_detach() + player_api.player_attached[name] = false + end + if not self.driver then + self.removed = true + local inv = puncher:get_inventory() + if not minetest.is_creative_enabled(name) + or not inv:contains_item("main", "boats:boat") then + local leftover = inv:add_item("main", "boats:boat") + -- if no room in inventory add a replacement boat to the world + if not leftover:is_empty() then + minetest.add_item(self.object:get_pos(), leftover) + end + end + -- delay remove to ensure player is detached + minetest.after(0.1, function() + self.object:remove() + end) + end +end + + +function boat.on_step(self, dtime) + self.v = get_v(self.object:get_velocity()) * math.sign(self.v) + if self.driver then + local driver_objref = minetest.get_player_by_name(self.driver) + if driver_objref then + local ctrl = driver_objref:get_player_control() + if ctrl.up and ctrl.down then + if not self.auto then + self.auto = true + minetest.chat_send_player(self.driver, S("Boat cruise mode on")) + end + elseif ctrl.down then + self.v = self.v - dtime * 2.0 + if self.auto then + self.auto = false + minetest.chat_send_player(self.driver, S("Boat cruise mode off")) + end + elseif ctrl.up or self.auto then + self.v = self.v + dtime * 2.0 + end + if ctrl.left then + if self.v < -0.001 then + self.object:set_yaw(self.object:get_yaw() - dtime * 0.9) + else + self.object:set_yaw(self.object:get_yaw() + dtime * 0.9) + end + elseif ctrl.right then + if self.v < -0.001 then + self.object:set_yaw(self.object:get_yaw() + dtime * 0.9) + else + self.object:set_yaw(self.object:get_yaw() - dtime * 0.9) + end + end + end + end + local velo = self.object:get_velocity() + if not self.driver and + self.v == 0 and velo.x == 0 and velo.y == 0 and velo.z == 0 then + self.object:set_pos(self.object:get_pos()) + return + end + -- We need to preserve velocity sign to properly apply drag force + -- while moving backward + local drag = dtime * math.sign(self.v) * (0.01 + 0.0796 * self.v * self.v) + -- If drag is larger than velocity, then stop horizontal movement + if math.abs(self.v) <= math.abs(drag) then + self.v = 0 + else + self.v = self.v - drag + end + + local p = self.object:get_pos() + p.y = p.y - 0.5 + local new_velo + local new_acce = {x = 0, y = 0, z = 0} + if not is_water(p) then + local nodedef = minetest.registered_nodes[minetest.get_node(p).name] + if (not nodedef) or nodedef.walkable then + self.v = 0 + new_acce = {x = 0, y = 1, z = 0} + else + new_acce = {x = 0, y = -9.8, z = 0} + end + new_velo = get_velocity(self.v, self.object:get_yaw(), + self.object:get_velocity().y) + self.object:set_pos(self.object:get_pos()) + else + p.y = p.y + 1 + if is_water(p) then + local y = self.object:get_velocity().y + if y >= 5 then + y = 5 + elseif y < 0 then + new_acce = {x = 0, y = 20, z = 0} + else + new_acce = {x = 0, y = 5, z = 0} + end + new_velo = get_velocity(self.v, self.object:get_yaw(), y) + self.object:set_pos(self.object:get_pos()) + else + new_acce = {x = 0, y = 0, z = 0} + if math.abs(self.object:get_velocity().y) < 1 then + local pos = self.object:get_pos() + pos.y = math.floor(pos.y) + 0.5 + self.object:set_pos(pos) + new_velo = get_velocity(self.v, self.object:get_yaw(), 0) + else + new_velo = get_velocity(self.v, self.object:get_yaw(), + self.object:get_velocity().y) + self.object:set_pos(self.object:get_pos()) + end + end + end + self.object:set_velocity(new_velo) + self.object:set_acceleration(new_acce) +end + + +minetest.register_entity("boats:boat", boat) + + +minetest.register_craftitem("boats:boat", { + description = S("Boat"), + inventory_image = "boats_inventory.png", + wield_image = "boats_wield.png", + wield_scale = {x = 2, y = 2, z = 1}, + liquids_pointable = true, + groups = {flammable = 2}, + + on_place = function(itemstack, placer, pointed_thing) + local under = pointed_thing.under + local node = minetest.get_node(under) + local udef = minetest.registered_nodes[node.name] + if udef and udef.on_rightclick and + not (placer and placer:is_player() and + placer:get_player_control().sneak) then + return udef.on_rightclick(under, node, placer, itemstack, + pointed_thing) or itemstack + end + + if pointed_thing.type ~= "node" then + return itemstack + end + if not is_water(pointed_thing.under) then + return itemstack + end + pointed_thing.under.y = pointed_thing.under.y + 0.5 + boat = minetest.add_entity(pointed_thing.under, "boats:boat") + if boat then + if placer then + boat:set_yaw(placer:get_look_horizontal()) + end + local player_name = placer and placer:get_player_name() or "" + if not minetest.is_creative_enabled(player_name) then + itemstack:take_item() + end + end + return itemstack + end, +}) + + +minetest.register_craft({ + output = "boats:boat", + recipe = { + {"", "", "" }, + {"group:wood", "", "group:wood"}, + {"group:wood", "group:wood", "group:wood"}, + }, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "boats:boat", + burntime = 20, +}) diff --git a/mods/boats/license.txt b/mods/boats/license.txt new file mode 100644 index 00000000..d4afe75f --- /dev/null +++ b/mods/boats/license.txt @@ -0,0 +1,63 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2012-2016 PilzAdam +Copyright (C) 2012-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures and model) +-------------------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2012-2016 Zeg9 +Copyright (C) 2012-2016 thetoon +Copyright (C) 2012-2016 PavelS(SokolovPavel) +Copyright (C) 2016 sofar (sofar@foo-projects.org) + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/boats/locale/boats.de.tr b/mods/boats/locale/boats.de.tr new file mode 100644 index 00000000..d8eb8d74 --- /dev/null +++ b/mods/boats/locale/boats.de.tr @@ -0,0 +1,4 @@ +# textdomain: boats +Boat cruise mode on=Schneller Bootsmodus an +Boat cruise mode off=Schneller Bootsmodus aus +Boat=Boot diff --git a/mods/boats/locale/boats.eo.tr b/mods/boats/locale/boats.eo.tr new file mode 100644 index 00000000..7d02e2f7 --- /dev/null +++ b/mods/boats/locale/boats.eo.tr @@ -0,0 +1,4 @@ +# textdomain: boats +Boat cruise mode on=La kroza maniero de la boato estas ŝaltita. +Boat cruise mode off=La kroza maniero de la boato estas malŝaltita. +Boat=Boato diff --git a/mods/boats/locale/boats.es.tr b/mods/boats/locale/boats.es.tr new file mode 100644 index 00000000..b9adb72e --- /dev/null +++ b/mods/boats/locale/boats.es.tr @@ -0,0 +1,4 @@ +# textdomain: boats +Boat cruise mode on=Modo crucero en bote activado +Boat cruise mode off=Modo crucero en bote desactivado +Boat=Bote diff --git a/mods/boats/locale/boats.fr.tr b/mods/boats/locale/boats.fr.tr new file mode 100644 index 00000000..f469a0b6 --- /dev/null +++ b/mods/boats/locale/boats.fr.tr @@ -0,0 +1,4 @@ +# textdomain: boats +Boat cruise mode on=Bateau mode rapide activé +Boat cruise mode off=Bateau mode rapide désactivé +Boat=Bateau diff --git a/mods/boats/locale/boats.id.tr b/mods/boats/locale/boats.id.tr new file mode 100644 index 00000000..cf37f476 --- /dev/null +++ b/mods/boats/locale/boats.id.tr @@ -0,0 +1,4 @@ +# textdomain: boats +Boat cruise mode on=Mode perahu jelajah nyala +Boat cruise mode off=Mode perahu jelajah mati +Boat=Perahu diff --git a/mods/boats/locale/boats.it.tr b/mods/boats/locale/boats.it.tr new file mode 100644 index 00000000..4a878354 --- /dev/null +++ b/mods/boats/locale/boats.it.tr @@ -0,0 +1,4 @@ +# textdomain: boats +Boat cruise mode on=Modalità movimento automatico barca attivata +Boat cruise mode off=Modalità movimento automatico barca disattivata +Boat=Barca diff --git a/mods/boats/locale/boats.ja.tr b/mods/boats/locale/boats.ja.tr new file mode 100644 index 00000000..ee2d0863 --- /dev/null +++ b/mods/boats/locale/boats.ja.tr @@ -0,0 +1,4 @@ +# textdomain: boats +Boat cruise mode on=クルージングモード・オン +Boat cruise mode off=クルージングモード・オフ +Boat=ボート diff --git a/mods/boats/locale/boats.jbo.tr b/mods/boats/locale/boats.jbo.tr new file mode 100644 index 00000000..c7d534f9 --- /dev/null +++ b/mods/boats/locale/boats.jbo.tr @@ -0,0 +1,4 @@ +# textdomain: boats +Boat cruise mode on=.i lo bloti cu zmiku le ka klama +Boat cruise mode off=.i lo bloti cu macnu le ka klama +Boat=lo bloti diff --git a/mods/boats/locale/boats.ms.tr b/mods/boats/locale/boats.ms.tr new file mode 100644 index 00000000..d11a68be --- /dev/null +++ b/mods/boats/locale/boats.ms.tr @@ -0,0 +1,4 @@ +# textdomain: boats +Boat cruise mode on=Mod bot layar makan angin dibolehkan +Boat cruise mode off=Mod bot layar makan angin dilumpuhkan +Boat=Bot diff --git a/mods/boats/locale/boats.pl.tr b/mods/boats/locale/boats.pl.tr new file mode 100644 index 00000000..ce43286a --- /dev/null +++ b/mods/boats/locale/boats.pl.tr @@ -0,0 +1,4 @@ +# textdomain: boats +Boat cruise mode on=Tryb rejsu łodką włączony +Boat cruise mode off=Tryb rejsu łodką wyłączony +Boat=Łódka diff --git a/mods/boats/locale/boats.pt_BR.tr b/mods/boats/locale/boats.pt_BR.tr new file mode 100644 index 00000000..1992fdfd --- /dev/null +++ b/mods/boats/locale/boats.pt_BR.tr @@ -0,0 +1,4 @@ +# textdomain: boats +Boat cruise mode on=Modo de cruseiro do barco ligado +Boat cruise mode off=Modo de cruseiro do barco desligado +Boat=Barco diff --git a/mods/boats/locale/boats.ru.tr b/mods/boats/locale/boats.ru.tr new file mode 100644 index 00000000..43270984 --- /dev/null +++ b/mods/boats/locale/boats.ru.tr @@ -0,0 +1,4 @@ +# textdomain: boats +Boat cruise mode on=Режим путешествия на лодке включен +Boat cruise mode off=Режим путешествия на лодке выключен +Boat=Лодка diff --git a/mods/boats/locale/boats.sk.tr b/mods/boats/locale/boats.sk.tr new file mode 100644 index 00000000..4d313cdf --- /dev/null +++ b/mods/boats/locale/boats.sk.tr @@ -0,0 +1,4 @@ +# textdomain: boats +Boat cruise mode on=Cestovný režim loďky je zapnutý +Boat cruise mode off=Cestovný režim loďky je vypnutý +Boat=Loďka diff --git a/mods/boats/locale/boats.sv.tr b/mods/boats/locale/boats.sv.tr new file mode 100644 index 00000000..248b0889 --- /dev/null +++ b/mods/boats/locale/boats.sv.tr @@ -0,0 +1,4 @@ +# textdomain: boats +Boat cruise mode on=Båtkryssningsläge på +Boat cruise mode off=Båtkryssningsläge av +Boat=Båt diff --git a/mods/boats/locale/boats.uk.tr b/mods/boats/locale/boats.uk.tr new file mode 100644 index 00000000..662ba6fc --- /dev/null +++ b/mods/boats/locale/boats.uk.tr @@ -0,0 +1,4 @@ +# textdomain: boats +Boat cruise mode on=Режим мандрування на човні увімкнено +Boat cruise mode off=Режим мандрування на човні вимкнено +Boat=Човен diff --git a/mods/boats/locale/boats.zh_CN.tr b/mods/boats/locale/boats.zh_CN.tr new file mode 100644 index 00000000..254f2dfc --- /dev/null +++ b/mods/boats/locale/boats.zh_CN.tr @@ -0,0 +1,4 @@ +# textdomain: boats +Boat cruise mode on=巡航模式开启 +Boat cruise mode off=巡航模式关闭 +Boat=船 diff --git a/mods/boats/locale/boats.zh_TW.tr b/mods/boats/locale/boats.zh_TW.tr new file mode 100644 index 00000000..97b34711 --- /dev/null +++ b/mods/boats/locale/boats.zh_TW.tr @@ -0,0 +1,4 @@ +# textdomain: boats +Boat cruise mode on=巡航模式開啟 +Boat cruise mode off=巡航模式關閉 +Boat=船 diff --git a/mods/boats/locale/template.txt b/mods/boats/locale/template.txt new file mode 100644 index 00000000..17aedc89 --- /dev/null +++ b/mods/boats/locale/template.txt @@ -0,0 +1,4 @@ +# textdomain: boats +Boat cruise mode on= +Boat cruise mode off= +Boat= diff --git a/mods/boats/mod.conf b/mods/boats/mod.conf new file mode 100644 index 00000000..a727f8ff --- /dev/null +++ b/mods/boats/mod.conf @@ -0,0 +1,3 @@ +name = boats +description = Minetest Game mod: boats +depends = default, player_api diff --git a/mods/boats/models/boats_boat.obj b/mods/boats/models/boats_boat.obj new file mode 100644 index 00000000..0f21e47f --- /dev/null +++ b/mods/boats/models/boats_boat.obj @@ -0,0 +1,358 @@ +# Blender v2.76 (sub 11) OBJ File: 'boat.blend' +# www.blender.org +mtllib boat.mtl +o boats_boat +v -6.786140 -3.033999 -9.415440 +v -6.786140 -1.967150 -9.415440 +v -6.786140 -1.967150 8.793510 +v -6.786140 -3.033999 8.793510 +v 5.732520 -1.967150 -9.415440 +v 5.732520 -3.033999 -9.415440 +v 5.732520 -3.033999 8.793510 +v 5.732520 -1.967150 8.793510 +v -2.233900 -3.033999 -9.415440 +v -2.233900 -1.967150 -9.415440 +v -2.233900 -1.967150 8.793510 +v -2.233900 -3.033999 8.793510 +v 2.318340 -3.033999 -9.415440 +v 2.318340 -1.967150 -9.415440 +v 2.318340 -1.967150 8.793510 +v 2.318340 -3.033999 8.793510 +v -3.371960 -3.033999 8.793510 +v -3.371960 -1.967150 8.793510 +v -3.371960 -1.967150 -9.415440 +v -3.371960 -3.033999 -9.415440 +v 2.318340 0.276645 8.793510 +v 1.180280 -1.967150 8.793510 +v 5.732520 0.276645 8.793510 +v 5.732520 1.039180 8.793510 +v 6.870580 0.276645 8.793510 +v 6.870580 -1.967150 8.793510 +v 2.318340 1.039180 8.793510 +v 1.180280 0.276645 8.793510 +v 1.180280 1.039180 8.793510 +v 1.180280 -3.033999 8.793510 +v -2.233900 0.276645 8.793510 +v -3.371960 0.276645 8.793510 +v -2.233900 1.039180 8.793510 +v -3.371960 1.039180 8.793510 +v -6.786140 0.276645 8.793510 +v -7.786200 0.276645 8.793510 +v -7.786200 -1.967150 8.793510 +v -6.786140 1.039180 8.793510 +v 1.180280 -1.967150 -9.415440 +v 1.180280 -3.033999 -9.415440 +v 2.318340 0.276645 -9.415440 +v 1.180280 0.276645 -9.415440 +v 2.318340 1.039180 -9.415440 +v 5.732520 0.276645 -9.415440 +v 6.870580 -1.967150 -9.415440 +v 5.732520 1.039180 -9.415440 +v 6.870580 0.276645 -9.415440 +v 0.042220 1.039180 -9.415440 +v 1.180280 1.039180 -9.415440 +v 0.042220 -1.967150 -9.415440 +v -1.095840 -1.967150 -9.415440 +v -2.233900 0.276645 -9.415440 +v -3.371960 0.276645 -9.415440 +v -2.233900 1.039180 -9.415440 +v -1.095840 1.039180 -9.415440 +v -3.371960 1.039180 -9.415440 +v -6.786140 0.276645 -9.415440 +v -6.786140 1.039180 -9.415440 +v -7.786200 -1.967150 -9.415440 +v -7.786200 0.276645 -9.415440 +v -1.095840 0.156645 -12.044100 +v -1.095840 -4.601110 -9.415440 +v -1.095840 1.039181 -10.802900 +v -1.095840 2.868579 -10.802900 +v -1.095840 2.868580 -7.883420 +v -1.095840 3.746069 -12.034100 +v -1.095840 3.746070 -7.883420 +v -1.095840 0.156645 -14.294900 +v -1.095840 -4.601110 -14.284900 +v 0.042220 -4.601110 -14.284900 +v 0.042220 -4.601110 -9.415440 +v 0.042220 1.039181 -10.802900 +v 0.042220 0.156645 -12.044100 +v 0.042220 2.868579 -10.802900 +v 0.042220 0.156645 -14.294900 +v 0.042220 3.746069 -12.034100 +v 0.042220 3.746070 -7.883420 +v 0.042220 2.868580 -7.883420 +v -1.096322 -3.033999 -9.415440 +v 0.044046 -3.035397 -9.415440 +vt 1.000000 0.187500 +vt -1.000000 0.312500 +vt 1.000000 0.312500 +vt 0.687500 1.000000 +vt 0.500000 0.875000 +vt 0.500000 0.625000 +vt -1.000000 0.062500 +vt 1.000000 0.062500 +vt 1.000000 -0.000000 +vt -1.000000 0.125000 +vt 1.000000 0.125000 +vt 0.437500 0.125000 +vt 0.312500 0.500000 +vt 0.312500 0.125000 +vt 1.000000 0.625000 +vt -1.000000 0.500000 +vt 1.000000 0.500000 +vt 0.187500 0.687500 +vt -0.187500 0.687500 +vt -0.187500 0.312500 +vt 1.000000 0.812500 +vt -1.000000 0.937500 +vt -1.000000 0.812500 +vt 0.812500 0.687500 +vt 1.187500 0.687500 +vt 0.812500 0.312500 +vt 1.000000 0.562500 +vt 0.312500 0.437500 +vt 1.000000 0.437500 +vt 1.000000 0.750000 +vt -1.000000 0.875000 +vt -1.000000 0.750000 +vt -1.000000 1.000000 +vt 1.000000 1.000000 +vt 0.437500 0.625000 +vt 0.562500 0.437500 +vt 0.562500 0.625000 +vt -1.000000 0.437500 +vt -1.000000 0.000000 +vt 0.500000 0.062500 +vt 0.375000 0.750000 +vt 0.500000 0.750000 +vt -1.000000 0.250000 +vt -1.000000 0.687500 +vt 1.000000 0.687500 +vt 0.625000 0.375000 +vt 1.000000 0.375000 +vt 1.000000 0.250000 +vt 1.000000 0.937500 +vt 0.437500 0.812500 +vt 0.312500 0.312500 +vt 0.312500 0.812500 +vt 0.437500 0.312500 +vt 0.437500 0.437500 +vt 0.687500 0.812500 +vt 0.000000 0.687500 +vt 0.000000 0.812500 +vt -1.000000 0.562500 +vt 0.875000 0.812500 +vt 0.875000 0.687500 +vt 0.250000 0.312500 +vt 0.562500 0.187500 +vt 0.250000 0.187500 +vt -1.000000 0.187500 +vt 0.312500 0.625000 +vt 0.312500 0.187500 +vt 0.312500 -0.187500 +vt 1.000000 -0.187500 +vt 0.687500 0.500000 +vt -0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.437500 0.500000 +vt -1.000000 0.625000 +vt 0.812500 0.187500 +vt 1.187500 0.187500 +vt 1.187500 0.312500 +vt 1.312500 0.312500 +vt 1.312500 0.687500 +vt 0.687500 0.187500 +vt 0.687500 0.312500 +vt 1.187500 0.812500 +vt 0.812500 0.812500 +vt 0.187500 0.312500 +vt 0.312500 0.687500 +vt 0.687500 0.687500 +vt -0.187500 0.187500 +vt 0.187500 0.187500 +vt -0.312500 0.687500 +vt -0.312500 0.312500 +vt 0.187500 0.812500 +vt -0.187500 0.812500 +vt 0.437500 0.687500 +vt 0.437500 0.187500 +vt 0.562500 0.812500 +vt 0.562500 0.687500 +vt 0.312500 0.562500 +vt 1.000000 0.875000 +vt 0.375000 0.062500 +vt -1.000000 0.375000 +vt 0.625000 0.500000 +vt 0.875000 0.562500 +vt 0.937500 0.812500 +vt 0.937500 0.687500 +vt 0.875000 0.937500 +vt 0.562500 0.312500 +vn -1.000000 0.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -0.002100 -1.000000 +vn 0.001200 -1.000000 0.000000 +vn 0.000000 0.002800 -1.000000 +vn -0.001200 -1.000000 0.000200 +g boats_boat_boats_boat_None +usemtl None +s off +f 41/1/1 27/2/1 43/3/1 +f 76/4/2 74/5/2 72/6/2 +f 8/7/2 6/1/2 5/8/2 +f 15/9/1 13/10/1 16/11/1 +f 51/12/3 71/13/3 50/14/3 +f 56/15/2 32/16/2 53/17/2 +f 15/18/3 8/19/3 23/20/3 +f 22/21/2 40/22/2 39/23/2 +f 19/24/4 2/25/4 53/26/4 +f 70/27/5 62/28/5 69/29/5 +f 11/30/5 19/31/5 10/32/5 +f 4/15/5 20/33/5 17/34/5 +f 72/35/3 64/36/3 63/37/3 +f 13/8/5 7/38/5 16/7/5 +f 23/39/6 47/11/6 44/9/6 +f 68/40/7 70/41/7 69/42/7 +f 80/43/8 40/10/8 30/11/8 +f 3/15/1 1/32/1 4/30/1 +f 20/44/2 18/27/2 17/45/2 +f 74/17/5 65/46/5 64/47/5 +f 31/43/1 54/47/1 52/48/1 +f 22/47/5 14/43/5 15/48/5 +f 46/1/2 23/7/2 44/8/2 +f 57/21/1 38/22/1 58/49/1 +f 61/50/9 76/51/9 73/52/9 +f 37/45/5 2/23/5 3/21/5 +f 78/28/3 67/53/3 65/54/3 +f 64/5/1 66/4/1 63/6/1 +f 76/55/6 67/56/6 77/57/6 +f 47/17/2 26/10/2 45/11/2 +f 5/16/5 26/47/5 8/17/5 +f 33/58/6 48/59/6 55/60/6 +f 29/38/2 42/3/2 49/29/2 +f 32/44/6 52/21/6 53/45/6 +f 58/15/6 34/33/6 56/34/6 +f 27/7/6 46/29/6 43/8/6 +f 73/61/6 68/62/6 61/63/6 +f 21/58/6 42/29/6 28/38/6 +f 11/29/1 9/58/1 12/27/1 +f 59/45/1 36/2/1 60/3/1 +f 60/9/6 35/10/6 57/11/6 +f 41/1/1 21/64/1 27/2/1 +f 72/6/2 48/65/2 50/66/2 +f 50/66/2 71/67/2 70/68/2 +f 70/68/2 75/17/2 73/69/2 +f 76/4/2 77/70/2 74/5/2 +f 77/70/2 78/71/2 74/5/2 +f 50/66/2 70/68/2 73/69/2 +f 73/69/2 76/4/2 72/6/2 +f 72/6/2 50/66/2 73/69/2 +f 8/7/2 7/64/2 6/1/2 +f 15/9/1 14/39/1 13/10/1 +f 51/12/3 62/72/3 71/13/3 +f 56/15/2 34/73/2 32/16/2 +f 32/26/3 34/74/3 38/75/3 +f 35/76/3 36/77/3 37/78/3 +f 32/26/3 38/75/3 35/76/3 +f 29/66/3 33/79/3 31/80/3 +f 32/26/3 35/76/3 3/25/3 +f 28/51/3 29/66/3 31/80/3 +f 31/80/3 32/26/3 18/24/3 +f 3/25/3 4/81/3 17/82/3 +f 35/76/3 37/78/3 3/25/3 +f 21/83/3 28/51/3 22/84/3 +f 3/25/3 17/82/3 18/24/3 +f 11/85/3 12/55/3 30/52/3 +f 32/26/3 3/25/3 18/24/3 +f 11/85/3 30/52/3 22/84/3 +f 31/80/3 18/24/3 11/85/3 +f 24/86/3 27/87/3 21/83/3 +f 28/51/3 31/80/3 11/85/3 +f 11/85/3 22/84/3 28/51/3 +f 24/86/3 21/83/3 23/20/3 +f 26/88/3 25/89/3 23/20/3 +f 23/20/3 21/83/3 15/18/3 +f 15/18/3 16/90/3 7/91/3 +f 21/83/3 22/84/3 15/18/3 +f 8/19/3 26/88/3 23/20/3 +f 15/18/3 7/91/3 8/19/3 +f 22/21/2 30/49/2 40/22/2 +f 47/89/4 45/88/4 5/19/4 +f 5/19/4 6/91/4 13/90/4 +f 5/19/4 13/90/4 14/18/4 +f 44/20/4 47/89/4 5/19/4 +f 43/87/4 46/86/4 44/20/4 +f 41/83/4 43/87/4 44/20/4 +f 44/20/4 5/19/4 14/18/4 +f 39/84/4 40/52/4 80/50/4 +f 44/20/4 14/18/4 41/83/4 +f 42/51/4 41/83/4 39/84/4 +f 39/84/4 80/50/4 50/92/4 +f 41/83/4 14/18/4 39/84/4 +f 48/93/4 49/66/4 42/51/4 +f 50/92/4 48/93/4 42/51/4 +f 80/50/4 79/94/4 50/92/4 +f 50/92/4 42/51/4 39/84/4 +f 54/79/4 55/62/4 52/80/4 +f 50/92/4 79/94/4 51/95/4 +f 52/80/4 55/62/4 51/95/4 +f 51/95/4 79/94/4 10/85/4 +f 79/94/4 9/55/4 10/85/4 +f 53/26/4 52/80/4 10/85/4 +f 58/75/4 56/74/4 53/26/4 +f 59/78/4 60/77/4 57/76/4 +f 57/76/4 58/75/4 53/26/4 +f 52/80/4 51/95/4 10/85/4 +f 19/24/4 20/82/4 1/81/4 +f 53/26/4 10/85/4 19/24/4 +f 59/78/4 57/76/4 2/25/4 +f 19/24/4 1/81/4 2/25/4 +f 2/25/4 57/76/4 53/26/4 +f 70/27/5 71/96/5 62/28/5 +f 11/30/5 18/97/5 19/31/5 +f 4/15/5 1/73/5 20/33/5 +f 72/35/3 74/54/3 64/36/3 +f 13/8/5 6/29/5 7/38/5 +f 23/39/6 25/10/6 47/11/6 +f 68/40/7 75/98/7 70/41/7 +f 30/11/5 12/17/5 79/99/5 +f 79/99/10 80/43/10 30/11/10 +f 12/17/5 9/16/5 79/99/5 +f 3/15/1 2/73/1 1/32/1 +f 20/44/2 19/58/2 18/27/2 +f 74/17/5 78/100/5 65/46/5 +f 31/43/1 33/99/1 54/47/1 +f 22/47/5 39/99/5 14/43/5 +f 46/1/2 24/64/2 23/7/2 +f 57/21/1 35/23/1 38/22/1 +f 61/50/9 66/53/9 76/51/9 +f 37/45/5 59/44/5 2/23/5 +f 78/28/3 77/51/3 67/53/3 +f 62/67/1 51/66/1 69/68/1 +f 51/66/1 55/65/1 63/6/1 +f 68/17/1 69/68/1 61/69/1 +f 61/69/1 69/68/1 51/66/1 +f 61/69/1 51/66/1 63/6/1 +f 65/71/1 67/70/1 64/5/1 +f 61/69/1 63/6/1 66/4/1 +f 64/5/1 67/70/1 66/4/1 +f 76/55/6 66/85/6 67/56/6 +f 47/17/2 25/16/2 26/10/2 +f 5/16/5 45/99/5 26/47/5 +f 55/60/6 54/101/6 33/58/6 +f 33/58/6 29/22/6 48/59/6 +f 48/59/6 72/102/6 63/103/6 +f 29/22/6 49/104/6 48/59/6 +f 48/59/6 63/103/6 55/60/6 +f 29/38/2 28/2/2 42/3/2 +f 32/44/6 31/23/6 52/21/6 +f 58/15/6 38/73/6 34/33/6 +f 27/7/6 24/38/6 46/29/6 +f 73/61/6 75/105/6 68/62/6 +f 21/58/6 41/27/6 42/29/6 +f 11/29/1 10/38/1 9/58/1 +f 59/45/1 37/44/1 36/2/1 +f 60/9/6 36/39/6 35/10/6 diff --git a/mods/boats/textures/boats_inventory.png b/mods/boats/textures/boats_inventory.png new file mode 100644 index 00000000..f9d082e3 Binary files /dev/null and b/mods/boats/textures/boats_inventory.png differ diff --git a/mods/boats/textures/boats_wield.png b/mods/boats/textures/boats_wield.png new file mode 100644 index 00000000..f998b5bb Binary files /dev/null and b/mods/boats/textures/boats_wield.png differ diff --git a/mods/bones/README.txt b/mods/bones/README.txt new file mode 100644 index 00000000..91bcd109 --- /dev/null +++ b/mods/bones/README.txt @@ -0,0 +1,12 @@ +Minetest Game mod: bones +======================== +See license.txt for license information. + +Authors of source code +---------------------- +Originally by PilzAdam (MIT) +Various Minetest developers and contributors (MIT) + +Authors of media (textures) +--------------------------- +All textures: paramat (CC BY-SA 3.0) diff --git a/mods/bones/init.lua b/mods/bones/init.lua new file mode 100644 index 00000000..708e7107 --- /dev/null +++ b/mods/bones/init.lua @@ -0,0 +1,293 @@ +-- bones/init.lua + +-- Minetest 0.4 mod: bones +-- See README.txt for licensing and other information. + +-- Load support for MT game translation. +local S = minetest.get_translator("bones") + +bones = {} + +local function is_owner(pos, name) + local owner = minetest.get_meta(pos):get_string("owner") + if owner == "" or owner == name or minetest.check_player_privs(name, "protection_bypass") then + return true + end + return false +end + +local bones_formspec = + "size[8,9]" .. + "list[current_name;main;0,0.3;8,4;]" .. + "list[current_player;main;0,4.85;8,1;]" .. + "list[current_player;main;0,6.08;8,3;8]" .. + "listring[current_name;main]" .. + "listring[current_player;main]" .. + default.get_hotbar_bg(0,4.85) + +local share_bones_time = tonumber(minetest.settings:get("share_bones_time")) or 1200 +local share_bones_time_early = tonumber(minetest.settings:get("share_bones_time_early")) or share_bones_time / 4 + +minetest.register_node("bones:bones", { + description = S("Bones"), + tiles = { + "bones_top.png^[transform2", + "bones_bottom.png", + "bones_side.png", + "bones_side.png", + "bones_rear.png", + "bones_front.png" + }, + paramtype2 = "facedir", + groups = {dig_immediate = 2}, + sounds = default.node_sound_gravel_defaults(), + + can_dig = function(pos, player) + local inv = minetest.get_meta(pos):get_inventory() + local name = "" + if player then + name = player:get_player_name() + end + return is_owner(pos, name) and inv:is_empty("main") + end, + + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + if is_owner(pos, player:get_player_name()) then + return count + end + return 0 + end, + + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + return 0 + end, + + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + if is_owner(pos, player:get_player_name()) then + return stack:get_count() + end + return 0 + end, + + on_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + if meta:get_inventory():is_empty("main") then + local inv = player:get_inventory() + if inv:room_for_item("main", {name = "bones:bones"}) then + inv:add_item("main", {name = "bones:bones"}) + else + minetest.add_item(pos, "bones:bones") + end + minetest.remove_node(pos) + end + end, + + on_punch = function(pos, node, player) + if not is_owner(pos, player:get_player_name()) then + return + end + + if minetest.get_meta(pos):get_string("infotext") == "" then + return + end + + local inv = minetest.get_meta(pos):get_inventory() + local player_inv = player:get_inventory() + local has_space = true + + for i = 1, inv:get_size("main") do + local stk = inv:get_stack("main", i) + if player_inv:room_for_item("main", stk) then + inv:set_stack("main", i, nil) + player_inv:add_item("main", stk) + else + has_space = false + break + end + end + + -- remove bones if player emptied them + if has_space then + if player_inv:room_for_item("main", {name = "bones:bones"}) then + player_inv:add_item("main", {name = "bones:bones"}) + else + minetest.add_item(pos,"bones:bones") + end + minetest.remove_node(pos) + end + end, + + on_timer = function(pos, elapsed) + local meta = minetest.get_meta(pos) + local time = meta:get_int("time") + elapsed + if time >= share_bones_time then + meta:set_string("infotext", S("@1's old bones", meta:get_string("owner"))) + meta:set_string("owner", "") + else + meta:set_int("time", time) + return true + end + end, + on_blast = function(pos) + end, +}) + +local function may_replace(pos, player) + local node_name = minetest.get_node(pos).name + local node_definition = minetest.registered_nodes[node_name] + + -- if the node is unknown, we return false + if not node_definition then + return false + end + + -- allow replacing air + if node_name == "air" then + return true + end + + -- don't replace nodes inside protections + if minetest.is_protected(pos, player:get_player_name()) then + return false + end + + -- allow replacing liquids + if node_definition.liquidtype ~= "none" then + return true + end + + -- don't replace filled chests and other nodes that don't allow it + local can_dig_func = node_definition.can_dig + if can_dig_func and not can_dig_func(pos, player) then + return false + end + + -- default to each nodes buildable_to; if a placed block would replace it, why shouldn't bones? + -- flowers being squished by bones are more realistical than a squished stone, too + return node_definition.buildable_to +end + +local drop = function(pos, itemstack) + local obj = minetest.add_item(pos, itemstack:take_item(itemstack:get_count())) + if obj then + obj:set_velocity({ + x = math.random(-10, 10) / 9, + y = 5, + z = math.random(-10, 10) / 9, + }) + end +end + +local player_inventory_lists = { "main", "craft" } +bones.player_inventory_lists = player_inventory_lists + +local function is_all_empty(player_inv) + for _, list_name in ipairs(player_inventory_lists) do + if not player_inv:is_empty(list_name) then + return false + end + end + return true +end + +minetest.register_on_dieplayer(function(player) + local bones_mode = minetest.settings:get("bones_mode") or "bones" + if bones_mode ~= "bones" and bones_mode ~= "drop" and bones_mode ~= "keep" then + bones_mode = "bones" + end + + local bones_position_message = minetest.settings:get_bool("bones_position_message") == true + local player_name = player:get_player_name() + local pos = vector.round(player:get_pos()) + local pos_string = minetest.pos_to_string(pos) + + -- return if keep inventory set or in creative mode + if bones_mode == "keep" or minetest.is_creative_enabled(player_name) then + minetest.log("action", player_name .. " dies at " .. pos_string .. + ". No bones placed") + if bones_position_message then + minetest.chat_send_player(player_name, S("@1 died at @2.", player_name, pos_string)) + end + return + end + + local player_inv = player:get_inventory() + if is_all_empty(player_inv) then + minetest.log("action", player_name .. " dies at " .. pos_string .. + ". No bones placed") + if bones_position_message then + minetest.chat_send_player(player_name, S("@1 died at @2.", player_name, pos_string)) + end + return + end + + -- check if it's possible to place bones, if not find space near player + if bones_mode == "bones" and not may_replace(pos, player) then + local air = minetest.find_node_near(pos, 1, {"air"}) + if air and not minetest.is_protected(air, player_name) then + pos = air + else + bones_mode = "drop" + end + end + + if bones_mode == "drop" then + for _, list_name in ipairs(player_inventory_lists) do + for i = 1, player_inv:get_size(list_name) do + drop(pos, player_inv:get_stack(list_name, i)) + end + player_inv:set_list(list_name, {}) + end + drop(pos, ItemStack("bones:bones")) + minetest.log("action", player_name .. " dies at " .. pos_string .. + ". Inventory dropped") + if bones_position_message then + minetest.chat_send_player(player_name, S("@1 died at @2, and dropped their inventory.", player_name, pos_string)) + end + return + end + + local param2 = minetest.dir_to_facedir(player:get_look_dir()) + minetest.set_node(pos, {name = "bones:bones", param2 = param2}) + minetest.chat_send_player(player_name, "Your stuff is waiting for you at "..minetest.pos_to_string(pos).. ". Go and grab it! ;-)") + minetest.log("action", player_name.." left their bones at "..minetest.pos_to_string(pos)) + + minetest.log("action", player_name .. " dies at " .. pos_string .. + ". Bones placed") + if bones_position_message then + minetest.chat_send_player(player_name, S("@1 died at @2, and bones were placed.", player_name, pos_string)) + end + + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + inv:set_size("main", 8 * 4) + + for _, list_name in ipairs(player_inventory_lists) do + for i = 1, player_inv:get_size(list_name) do + local stack = player_inv:get_stack(list_name, i) + if inv:room_for_item("main", stack) then + inv:add_item("main", stack) + else -- no space left + drop(pos, stack) + end + end + player_inv:set_list(list_name, {}) + end + + meta:set_string("formspec", bones_formspec) + meta:set_string("owner", player_name) + + if share_bones_time ~= 0 then + meta:set_string("infotext", S("@1's fresh bones", player_name)) + + if share_bones_time_early == 0 or not minetest.is_protected(pos, player_name) then + meta:set_int("time", 0) + else + meta:set_int("time", (share_bones_time - share_bones_time_early)) + end + + minetest.get_node_timer(pos):start(10) + else + meta:set_string("infotext", S("@1's bones", player_name)) + end +end) diff --git a/mods/bones/license.txt b/mods/bones/license.txt new file mode 100644 index 00000000..fe525841 --- /dev/null +++ b/mods/bones/license.txt @@ -0,0 +1,58 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2012-2016 PilzAdam +Copyright (C) 2012-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2016 paramat + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + diff --git a/mods/bones/locale/bones.de.tr b/mods/bones/locale/bones.de.tr new file mode 100644 index 00000000..83f5c28a --- /dev/null +++ b/mods/bones/locale/bones.de.tr @@ -0,0 +1,8 @@ +# textdomain: bones +Bones=Knochen +@1's old bones=Alte Knochen von @1 +@1 died at @2.=@1 starb bei @2. +@1 died at @2, and dropped their inventory.=@1 starb bei @2 und ließ das Inventar fallen. +@1 died at @2, and bones were placed.=@1 starb bei @2 und Knochen wurden platziert. +@1's fresh bones=Frische Knochen von @1 +@1's bones=Knochen von @1 diff --git a/mods/bones/locale/bones.eo.tr b/mods/bones/locale/bones.eo.tr new file mode 100644 index 00000000..d8028f14 --- /dev/null +++ b/mods/bones/locale/bones.eo.tr @@ -0,0 +1,8 @@ +# textdomain: bones +Bones=Ostoj +@1's old bones=La malfreŝaj ostoj de @1 +@1 died at @2.=@1 mortis ĉe @2 +@1 died at @2, and dropped their inventory.=@1 mortis ĉe @2, kaj delasis sian stokon. +@1 died at @2, and bones were placed.=@1 mortis ĉe @2, kaj ostoj estas demetitaj. +@1's fresh bones=La freŝaj ostoj de @1 +@1's bones=La ostoj de @1 diff --git a/mods/bones/locale/bones.es.tr b/mods/bones/locale/bones.es.tr new file mode 100644 index 00000000..9c45513c --- /dev/null +++ b/mods/bones/locale/bones.es.tr @@ -0,0 +1,8 @@ +# textdomain: bones +Bones=Huesos +@1's old bones=Huesos antiguos de @1 +@1 died at @2.=@1 murió en @2. +@1 died at @2, and dropped their inventory.=@1 murió en @2, y su inventario se desprendió. +@1 died at @2, and bones were placed.=@1 murió en @2, y sus huesos fueron depositados. +@1's fresh bones=Huesos recientes de @1 +@1's bones=Huesos de @1 diff --git a/mods/bones/locale/bones.fr.tr b/mods/bones/locale/bones.fr.tr new file mode 100644 index 00000000..cfe01ee1 --- /dev/null +++ b/mods/bones/locale/bones.fr.tr @@ -0,0 +1,8 @@ +# textdomain: bones +Bones=Os +@1's old bones=Vieux os de @1 +@1 died at @2.=@1 est mort à @2. +@1 died at @2, and dropped their inventory.=@1 est mort à @2 et a laissé tomber son inventaire. +@1 died at @2, and bones were placed.=@1 est mort à @2 et ses os ont été placés. +@1's fresh bones=Os frais de @1 +@1's bones=Os de @1 diff --git a/mods/bones/locale/bones.id.tr b/mods/bones/locale/bones.id.tr new file mode 100644 index 00000000..3c81accf --- /dev/null +++ b/mods/bones/locale/bones.id.tr @@ -0,0 +1,8 @@ +# textdomain: bones +Bones=Tulang +@1's old bones=Tulang lama @1 +@1 died at @2.=@1 mati di @2. +@1 died at @2, and dropped their inventory.=@1 mati di @2 dan meninggalkan barangnya. +@1 died at @2, and bones were placed.=@1 mati di @2 dan tulangnya diletakkan. +@1's fresh bones=Tulang segar @1 +@1's bones=Tulang @1 diff --git a/mods/bones/locale/bones.it.tr b/mods/bones/locale/bones.it.tr new file mode 100644 index 00000000..ea3094e9 --- /dev/null +++ b/mods/bones/locale/bones.it.tr @@ -0,0 +1,8 @@ +# textdomain: bones +Bones=Ossa +@1's old bones=Ossa vecchie di @1 +@1 died at @2.=@1 è morto alla posizione @2. +@1 died at @2, and dropped their inventory.=@1 è morto alla posizione @2, e ha lasciato a terra il contenuto del suo inventario. +@1 died at @2, and bones were placed.=@1 è morto alla posizione @2, e vi sono state posizionate delle ossa. +@1's fresh bones=Ossa fresche di @1 +@1's bones=Ossa di @1 diff --git a/mods/bones/locale/bones.ja.tr b/mods/bones/locale/bones.ja.tr new file mode 100644 index 00000000..8c3f7328 --- /dev/null +++ b/mods/bones/locale/bones.ja.tr @@ -0,0 +1,8 @@ +# textdomain: bones +Bones=骨 +@1's old bones=@1の古い骨 +@1 died at @2.=@1は@2で死亡しました。 +@1 died at @2, and dropped their inventory.=@1は@2で死亡して持ち物を落としました。 +@1 died at @2, and bones were placed.=@1は@2で死亡して骨が残されました。 +@1's fresh bones=@1の新鮮な骨 +@1's bones=@1の骨 diff --git a/mods/bones/locale/bones.jbo.tr b/mods/bones/locale/bones.jbo.tr new file mode 100644 index 00000000..cbb476e7 --- /dev/null +++ b/mods/bones/locale/bones.jbo.tr @@ -0,0 +1,8 @@ +# textdomain: bones +Bones=lo bongu gunma +@1's old bones=.i ti tolci'o ke bongu gunma po'a la'o zo'i.@1.zo'i +@1 died at @2.=.i la'o zo'i.@1.zo'i pu morsi di'o lo me zoi pos.@2.pos. +@1 died at @2, and dropped their inventory.=.i la'o zo'i.@1.zo'i goi ly. pu morsi di'o lo me zoi pos.@2.pos. .ije ly. te farlu lo me le dacti liste po ly. +@1 died at @2, and bones were placed.=.i la'o zo'i.@1.zo'i goi ly. pu morsi di'o lo me zoi pos.@2.pos. .ije lo bongu gunma pu se punji +@1's fresh bones=.i ti cnino ke bongu gunma po'a la'o zo'i.@1.zo'i +@1's bones=.i ti bongu gunma po'a la'o zo'i.@1.zo'i diff --git a/mods/bones/locale/bones.ms.tr b/mods/bones/locale/bones.ms.tr new file mode 100644 index 00000000..e4b87129 --- /dev/null +++ b/mods/bones/locale/bones.ms.tr @@ -0,0 +1,8 @@ +# textdomain: bones +Bones=Tulang +@1's old bones=Tulang lama @1 +@1 died at @2.=@1 mati di @2. +@1 died at @2, and dropped their inventory.=@1 mati di @2, dan menjatuhkan inventorinya. +@1 died at @2, and bones were placed.=@1 mati di @2, dan tulang diletakkan. +@1's fresh bones=Tulang segar @1 +@1's bones=Tulang @1 diff --git a/mods/bones/locale/bones.pl.tr b/mods/bones/locale/bones.pl.tr new file mode 100644 index 00000000..be48a0c9 --- /dev/null +++ b/mods/bones/locale/bones.pl.tr @@ -0,0 +1,8 @@ +# textdomain: bones +Bones=Kości +@1's old bones=Stare kości @1 +@1 died at @2.=@1 umarł w @2. +@1 died at @2, and dropped their inventory.=@1 umarł w @2, i upuścił swój ekwipunek. +@1 died at @2, and bones were placed.=@1 umarł w @2, kości zostały położone. +@1's fresh bones=Świeże kości @1 +@1's bones=Kości @1 diff --git a/mods/bones/locale/bones.pt_BR.tr b/mods/bones/locale/bones.pt_BR.tr new file mode 100644 index 00000000..31339af7 --- /dev/null +++ b/mods/bones/locale/bones.pt_BR.tr @@ -0,0 +1,8 @@ +# textdomain: bones +Bones=Ossos +@1's old bones=Ossos antigos de @1 +@1 died at @2.=@1 morreu em @2. +@1 died at @2, and dropped their inventory.=@1 morreu em @2, e seu inventário foi derrubado. +@1 died at @2, and bones were placed.=@1 morreu em @2, e os ossos foram colocados. +@1's fresh bones=Ossos recentes de @1 +@1's bones=Ossos de @1 diff --git a/mods/bones/locale/bones.ru.tr b/mods/bones/locale/bones.ru.tr new file mode 100644 index 00000000..98691c53 --- /dev/null +++ b/mods/bones/locale/bones.ru.tr @@ -0,0 +1,8 @@ +# textdomain: bones +Bones=Кости +@1's old bones=Старые кости @1 +@1 died at @2.=@1 умер в @2. +@1 died at @2, and dropped their inventory.=@1 умер в @2 и потерял содержимое своего инвентаря. +@1 died at @2, and bones were placed.=@1 умер в @2, помещены кости. +@1's fresh bones=новые кости @1 +@1's bones=кости @1 diff --git a/mods/bones/locale/bones.sk.tr b/mods/bones/locale/bones.sk.tr new file mode 100644 index 00000000..a32c17de --- /dev/null +++ b/mods/bones/locale/bones.sk.tr @@ -0,0 +1,8 @@ +# textdomain: bones +Bones=Kosti +@1's old bones=Staré kosti hráča @1 +@1 died at @2.=@1 zomrel na pozícií @2. +@1 died at @2, and dropped their inventory.=@1 zomrel na pozícií @2 a vysypal svoj inventár. +@1 died at @2, and bones were placed.=@1 zomrel na pozícií @2 a ostali po ňom kosti. +@1's fresh bones=Čerstvé kosti hráča @1 +@1's bones=Kosti hráča @1 diff --git a/mods/bones/locale/bones.sv.tr b/mods/bones/locale/bones.sv.tr new file mode 100644 index 00000000..1323c590 --- /dev/null +++ b/mods/bones/locale/bones.sv.tr @@ -0,0 +1,8 @@ +# textdomain: bones +Bones=Ben +@1's old bones=@1s Gamla ben +@1 died at @2.=@1 dog på @a. +@1 died at @2, and dropped their inventory.=@1 dog på @a, och tappade deras saker. +@1 died at @2, and bones were placed.=@1 dog på @2, och deras ben var placerade. +@1's fresh bones=@1s färska ben +@1's bones=@1s ben diff --git a/mods/bones/locale/bones.uk.tr b/mods/bones/locale/bones.uk.tr new file mode 100644 index 00000000..73b57a76 --- /dev/null +++ b/mods/bones/locale/bones.uk.tr @@ -0,0 +1,8 @@ +# textdomain: bones +Bones=Кістки +@1's old bones=старі кістки @1 +@1 died at @2.=@1 помер в @2. +@1 died at @2, and dropped their inventory.=@1 помер в @2, та загубив вміст свого інвентарю. +@1 died at @2, and bones were placed.=@1 помер в @2, розміщені кістки. +@1's fresh bones=нові кістки @1 +@1's bones=кістки @1 diff --git a/mods/bones/locale/bones.zh_CN.tr b/mods/bones/locale/bones.zh_CN.tr new file mode 100644 index 00000000..7911e37c --- /dev/null +++ b/mods/bones/locale/bones.zh_CN.tr @@ -0,0 +1,8 @@ +# textdomain: bones +Bones=骨骸 +@1's old bones=@1的旧骨骸 +@1 died at @2.=@1在@2死亡。 +@1 died at @2, and dropped their inventory.=@1在@2死亡,丢掉了所有物品。 +@1 died at @2, and bones were placed.=@1在@2死亡,已放置骨骸。 +@1's fresh bones=@1的新鲜骨骸 +@1's bones=@1的骨骸 diff --git a/mods/bones/locale/bones.zh_TW.tr b/mods/bones/locale/bones.zh_TW.tr new file mode 100644 index 00000000..1a94d2f1 --- /dev/null +++ b/mods/bones/locale/bones.zh_TW.tr @@ -0,0 +1,8 @@ +# textdomain: bones +Bones=骨骸 +@1's old bones=@1的舊骨骸 +@1 died at @2.=@1在@2死亡。 +@1 died at @2, and dropped their inventory.=@1在@2死亡,丟掉了物品欄。 +@1 died at @2, and bones were placed.=@1在@2死亡,骨骸被放置。 +@1's fresh bones=@1的新鮮骨骸 +@1's bones=@1的骨骸 diff --git a/mods/bones/locale/template.txt b/mods/bones/locale/template.txt new file mode 100644 index 00000000..4ac8d459 --- /dev/null +++ b/mods/bones/locale/template.txt @@ -0,0 +1,8 @@ +# textdomain: bones +Bones= +@1's old bones= +@1 died at @2.= +@1 died at @2, and dropped their inventory.= +@1 died at @2, and bones were placed.= +@1's fresh bones= +@1's bones= diff --git a/mods/bones/mod.conf b/mods/bones/mod.conf new file mode 100644 index 00000000..371997b3 --- /dev/null +++ b/mods/bones/mod.conf @@ -0,0 +1,3 @@ +name = bones +description = Minetest Game mod: bones +depends = default diff --git a/mods/bones/textures/bones_bottom.png b/mods/bones/textures/bones_bottom.png new file mode 100644 index 00000000..d3d5d322 Binary files /dev/null and b/mods/bones/textures/bones_bottom.png differ diff --git a/mods/bones/textures/bones_front.png b/mods/bones/textures/bones_front.png new file mode 100644 index 00000000..1617d8f7 Binary files /dev/null and b/mods/bones/textures/bones_front.png differ diff --git a/mods/bones/textures/bones_rear.png b/mods/bones/textures/bones_rear.png new file mode 100644 index 00000000..05ee2a12 Binary files /dev/null and b/mods/bones/textures/bones_rear.png differ diff --git a/mods/bones/textures/bones_side.png b/mods/bones/textures/bones_side.png new file mode 100644 index 00000000..c8ac5053 Binary files /dev/null and b/mods/bones/textures/bones_side.png differ diff --git a/mods/bones/textures/bones_top.png b/mods/bones/textures/bones_top.png new file mode 100644 index 00000000..63786da7 Binary files /dev/null and b/mods/bones/textures/bones_top.png differ diff --git a/mods/bows b/mods/bows new file mode 160000 index 00000000..f7bbb90b --- /dev/null +++ b/mods/bows @@ -0,0 +1 @@ +Subproject commit f7bbb90b43d07f9570ad1a5e66827514d3a1fddd diff --git a/mods/bridges b/mods/bridges new file mode 160000 index 00000000..5b5f4755 --- /dev/null +++ b/mods/bridges @@ -0,0 +1 @@ +Subproject commit 5b5f47552cab78cad1c31be84b5db3d384e2bbff diff --git a/mods/bucket/README.txt b/mods/bucket/README.txt new file mode 100644 index 00000000..58997b26 --- /dev/null +++ b/mods/bucket/README.txt @@ -0,0 +1,13 @@ +Minetest Game mod: bucket +========================= +See license.txt for license information. + +Authors of source code +---------------------- +Kahrl (LGPLv2.1+) +celeron55, Perttu Ahola (LGPLv2.1+) +Various Minetest developers and contributors (LGPLv2.1+) + +Authors of media (textures) +--------------------------- +ElementW (CC BY-SA 3.0) diff --git a/mods/bucket/init.lua b/mods/bucket/init.lua new file mode 100644 index 00000000..ebdf2e74 --- /dev/null +++ b/mods/bucket/init.lua @@ -0,0 +1,240 @@ +-- Minetest 0.4 mod: bucket +-- See README.txt for licensing and other information. + +-- Load support for MT game translation. +local S = minetest.get_translator("bucket") + + +minetest.register_alias("bucket", "bucket:bucket_empty") +minetest.register_alias("bucket_water", "bucket:bucket_water") +minetest.register_alias("bucket_lava", "bucket:bucket_lava") + +minetest.register_craft({ + output = "bucket:bucket_empty 1", + recipe = { + {"default:steel_ingot", "", "default:steel_ingot"}, + {"", "default:steel_ingot", ""}, + } +}) + +bucket = {} +bucket.liquids = {} + +local function check_protection(pos, name, text) + if minetest.is_protected(pos, name) then + minetest.log("action", (name ~= "" and name or "A mod") + .. " tried to " .. text + .. " at protected position " + .. minetest.pos_to_string(pos) + .. " with a bucket") + minetest.record_protection_violation(pos, name) + return true + end + return false +end + +-- Register a new liquid +-- source = name of the source node +-- flowing = name of the flowing node +-- itemname = name of the new bucket item (or nil if liquid is not takeable) +-- inventory_image = texture of the new bucket item (ignored if itemname == nil) +-- name = text description of the bucket item +-- groups = (optional) groups of the bucket item, for example {water_bucket = 1} +-- force_renew = (optional) bool. Force the liquid source to renew if it has a +-- source neighbour, even if defined as 'liquid_renewable = false'. +-- Needed to avoid creating holes in sloping rivers. +-- This function can be called from any mod (that depends on bucket). +function bucket.register_liquid(source, flowing, itemname, inventory_image, name, + groups, force_renew) + bucket.liquids[source] = { + source = source, + flowing = flowing, + itemname = itemname, + force_renew = force_renew, + } + bucket.liquids[flowing] = bucket.liquids[source] + + if itemname ~= nil then + minetest.register_craftitem(itemname, { + description = name, + inventory_image = inventory_image, + stack_max = 1, + liquids_pointable = true, + groups = groups, + + on_place = function(itemstack, user, pointed_thing) + -- Must be pointing to node + if pointed_thing.type ~= "node" then + return + end + + local node = minetest.get_node_or_nil(pointed_thing.under) + local ndef = node and minetest.registered_nodes[node.name] + + -- Call on_rightclick if the pointed node defines it + if ndef and ndef.on_rightclick and + not (user and user:is_player() and + user:get_player_control().sneak) then + return ndef.on_rightclick( + pointed_thing.under, + node, user, + itemstack) + end + + local lpos + + -- Check if pointing to a buildable node + if ndef and ndef.buildable_to then + -- buildable; replace the node + lpos = pointed_thing.under + else + -- not buildable to; place the liquid above + -- check if the node above can be replaced + + lpos = pointed_thing.above + node = minetest.get_node_or_nil(lpos) + local above_ndef = node and minetest.registered_nodes[node.name] + + if not above_ndef or not above_ndef.buildable_to then + -- do not remove the bucket with the liquid + return itemstack + end + end + + if check_protection(lpos, user + and user:get_player_name() + or "", "place "..source) then + return + end + + minetest.set_node(lpos, {name = source}) + return ItemStack("bucket:bucket_empty") + end + }) + end +end + +minetest.register_craftitem("bucket:bucket_empty", { + description = S("Empty Bucket"), + inventory_image = "bucket.png", + groups = {tool = 1}, + liquids_pointable = true, + on_use = function(itemstack, user, pointed_thing) + if pointed_thing.type == "object" then + pointed_thing.ref:punch(user, 1.0, { full_punch_interval=1.0 }, nil) + return user:get_wielded_item() + elseif pointed_thing.type ~= "node" then + -- do nothing if it's neither object nor node + return + end + -- Check if pointing to a liquid source + local node = minetest.get_node(pointed_thing.under) + local liquiddef = bucket.liquids[node.name] + local item_count = user:get_wielded_item():get_count() + + if liquiddef ~= nil + and liquiddef.itemname ~= nil + and node.name == liquiddef.source then + if check_protection(pointed_thing.under, + user:get_player_name(), + "take ".. node.name) then + return + end + + -- default set to return filled bucket + local giving_back = liquiddef.itemname + + -- check if holding more than 1 empty bucket + if item_count > 1 then + + -- if space in inventory add filled bucked, otherwise drop as item + local inv = user:get_inventory() + if inv:room_for_item("main", {name=liquiddef.itemname}) then + inv:add_item("main", liquiddef.itemname) + else + local pos = user:get_pos() + pos.y = math.floor(pos.y + 0.5) + minetest.add_item(pos, liquiddef.itemname) + end + + -- set to return empty buckets minus 1 + giving_back = "bucket:bucket_empty "..tostring(item_count-1) + + end + + -- force_renew requires a source neighbour + local source_neighbor = false + if liquiddef.force_renew then + source_neighbor = + minetest.find_node_near(pointed_thing.under, 1, liquiddef.source) + end + if not (source_neighbor and liquiddef.force_renew) then + minetest.add_node(pointed_thing.under, {name = "air"}) + end + + return ItemStack(giving_back) + else + -- non-liquid nodes will have their on_punch triggered + local node_def = minetest.registered_nodes[node.name] + if node_def then + node_def.on_punch(pointed_thing.under, node, user, pointed_thing) + end + return user:get_wielded_item() + end + end, +}) + +bucket.register_liquid( + "default:water_source", + "default:water_flowing", + "bucket:bucket_water", + "bucket_water.png", + S("Water Bucket"), + {tool = 1, water_bucket = 1} +) + +-- River water source is 'liquid_renewable = false' to avoid horizontal spread +-- of water sources in sloping rivers that can cause water to overflow +-- riverbanks and cause floods. +-- River water source is instead made renewable by the 'force renew' option +-- used here. + +bucket.register_liquid( + "default:river_water_source", + "default:river_water_flowing", + "bucket:bucket_river_water", + "bucket_river_water.png", + S("River Water Bucket"), + {tool = 1, water_bucket = 1}, + true +) + +bucket.register_liquid( + "default:lava_source", + "default:lava_flowing", + "bucket:bucket_lava", + "bucket_lava.png", + S("Lava Bucket"), + {tool = 1} +) + +minetest.register_craft({ + type = "fuel", + recipe = "bucket:bucket_lava", + burntime = 60, + replacements = {{"bucket:bucket_lava", "bucket:bucket_empty"}}, +}) + +-- Register buckets as dungeon loot +if minetest.global_exists("dungeon_loot") then + dungeon_loot.register({ + {name = "bucket:bucket_empty", chance = 0.55}, + -- water in deserts/ice or above ground, lava otherwise + {name = "bucket:bucket_water", chance = 0.45, + types = {"sandstone", "desert", "ice"}}, + {name = "bucket:bucket_water", chance = 0.45, y = {0, 32768}, + types = {"normal"}}, + {name = "bucket:bucket_lava", chance = 0.45, y = {-32768, -1}, + types = {"normal"}}, + }) +end diff --git a/mods/bucket/license.txt b/mods/bucket/license.txt new file mode 100644 index 00000000..a5156ae6 --- /dev/null +++ b/mods/bucket/license.txt @@ -0,0 +1,51 @@ +License of source code +---------------------- + +GNU Lesser General Public License, version 2.1 +Copyright (C) 2011-2016 Kahrl +Copyright (C) 2011-2016 celeron55, Perttu Ahola +Copyright (C) 2011-2016 Various Minetest developers and contributors + +This program is free software; you can redistribute it and/or modify it under the terms +of the GNU Lesser General Public License as published by the Free Software Foundation; +either version 2.1 of the License, or (at your option) any later version. + +This program 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 Lesser General Public License for more details: +https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2015-2016 ElementW + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/bucket/locale/bucket.de.tr b/mods/bucket/locale/bucket.de.tr new file mode 100644 index 00000000..570dff15 --- /dev/null +++ b/mods/bucket/locale/bucket.de.tr @@ -0,0 +1,5 @@ +# textdomain: bucket +Empty Bucket=Leerer Eimer +Water Bucket=Wassereimer +River Water Bucket=Flusswassereimer +Lava Bucket=Lavaeimer diff --git a/mods/bucket/locale/bucket.eo.tr b/mods/bucket/locale/bucket.eo.tr new file mode 100644 index 00000000..b6266a1d --- /dev/null +++ b/mods/bucket/locale/bucket.eo.tr @@ -0,0 +1,5 @@ +# textdomain: bucket +Empty Bucket=Malplena Sitelo +Water Bucket=Sitelo da Akvo +River Water Bucket=Sitelo da Rivera Akvo +Lava Bucket=Sitelo da Lafo diff --git a/mods/bucket/locale/bucket.es.tr b/mods/bucket/locale/bucket.es.tr new file mode 100644 index 00000000..91a06233 --- /dev/null +++ b/mods/bucket/locale/bucket.es.tr @@ -0,0 +1,5 @@ +# textdomain: bucket +Empty Bucket=Cubo vacío +Water Bucket=Cubo con agua +River Water Bucket=Cubo con agua de río +Lava Bucket=Cubo con lava diff --git a/mods/bucket/locale/bucket.fr.tr b/mods/bucket/locale/bucket.fr.tr new file mode 100644 index 00000000..5065150d --- /dev/null +++ b/mods/bucket/locale/bucket.fr.tr @@ -0,0 +1,5 @@ +# textdomain: bucket +Empty Bucket=Seau vide +Water Bucket=Seau d'eau +River Water Bucket=Seau d'eau de rivière +Lava Bucket=Seau de lave diff --git a/mods/bucket/locale/bucket.id.tr b/mods/bucket/locale/bucket.id.tr new file mode 100644 index 00000000..56625638 --- /dev/null +++ b/mods/bucket/locale/bucket.id.tr @@ -0,0 +1,5 @@ +# textdomain: bucket +Empty Bucket=Ember Kosong +Water Bucket=Ember Air +River Water Bucket=Ember Air Sungai +Lava Bucket=Ember Lava diff --git a/mods/bucket/locale/bucket.it.tr b/mods/bucket/locale/bucket.it.tr new file mode 100644 index 00000000..beca28c7 --- /dev/null +++ b/mods/bucket/locale/bucket.it.tr @@ -0,0 +1,5 @@ +# textdomain: bucket +Empty Bucket=Secchio vuoto +Water Bucket=Secchio d'acqua +River Water Bucket=Secchio d'acqua di fiume +Lava Bucket=Secchio di lava diff --git a/mods/bucket/locale/bucket.ja.tr b/mods/bucket/locale/bucket.ja.tr new file mode 100644 index 00000000..df3bbb63 --- /dev/null +++ b/mods/bucket/locale/bucket.ja.tr @@ -0,0 +1,5 @@ +# textdomain: bucket +Empty Bucket=空のバケツ +Water Bucket=水入りバケツ +River Water Bucket=川の水入りバケツ +Lava Bucket=溶岩入りバケツ diff --git a/mods/bucket/locale/bucket.jbo.tr b/mods/bucket/locale/bucket.jbo.tr new file mode 100644 index 00000000..e40d2b92 --- /dev/null +++ b/mods/bucket/locale/bucket.jbo.tr @@ -0,0 +1,5 @@ +# textdomain: bucket +Empty Bucket=lo baktu be no da +Water Bucket=lo baktu be lo djacu +River Water Bucket=lo baktu be lo rirxe djacu +Lava Bucket=lo baktu be lo likro'i diff --git a/mods/bucket/locale/bucket.ms.tr b/mods/bucket/locale/bucket.ms.tr new file mode 100644 index 00000000..02ba38a6 --- /dev/null +++ b/mods/bucket/locale/bucket.ms.tr @@ -0,0 +1,5 @@ +# textdomain: bucket +Empty Bucket=Baldi Kosong +Water Bucket=Baldi Air +River Water Bucket=Baldi Air Sungai +Lava Bucket=Baldi Lava diff --git a/mods/bucket/locale/bucket.pl.tr b/mods/bucket/locale/bucket.pl.tr new file mode 100644 index 00000000..31600f1b --- /dev/null +++ b/mods/bucket/locale/bucket.pl.tr @@ -0,0 +1,5 @@ +# textdomain: bucket +Empty Bucket=Puste wiadro +Water Bucket=Wiadro z wodą +River Water Bucket=Wiadro z rzeczną wodą +Lava Bucket=Wiadro z lawą diff --git a/mods/bucket/locale/bucket.pt_BR.tr b/mods/bucket/locale/bucket.pt_BR.tr new file mode 100644 index 00000000..429acac0 --- /dev/null +++ b/mods/bucket/locale/bucket.pt_BR.tr @@ -0,0 +1,5 @@ +# textdomain: bucket +Empty Bucket=Balde Vazio +Water Bucket=Balde de Água +River Water Bucket=Balde de Água do Rio +Lava Bucket=Balde de Lava diff --git a/mods/bucket/locale/bucket.ru.tr b/mods/bucket/locale/bucket.ru.tr new file mode 100644 index 00000000..8ede2804 --- /dev/null +++ b/mods/bucket/locale/bucket.ru.tr @@ -0,0 +1,5 @@ +# textdomain: bucket +Empty Bucket=Пустое Ведро +Water Bucket=Ведро с Водой +River Water Bucket=Ведро с Речной Водой +Lava Bucket=Ведро с Лавой diff --git a/mods/bucket/locale/bucket.sk.tr b/mods/bucket/locale/bucket.sk.tr new file mode 100644 index 00000000..0327b20c --- /dev/null +++ b/mods/bucket/locale/bucket.sk.tr @@ -0,0 +1,5 @@ +# textdomain: bucket +Empty Bucket=Prázdne vedro +Water Bucket=Vedro s vodou +River Water Bucket=Vedro s vodou z rieky +Lava Bucket=Vedro s lávou diff --git a/mods/bucket/locale/bucket.sv.tr b/mods/bucket/locale/bucket.sv.tr new file mode 100644 index 00000000..59ee62df --- /dev/null +++ b/mods/bucket/locale/bucket.sv.tr @@ -0,0 +1,5 @@ +# textdomain: bucket +Empty Bucket=Tom hink +Water Bucket=Vattenhink +River Water Bucket=Flodvattenshink +Lava Bucket=Lavahink diff --git a/mods/bucket/locale/bucket.uk.tr b/mods/bucket/locale/bucket.uk.tr new file mode 100644 index 00000000..a5251a5a --- /dev/null +++ b/mods/bucket/locale/bucket.uk.tr @@ -0,0 +1,5 @@ +# textdomain: bucket +Empty Bucket=Пусте Відро +Water Bucket=Відро З Водою +River Water Bucket=Відро З Річною Водою +Lava Bucket=Відро З Лавою diff --git a/mods/bucket/locale/bucket.zh_CN.tr b/mods/bucket/locale/bucket.zh_CN.tr new file mode 100644 index 00000000..fda5bfcd --- /dev/null +++ b/mods/bucket/locale/bucket.zh_CN.tr @@ -0,0 +1,5 @@ +# textdomain: bucket +Empty Bucket=空桶 +Water Bucket=水桶 +River Water Bucket=河水桶 +Lava Bucket=岩浆桶 diff --git a/mods/bucket/locale/bucket.zh_TW.tr b/mods/bucket/locale/bucket.zh_TW.tr new file mode 100644 index 00000000..965d6575 --- /dev/null +++ b/mods/bucket/locale/bucket.zh_TW.tr @@ -0,0 +1,5 @@ +# textdomain: bucket +Empty Bucket=空桶 +Water Bucket=水桶 +River Water Bucket=河水桶 +Lava Bucket=岩漿桶 diff --git a/mods/bucket/locale/template.txt b/mods/bucket/locale/template.txt new file mode 100644 index 00000000..a37c103b --- /dev/null +++ b/mods/bucket/locale/template.txt @@ -0,0 +1,5 @@ +# textdomain: bucket +Empty Bucket= +Water Bucket= +River Water Bucket= +Lava Bucket= diff --git a/mods/bucket/mod.conf b/mods/bucket/mod.conf new file mode 100644 index 00000000..fef46873 --- /dev/null +++ b/mods/bucket/mod.conf @@ -0,0 +1,4 @@ +name = bucket +description = Minetest Game mod: bucket +depends = default +optional_depends = dungeon_loot diff --git a/mods/bucket/textures/bucket.png b/mods/bucket/textures/bucket.png new file mode 100644 index 00000000..17b0c493 Binary files /dev/null and b/mods/bucket/textures/bucket.png differ diff --git a/mods/bucket/textures/bucket_lava.png b/mods/bucket/textures/bucket_lava.png new file mode 100644 index 00000000..ac6108d9 Binary files /dev/null and b/mods/bucket/textures/bucket_lava.png differ diff --git a/mods/bucket/textures/bucket_river_water.png b/mods/bucket/textures/bucket_river_water.png new file mode 100644 index 00000000..d4648bb3 Binary files /dev/null and b/mods/bucket/textures/bucket_river_water.png differ diff --git a/mods/bucket/textures/bucket_water.png b/mods/bucket/textures/bucket_water.png new file mode 100644 index 00000000..5af836bc Binary files /dev/null and b/mods/bucket/textures/bucket_water.png differ diff --git a/mods/butterflies/README.txt b/mods/butterflies/README.txt new file mode 100644 index 00000000..a7f52a07 --- /dev/null +++ b/mods/butterflies/README.txt @@ -0,0 +1,14 @@ +Minetest Game mod: Butterflies +============================== +Adds butterflies to the world on mapgen, which can be caught in a net if the +fireflies mod is also enabled. + +Authors of source code +---------------------- +Shara RedCat (MIT) + +Authors of media (textures) +--------------------------- +Shara RedCat (CC BY-SA 3.0): + butterflies_butterfly_*.png + butterflies_butterfly_*_animated.png \ No newline at end of file diff --git a/mods/butterflies/init.lua b/mods/butterflies/init.lua new file mode 100644 index 00000000..49240eea --- /dev/null +++ b/mods/butterflies/init.lua @@ -0,0 +1,137 @@ +-- butterflies/init.lua + +-- Load support for MT game translation. +local S = minetest.get_translator("butterflies") + +-- register butterflies +local butter_list = { + {"white", S("White Butterfly")}, + {"red", S("Red Butterfly")}, + {"violet", S("Violet Butterfly")} +} + +for i in ipairs (butter_list) do + local name = butter_list[i][1] + local desc = butter_list[i][2] + + minetest.register_node("butterflies:butterfly_"..name, { + description = desc, + drawtype = "plantlike", + tiles = {{ + name = "butterflies_butterfly_"..name.."_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 3 + }, + }}, + inventory_image = "butterflies_butterfly_"..name..".png", + wield_image = "butterflies_butterfly_"..name..".png", + waving = 1, + paramtype = "light", + sunlight_propagates = true, + buildable_to = true, + walkable = false, + groups = {catchable = 1}, + selection_box = { + type = "fixed", + fixed = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1}, + }, + floodable = true, + on_place = function(itemstack, placer, pointed_thing) + local player_name = placer:get_player_name() + local pos = pointed_thing.above + + if not minetest.is_protected(pos, player_name) and + not minetest.is_protected(pointed_thing.under, player_name) and + minetest.get_node(pos).name == "air" then + minetest.set_node(pos, {name = "butterflies:butterfly_"..name}) + minetest.get_node_timer(pos):start(1) + itemstack:take_item() + end + return itemstack + end, + on_timer = function(pos, elapsed) + if minetest.get_node_light(pos) < 11 then + minetest.set_node(pos, {name = "butterflies:hidden_butterfly_"..name}) + end + minetest.get_node_timer(pos):start(30) + end + }) + + minetest.register_node("butterflies:hidden_butterfly_"..name, { + drawtype = "airlike", + inventory_image = "butterflies_butterfly_"..name..".png^default_invisible_node_overlay.png", + wield_image = "butterflies_butterfly_"..name..".png^default_invisible_node_overlay.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + pointable = false, + diggable = false, + drop = "", + groups = {not_in_creative_inventory = 1}, + floodable = true, + on_place = function(itemstack, placer, pointed_thing) + local player_name = placer:get_player_name() + local pos = pointed_thing.above + + if not minetest.is_protected(pos, player_name) and + not minetest.is_protected(pointed_thing.under, player_name) and + minetest.get_node(pos).name == "air" then + minetest.set_node(pos, {name = "butterflies:hidden_butterfly_"..name}) + minetest.get_node_timer(pos):start(1) + itemstack:take_item() + end + return itemstack + end, + on_timer = function(pos, elapsed) + if minetest.get_node_light(pos) >= 11 then + minetest.set_node(pos, {name = "butterflies:butterfly_"..name}) + end + minetest.get_node_timer(pos):start(30) + end + }) +end + +-- register decoration +minetest.register_decoration({ + name = "butterflies:butterfly", + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + place_offset_y = 2, + sidelen = 80, + fill_ratio = 0.005, + biomes = {"grassland", "deciduous_forest"}, + y_max = 31000, + y_min = 1, + decoration = { + "butterflies:butterfly_white", + "butterflies:butterfly_red", + "butterflies:butterfly_violet" + }, + spawn_by = "group:flower", + num_spawn_by = 1 +}) + +-- get decoration ID +local butterflies = minetest.get_decoration_id("butterflies:butterfly") +minetest.set_gen_notify({decoration = true}, {butterflies}) + +-- start nodetimers +minetest.register_on_generated(function(minp, maxp, blockseed) + local gennotify = minetest.get_mapgen_object("gennotify") + local poslist = {} + + for _, pos in ipairs(gennotify["decoration#"..butterflies] or {}) do + local deco_pos = {x = pos.x, y = pos.y + 3, z = pos.z} + table.insert(poslist, deco_pos) + end + + if #poslist ~= 0 then + for i = 1, #poslist do + local pos = poslist[i] + minetest.get_node_timer(pos):start(1) + end + end +end) diff --git a/mods/butterflies/license.txt b/mods/butterflies/license.txt new file mode 100644 index 00000000..eebdad63 --- /dev/null +++ b/mods/butterflies/license.txt @@ -0,0 +1,58 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (c) 2018 Shara RedCat + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2018 Shara RedCat + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ \ No newline at end of file diff --git a/mods/butterflies/locale/butterflies.de.tr b/mods/butterflies/locale/butterflies.de.tr new file mode 100644 index 00000000..2f1b982f --- /dev/null +++ b/mods/butterflies/locale/butterflies.de.tr @@ -0,0 +1,4 @@ +# textdomain: butterflies +White Butterfly=Weißer Schmetterling +Red Butterfly=Roter Schmetterling +Violet Butterfly=Violetter Schmetterling diff --git a/mods/butterflies/locale/butterflies.eo.tr b/mods/butterflies/locale/butterflies.eo.tr new file mode 100644 index 00000000..83d03a2e --- /dev/null +++ b/mods/butterflies/locale/butterflies.eo.tr @@ -0,0 +1,4 @@ +# textdomain: butterflies +White Butterfly=Blanka Papilio +Red Butterfly=Ruĝa Papilio +Violet Butterfly=Violkolora Papilio diff --git a/mods/butterflies/locale/butterflies.es.tr b/mods/butterflies/locale/butterflies.es.tr new file mode 100644 index 00000000..59a28eb9 --- /dev/null +++ b/mods/butterflies/locale/butterflies.es.tr @@ -0,0 +1,4 @@ +# textdomain: butterflies +White Butterfly=Mariposa blanca +Red Butterfly=Mariposa roja +Violet Butterfly=Mariposa violeta diff --git a/mods/butterflies/locale/butterflies.fr.tr b/mods/butterflies/locale/butterflies.fr.tr new file mode 100644 index 00000000..8f5c094c --- /dev/null +++ b/mods/butterflies/locale/butterflies.fr.tr @@ -0,0 +1,4 @@ +# textdomain: butterflies +White Butterfly=Papillon blanc +Red Butterfly=Papillon rouge +Violet Butterfly=Papillon violet diff --git a/mods/butterflies/locale/butterflies.id.tr b/mods/butterflies/locale/butterflies.id.tr new file mode 100644 index 00000000..d4429a6c --- /dev/null +++ b/mods/butterflies/locale/butterflies.id.tr @@ -0,0 +1,4 @@ +# textdomain: butterflies +White Butterfly=Kupu-Kupu Putih +Red Butterfly=Kupu-Kupu Merah +Violet Butterfly=Kupu-Kupu Ungu diff --git a/mods/butterflies/locale/butterflies.it.tr b/mods/butterflies/locale/butterflies.it.tr new file mode 100644 index 00000000..ec65da68 --- /dev/null +++ b/mods/butterflies/locale/butterflies.it.tr @@ -0,0 +1,4 @@ +# textdomain: butterflies +White Butterfly=Farfalla bianca +Red Butterfly=Farfalla rossa +Violet Butterfly=Farfalla viola diff --git a/mods/butterflies/locale/butterflies.ja.tr b/mods/butterflies/locale/butterflies.ja.tr new file mode 100644 index 00000000..5a22d6bf --- /dev/null +++ b/mods/butterflies/locale/butterflies.ja.tr @@ -0,0 +1,4 @@ +# textdomain: butterflies +White Butterfly=白色の蝶 +Red Butterfly=赤色の蝶 +Violet Butterfly=紫色の蝶 diff --git a/mods/butterflies/locale/butterflies.jbo.tr b/mods/butterflies/locale/butterflies.jbo.tr new file mode 100644 index 00000000..f003e004 --- /dev/null +++ b/mods/butterflies/locale/butterflies.jbo.tr @@ -0,0 +1,4 @@ +# textdomain: butterflies +White Butterfly=lo blabi toldi +Red Butterfly=lo xunre toldi +Violet Butterfly=lo zirpu toldi diff --git a/mods/butterflies/locale/butterflies.ms.tr b/mods/butterflies/locale/butterflies.ms.tr new file mode 100644 index 00000000..b8bde851 --- /dev/null +++ b/mods/butterflies/locale/butterflies.ms.tr @@ -0,0 +1,4 @@ +# textdomain: butterflies +White Butterfly=Rama-Rama Putih +Red Butterfly=Rama-Rama Merah +Violet Butterfly=Rama-Rama Ungu diff --git a/mods/butterflies/locale/butterflies.pl.tr b/mods/butterflies/locale/butterflies.pl.tr new file mode 100644 index 00000000..577f0b88 --- /dev/null +++ b/mods/butterflies/locale/butterflies.pl.tr @@ -0,0 +1,4 @@ +# textdomain: butterflies +White Butterfly=Biały motyl +Red Butterfly=Czerwony motyl +Violet Butterfly=Fioletowy motyl diff --git a/mods/butterflies/locale/butterflies.pt_BR.tr b/mods/butterflies/locale/butterflies.pt_BR.tr new file mode 100644 index 00000000..d89503aa --- /dev/null +++ b/mods/butterflies/locale/butterflies.pt_BR.tr @@ -0,0 +1,4 @@ +# textdomain: butterflies +White Butterfly= +Red Butterfly= +Violet Butterfly= diff --git a/mods/butterflies/locale/butterflies.ru.tr b/mods/butterflies/locale/butterflies.ru.tr new file mode 100644 index 00000000..7a79ed83 --- /dev/null +++ b/mods/butterflies/locale/butterflies.ru.tr @@ -0,0 +1,4 @@ +# textdomain: butterflies +White Butterfly=Белая Бабочка +Red Butterfly=Красная Бабочка +Violet Butterfly=Фиолетовая Бабочка diff --git a/mods/butterflies/locale/butterflies.sk.tr b/mods/butterflies/locale/butterflies.sk.tr new file mode 100644 index 00000000..c3086e7f --- /dev/null +++ b/mods/butterflies/locale/butterflies.sk.tr @@ -0,0 +1,4 @@ +# textdomain: butterflies +White Butterfly=Biely motýlik +Red Butterfly=Červený motýlik +Violet Butterfly=Fialový motýlik diff --git a/mods/butterflies/locale/butterflies.sv.tr b/mods/butterflies/locale/butterflies.sv.tr new file mode 100644 index 00000000..77bfb340 --- /dev/null +++ b/mods/butterflies/locale/butterflies.sv.tr @@ -0,0 +1,4 @@ +# textdomain: butterflies +White Butterfly=Vit fjäril +Red Butterfly=Röd fjäril +Violet Butterfly=Violett fjäril diff --git a/mods/butterflies/locale/butterflies.uk.tr b/mods/butterflies/locale/butterflies.uk.tr new file mode 100644 index 00000000..4a5995e8 --- /dev/null +++ b/mods/butterflies/locale/butterflies.uk.tr @@ -0,0 +1,4 @@ +# textdomain: butterflies +White Butterfly=Білий Метелик +Red Butterfly=Червоний Метелик +Violet Butterfly=Фіолетовий Метелик diff --git a/mods/butterflies/locale/butterflies.zh_CN.tr b/mods/butterflies/locale/butterflies.zh_CN.tr new file mode 100644 index 00000000..24e0bd13 --- /dev/null +++ b/mods/butterflies/locale/butterflies.zh_CN.tr @@ -0,0 +1,4 @@ +# textdomain: butterflies +White Butterfly=白蝴蝶 +Red Butterfly=红蝴蝶 +Violet Butterfly=紫蝴蝶 diff --git a/mods/butterflies/locale/butterflies.zh_TW.tr b/mods/butterflies/locale/butterflies.zh_TW.tr new file mode 100644 index 00000000..8d927c18 --- /dev/null +++ b/mods/butterflies/locale/butterflies.zh_TW.tr @@ -0,0 +1,4 @@ +# textdomain: butterflies +White Butterfly=白蝴蝶 +Red Butterfly=紅蝴蝶 +Violet Butterfly=紫蝴蝶 diff --git a/mods/butterflies/locale/template.txt b/mods/butterflies/locale/template.txt new file mode 100644 index 00000000..d89503aa --- /dev/null +++ b/mods/butterflies/locale/template.txt @@ -0,0 +1,4 @@ +# textdomain: butterflies +White Butterfly= +Red Butterfly= +Violet Butterfly= diff --git a/mods/butterflies/mod.conf b/mods/butterflies/mod.conf new file mode 100644 index 00000000..1c66497d --- /dev/null +++ b/mods/butterflies/mod.conf @@ -0,0 +1,3 @@ +name = butterflies +description = Minetest Game mod: Butterflies +depends = default, flowers diff --git a/mods/butterflies/textures/butterflies_butterfly_red.png b/mods/butterflies/textures/butterflies_butterfly_red.png new file mode 100644 index 00000000..8edfc365 Binary files /dev/null and b/mods/butterflies/textures/butterflies_butterfly_red.png differ diff --git a/mods/butterflies/textures/butterflies_butterfly_red_animated.png b/mods/butterflies/textures/butterflies_butterfly_red_animated.png new file mode 100644 index 00000000..4a2097bd Binary files /dev/null and b/mods/butterflies/textures/butterflies_butterfly_red_animated.png differ diff --git a/mods/butterflies/textures/butterflies_butterfly_violet.png b/mods/butterflies/textures/butterflies_butterfly_violet.png new file mode 100644 index 00000000..8b8c29dd Binary files /dev/null and b/mods/butterflies/textures/butterflies_butterfly_violet.png differ diff --git a/mods/butterflies/textures/butterflies_butterfly_violet_animated.png b/mods/butterflies/textures/butterflies_butterfly_violet_animated.png new file mode 100644 index 00000000..3f9d72e9 Binary files /dev/null and b/mods/butterflies/textures/butterflies_butterfly_violet_animated.png differ diff --git a/mods/butterflies/textures/butterflies_butterfly_white.png b/mods/butterflies/textures/butterflies_butterfly_white.png new file mode 100644 index 00000000..db4eaec8 Binary files /dev/null and b/mods/butterflies/textures/butterflies_butterfly_white.png differ diff --git a/mods/butterflies/textures/butterflies_butterfly_white_animated.png b/mods/butterflies/textures/butterflies_butterfly_white_animated.png new file mode 100644 index 00000000..e7cada39 Binary files /dev/null and b/mods/butterflies/textures/butterflies_butterfly_white_animated.png differ diff --git a/mods/carts/README.txt b/mods/carts/README.txt new file mode 100644 index 00000000..c0be2d73 --- /dev/null +++ b/mods/carts/README.txt @@ -0,0 +1,23 @@ +Carts (formerly boost_cart) +========================== + +Carts, based almost entirely on the mod boost_cart [1], which +itself is based on (and fully compatible with) the carts mod [2]. + +The model was originally designed by stujones11 [3] (CC-0). + +Cart textures are based on original work from PixelBOX by Gambit (permissive +license). + + +[1] https://github.com/SmallJoker/boost_cart/ +[2] https://github.com/PilzAdam/carts/ +[3] https://github.com/stujones11/railcart/ + + +Features +---------- +- A fast cart for your railway or roller coaster (up to 7 m/s!) +- Boost and brake rails +- Rail junction switching with the 'right-left' walking keys +- Handbrake with the 'back' key diff --git a/mods/carts/cart_entity.lua b/mods/carts/cart_entity.lua new file mode 100644 index 00000000..3015409e --- /dev/null +++ b/mods/carts/cart_entity.lua @@ -0,0 +1,429 @@ +-- carts/cart_entity.lua + +-- support for MT game translation. +local S = carts.get_translator + +local cart_entity = { + initial_properties = { + physical = false, -- otherwise going uphill breaks + collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + visual = "mesh", + mesh = "carts_cart.b3d", + visual_size = {x=1, y=1}, + textures = {"carts_cart.png"}, + }, + + driver = nil, + punched = false, -- used to re-send velocity and position + velocity = {x=0, y=0, z=0}, -- only used on punch + old_dir = {x=1, y=0, z=0}, -- random value to start the cart on punch + old_pos = nil, + old_switch = 0, + railtype = nil, + attached_items = {} +} + +function cart_entity:on_rightclick(clicker) + if not clicker or not clicker:is_player() then + return + end + local player_name = clicker:get_player_name() + if self.driver and player_name == self.driver then + carts:manage_attachment(clicker, nil) + elseif not self.driver then + carts:manage_attachment(clicker, self.object) + self.driver = player_name + end +end + +function cart_entity:on_activate(staticdata, dtime_s) + self.object:set_armor_groups({immortal=1}) + if string.sub(staticdata, 1, string.len("return")) ~= "return" then + return + end + local data = minetest.deserialize(staticdata) + if type(data) ~= "table" then + return + end + self.railtype = data.railtype + self.old_dir = data.old_dir or self.old_dir +end + +function cart_entity:get_staticdata() + return minetest.serialize({ + railtype = self.railtype, + old_dir = self.old_dir + }) +end + +-- 0.5.x and later: When the driver leaves +function cart_entity:on_detach_child(child) + if child and child:get_player_name() == self.driver then + -- Clean up eye height + carts:manage_attachment(child, nil) + self.driver = nil + end +end + +function cart_entity:on_punch(puncher, time_from_last_punch, tool_capabilities, direction) + local pos = self.object:get_pos() + local vel = self.object:get_velocity() + if not self.railtype or vector.equals(vel, {x=0, y=0, z=0}) then + local node = minetest.get_node(pos).name + self.railtype = minetest.get_item_group(node, "connect_to_raillike") + end + -- Punched by non-player + if not puncher or not puncher:is_player() then + local cart_dir = carts:get_rail_direction(pos, self.old_dir, nil, nil, self.railtype) + if vector.equals(cart_dir, {x=0, y=0, z=0}) then + return + end + self.velocity = vector.multiply(cart_dir, 2) + self.punched = true + return + end + -- Player digs cart by sneak-punch + if puncher:get_player_control().sneak then + if self.sound_handle then + minetest.sound_stop(self.sound_handle) + end + -- Detach driver and items + if self.driver then + if self.old_pos then + self.object:set_pos(self.old_pos) + end + local player = minetest.get_player_by_name(self.driver) + carts:manage_attachment(player, nil) + end + for _, obj_ in ipairs(self.attached_items) do + if obj_ then + obj_:set_detach() + end + end + -- Pick up cart + local inv = puncher:get_inventory() + if not minetest.is_creative_enabled(puncher:get_player_name()) + or not inv:contains_item("main", "carts:cart") then + local leftover = inv:add_item("main", "carts:cart") + -- If no room in inventory add a replacement cart to the world + if not leftover:is_empty() then + minetest.add_item(self.object:get_pos(), leftover) + end + end + self.object:remove() + return + end + -- Player punches cart to alter velocity + if puncher:get_player_name() == self.driver then + if math.abs(vel.x + vel.z) > carts.punch_speed_max then + return + end + end + + local punch_dir = carts:velocity_to_dir(puncher:get_look_dir()) + punch_dir.y = 0 + local cart_dir = carts:get_rail_direction(pos, punch_dir, nil, nil, self.railtype) + if vector.equals(cart_dir, {x=0, y=0, z=0}) then + return + end + + local punch_interval = 1 + -- Faulty tool registrations may cause the interval to be set to 0 ! + if tool_capabilities and (tool_capabilities.full_punch_interval or 0) > 0 then + punch_interval = tool_capabilities.full_punch_interval + end + time_from_last_punch = math.min(time_from_last_punch or punch_interval, punch_interval) + local f = 2 * (time_from_last_punch / punch_interval) + + self.velocity = vector.multiply(cart_dir, f) + self.old_dir = cart_dir + self.punched = true +end + +local function rail_on_step_event(handler, obj, dtime) + if handler then + handler(obj, dtime) + end +end + +-- sound refresh interval = 1.0sec +local function rail_sound(self, dtime) + if not self.sound_ttl then + self.sound_ttl = 1.0 + return + elseif self.sound_ttl > 0 then + self.sound_ttl = self.sound_ttl - dtime + return + end + self.sound_ttl = 1.0 + if self.sound_handle then + local handle = self.sound_handle + self.sound_handle = nil + minetest.after(0.2, minetest.sound_stop, handle) + end + local vel = self.object:get_velocity() + local speed = vector.length(vel) + if speed > 0 then + self.sound_handle = minetest.sound_play( + "carts_cart_moving", { + object = self.object, + gain = (speed / carts.speed_max) / 2, + loop = true, + }) + end +end + +local function get_railparams(pos) + local node = minetest.get_node(pos) + return carts.railparams[node.name] or {} +end + +local v3_len = vector.length +local function rail_on_step(self, dtime) + local vel = self.object:get_velocity() + if self.punched then + vel = vector.add(vel, self.velocity) + self.object:set_velocity(vel) + self.old_dir.y = 0 + elseif vector.equals(vel, {x=0, y=0, z=0}) then + return + end + + local pos = self.object:get_pos() + local dir = carts:velocity_to_dir(vel) + local dir_changed = not vector.equals(dir, self.old_dir) + local update = {} + + if self.old_pos and not self.punched and not dir_changed then + local flo_pos = vector.round(pos) + local flo_old = vector.round(self.old_pos) + if vector.equals(flo_pos, flo_old) then + -- Do not check one node multiple times + return + end + end + + local ctrl, player + + -- Get player controls + if self.driver then + player = minetest.get_player_by_name(self.driver) + if player then + ctrl = player:get_player_control() + end + end + + local stop_wiggle = false + if self.old_pos and not dir_changed then + -- Detection for "skipping" nodes (perhaps use average dtime?) + -- It's sophisticated enough to take the acceleration in account + local acc = self.object:get_acceleration() + local distance = dtime * (v3_len(vel) + 0.5 * dtime * v3_len(acc)) + + local new_pos, new_dir = carts:pathfinder( + pos, self.old_pos, self.old_dir, distance, ctrl, + self.old_switch, self.railtype + ) + + if new_pos then + -- No rail found: set to the expected position + pos = new_pos + update.pos = true + dir = new_dir + end + elseif self.old_pos and self.old_dir.y ~= 1 and not self.punched then + -- Stop wiggle + stop_wiggle = true + end + + local railparams + + -- dir: New moving direction of the cart + -- switch_keys: Currently pressed L(1) or R(2) key, + -- used to ignore the key on the next rail node + local switch_keys + dir, switch_keys = carts:get_rail_direction( + pos, dir, ctrl, self.old_switch, self.railtype + ) + dir_changed = not vector.equals(dir, self.old_dir) + + local acc = 0 + if stop_wiggle or vector.equals(dir, {x=0, y=0, z=0}) then + dir = vector.new(self.old_dir) + vel = {x = 0, y = 0, z = 0} + local pos_r = vector.round(pos) + if not carts:is_rail(pos_r, self.railtype) + and self.old_pos then + pos = self.old_pos + elseif not stop_wiggle then + -- End of rail: Smooth out. + pos = pos_r + dir_changed = false + dir.y = 0 + else + pos.y = math.floor(pos.y + 0.5) + end + update.pos = true + update.vel = true + else + -- Direction change detected + if dir_changed then + vel = vector.multiply(dir, math.abs(vel.x + vel.z)) + update.vel = true + if dir.y ~= self.old_dir.y then + pos = vector.round(pos) + update.pos = true + end + end + -- Center on the rail + if dir.z ~= 0 and math.floor(pos.x + 0.5) ~= pos.x then + pos.x = math.floor(pos.x + 0.5) + update.pos = true + end + if dir.x ~= 0 and math.floor(pos.z + 0.5) ~= pos.z then + pos.z = math.floor(pos.z + 0.5) + update.pos = true + end + + -- Slow down or speed up.. + acc = dir.y * -4.0 + + -- Get rail for corrected position + railparams = get_railparams(pos) + + -- no need to check for railparams == nil since we always make it exist. + local speed_mod = railparams.acceleration + if speed_mod and speed_mod ~= 0 then + -- Try to make it similar to the original carts mod + acc = acc + speed_mod + else + -- Handbrake or coast + if ctrl and ctrl.down then + acc = acc - 3 + else + acc = acc - 0.4 + end + end + end + + -- Limit cart speed + local vel_len = vector.length(vel) + if vel_len > carts.speed_max then + vel = vector.multiply(vel, carts.speed_max / vel_len) + update.vel = true + end + if vel_len >= carts.speed_max and acc > 0 then + acc = 0 + end + + self.object:set_acceleration(vector.multiply(dir, acc)) + + self.old_pos = vector.round(pos) + self.old_dir = vector.new(dir) + self.old_switch = switch_keys + + if self.punched then + -- Collect dropped items + for _, obj_ in pairs(minetest.get_objects_inside_radius(pos, 1)) do + local ent = obj_:get_luaentity() + -- Careful here: physical_state and disable_physics are item-internal APIs + if ent and ent.name == "__builtin:item" and ent.physical_state then + ent:disable_physics() + obj_:set_attach(self.object, "", {x=0, y=0, z=0}, {x=0, y=0, z=0}) + self.attached_items[#self.attached_items + 1] = obj_ + end + end + self.punched = false + update.vel = true + end + + railparams = railparams or get_railparams(pos) + + if not (update.vel or update.pos) then + rail_on_step_event(railparams.on_step, self, dtime) + return + end + + local yaw = 0 + if dir.x < 0 then + yaw = 0.5 + elseif dir.x > 0 then + yaw = 1.5 + elseif dir.z < 0 then + yaw = 1 + end + self.object:set_yaw(yaw * math.pi) + + local anim = {x=0, y=0} + if dir.y == -1 then + anim = {x=1, y=1} + elseif dir.y == 1 then + anim = {x=2, y=2} + end + self.object:set_animation(anim, 1, 0) + + if update.vel then + self.object:set_velocity(vel) + end + if update.pos then + if dir_changed then + self.object:set_pos(pos) + else + self.object:move_to(pos) + end + end + + -- call event handler + rail_on_step_event(railparams.on_step, self, dtime) +end + +function cart_entity:on_step(dtime) + rail_on_step(self, dtime) + rail_sound(self, dtime) +end + +minetest.register_entity("carts:cart", cart_entity) + +minetest.register_craftitem("carts:cart", { + description = S("Cart") .. "\n" .. S("(Sneak+Click to pick up)"), + inventory_image = minetest.inventorycube("carts_cart_top.png", "carts_cart_front.png", "carts_cart_side.png"), + wield_image = "carts_cart_front.png", + on_place = function(itemstack, placer, pointed_thing) + local under = pointed_thing.under + local node = minetest.get_node(under) + local udef = minetest.registered_nodes[node.name] + if udef and udef.on_rightclick and + not (placer and placer:is_player() and + placer:get_player_control().sneak) then + return udef.on_rightclick(under, node, placer, itemstack, + pointed_thing) or itemstack + end + + if pointed_thing.type ~= "node" then + return + end + if carts:is_rail(pointed_thing.under) then + minetest.add_entity(pointed_thing.under, "carts:cart") + elseif carts:is_rail(pointed_thing.above) then + minetest.add_entity(pointed_thing.above, "carts:cart") + else + return + end + + minetest.sound_play({name = "default_place_node_metal", gain = 0.5}, + {pos = pointed_thing.above}, true) + + if not minetest.is_creative_enabled(placer:get_player_name()) then + itemstack:take_item() + end + return itemstack + end, +}) + +minetest.register_craft({ + output = "carts:cart", + recipe = { + {"default:steel_ingot", "", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + }, +}) diff --git a/mods/carts/functions.lua b/mods/carts/functions.lua new file mode 100644 index 00000000..36b7e129 --- /dev/null +++ b/mods/carts/functions.lua @@ -0,0 +1,252 @@ +function carts:get_sign(z) + if z == 0 then + return 0 + else + return z / math.abs(z) + end +end + +function carts:manage_attachment(player, obj) + if not player then + return + end + local status = obj ~= nil + local player_name = player:get_player_name() + if obj and player:get_attach() == obj then + return + end + player_api.player_attached[player_name] = status + + if status then + player:set_attach(obj, "", {x=0, y=-4.5, z=0}, {x=0, y=0, z=0}) + player:set_eye_offset({x=0, y=-4, z=0},{x=0, y=-4, z=0}) + + -- player_api does not update the animation + -- when the player is attached, reset to default animation + player_api.set_animation(player, "stand") + else + player:set_detach() + player:set_eye_offset({x=0, y=0, z=0},{x=0, y=0, z=0}) + end +end + +function carts:velocity_to_dir(v) + if math.abs(v.x) > math.abs(v.z) then + return {x=carts:get_sign(v.x), y=carts:get_sign(v.y), z=0} + else + return {x=0, y=carts:get_sign(v.y), z=carts:get_sign(v.z)} + end +end + +function carts:is_rail(pos, railtype) + local node = minetest.get_node(pos).name + if node == "ignore" then + local vm = minetest.get_voxel_manip() + local emin, emax = vm:read_from_map(pos, pos) + local area = VoxelArea:new{ + MinEdge = emin, + MaxEdge = emax, + } + local data = vm:get_data() + local vi = area:indexp(pos) + node = minetest.get_name_from_content_id(data[vi]) + end + if minetest.get_item_group(node, "rail") == 0 then + return false + end + if not railtype then + return true + end + return minetest.get_item_group(node, "connect_to_raillike") == railtype +end + +function carts:check_front_up_down(pos, dir_, check_up, railtype) + local dir = vector.new(dir_) + local cur + + -- Front + dir.y = 0 + cur = vector.add(pos, dir) + if carts:is_rail(cur, railtype) then + return dir + end + -- Up + if check_up then + dir.y = 1 + cur = vector.add(pos, dir) + if carts:is_rail(cur, railtype) then + return dir + end + end + -- Down + dir.y = -1 + cur = vector.add(pos, dir) + if carts:is_rail(cur, railtype) then + return dir + end + return nil +end + +function carts:get_rail_direction(pos_, dir, ctrl, old_switch, railtype) + local pos = vector.round(pos_) + local cur + local left_check, right_check = true, true + + -- Check left and right + local left = {x=0, y=0, z=0} + local right = {x=0, y=0, z=0} + if dir.z ~= 0 and dir.x == 0 then + left.x = -dir.z + right.x = dir.z + elseif dir.x ~= 0 and dir.z == 0 then + left.z = dir.x + right.z = -dir.x + end + + local straight_priority = ctrl and dir.y ~= 0 + + -- Normal, to disallow rail switching up- & downhill + if straight_priority then + cur = self:check_front_up_down(pos, dir, true, railtype) + if cur then + return cur + end + end + + if ctrl then + if old_switch == 1 then + left_check = false + elseif old_switch == 2 then + right_check = false + end + if ctrl.left and left_check then + cur = self:check_front_up_down(pos, left, false, railtype) + if cur then + return cur, 1 + end + left_check = false + end + if ctrl.right and right_check then + cur = self:check_front_up_down(pos, right, false, railtype) + if cur then + return cur, 2 + end + right_check = true + end + end + + -- Normal + if not straight_priority then + cur = self:check_front_up_down(pos, dir, true, railtype) + if cur then + return cur + end + end + + -- Left, if not already checked + if left_check then + cur = carts:check_front_up_down(pos, left, false, railtype) + if cur then + return cur + end + end + + -- Right, if not already checked + if right_check then + cur = carts:check_front_up_down(pos, right, false, railtype) + if cur then + return cur + end + end + + -- Backwards + if not old_switch then + cur = carts:check_front_up_down(pos, { + x = -dir.x, + y = dir.y, + z = -dir.z + }, true, railtype) + if cur then + return cur + end + end + + return {x=0, y=0, z=0} +end + +function carts:pathfinder(pos_, old_pos, old_dir, distance, ctrl, + pf_switch, railtype) + + local pos = vector.round(pos_) + if vector.equals(old_pos, pos) then + return + end + + local pf_pos = vector.round(old_pos) + local pf_dir = vector.new(old_dir) + distance = math.min(carts.path_distance_max, + math.floor(distance + 1)) + + for i = 1, distance do + pf_dir, pf_switch = self:get_rail_direction( + pf_pos, pf_dir, ctrl, pf_switch or 0, railtype) + + if vector.equals(pf_dir, {x=0, y=0, z=0}) then + -- No way forwards + return pf_pos, pf_dir + end + + pf_pos = vector.add(pf_pos, pf_dir) + + if vector.equals(pf_pos, pos) then + -- Success! Cart moved on correctly + return + end + end + -- Not found. Put cart to predicted position + return pf_pos, pf_dir +end + +function carts:register_rail(name, def_overwrite, railparams) + local def = { + drawtype = "raillike", + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, + }, + sounds = default.node_sound_metal_defaults() + } + for k, v in pairs(def_overwrite) do + def[k] = v + end + if not def.inventory_image then + def.wield_image = def.tiles[1] + def.inventory_image = def.tiles[1] + end + + if railparams then + carts.railparams[name] = table.copy(railparams) + end + + minetest.register_node(name, def) +end + +function carts:get_rail_groups(additional_groups) + -- Get the default rail groups and add more when a table is given + local groups = { + dig_immediate = 2, + attached_node = 1, + rail = 1, + connect_to_raillike = minetest.raillike_group("rail") + } + if type(additional_groups) == "table" then + for k, v in pairs(additional_groups) do + groups[k] = v + end + end + return groups +end diff --git a/mods/carts/init.lua b/mods/carts/init.lua new file mode 100644 index 00000000..69d59d9f --- /dev/null +++ b/mods/carts/init.lua @@ -0,0 +1,28 @@ +-- carts/init.lua + +-- Load support for MT game translation. +local S = minetest.get_translator("carts") + +carts = {} +carts.modpath = minetest.get_modpath("carts") +carts.railparams = {} +carts.get_translator = S + +-- Maximal speed of the cart in m/s (min = -1) +carts.speed_max = 7 +-- Set to -1 to disable punching the cart from inside (min = -1) +carts.punch_speed_max = 5 +-- Maximal distance for the path correction (for dtime peaks) +carts.path_distance_max = 3 + + +dofile(carts.modpath.."/functions.lua") +dofile(carts.modpath.."/rails.lua") +dofile(carts.modpath.."/cart_entity.lua") + +-- Register rails as dungeon loot +if minetest.global_exists("dungeon_loot") then + dungeon_loot.register({ + name = "carts:rail", chance = 0.35, count = {1, 6} + }) +end diff --git a/mods/carts/license.txt b/mods/carts/license.txt new file mode 100644 index 00000000..6c5beb47 --- /dev/null +++ b/mods/carts/license.txt @@ -0,0 +1,54 @@ + +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2012-2016 PilzAdam +Copyright (C) 2014-2016 SmallJoker +Copyright (C) 2012-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media +----------------- + +CC-0, see: https://creativecommons.org/share-your-work/public-domain/cc0/, except +if other license is mentioned. + + +Authors +--------- +Originally from PixelBOX (Gambit): + carts_cart_side.png + carts_cart_top.png + carts_cart_front.png* + carts_cart.png* + +sofar + stujones11: + carts_cart.b3d and carts_cart.blend + +hexafraction, modified by sofar + carts_rail_*.png + +http://www.freesound.org/people/YleArkisto/sounds/253159/ - YleArkisto - CC-BY-3.0 + carts_cart_moving.*.ogg diff --git a/mods/carts/locale/carts.de.tr b/mods/carts/locale/carts.de.tr new file mode 100644 index 00000000..89a33ac3 --- /dev/null +++ b/mods/carts/locale/carts.de.tr @@ -0,0 +1,6 @@ +# textdomain: carts +Cart=Lore +(Sneak+Click to pick up)=(Schleichen u. Klicken zum Aufheben) +Rail=Schiene +Powered Rail=Antriebsschiene +Brake Rail=Bremsschiene diff --git a/mods/carts/locale/carts.eo.tr b/mods/carts/locale/carts.eo.tr new file mode 100644 index 00000000..939e542e --- /dev/null +++ b/mods/carts/locale/carts.eo.tr @@ -0,0 +1,6 @@ +# textdomain: carts +Cart=Ĉaro +(Sneak+Click to pick up)=(Ŝteliri+Alklaki por reprini) +Rail=Relo +Powered Rail=Elektra Relo +Brake Rail=Bremsa Relo diff --git a/mods/carts/locale/carts.es.tr b/mods/carts/locale/carts.es.tr new file mode 100644 index 00000000..c0857a1b --- /dev/null +++ b/mods/carts/locale/carts.es.tr @@ -0,0 +1,6 @@ +# textdomain: carts +Cart=Vagoneta +(Sneak+Click to pick up)=(Agacharse+Clic para recoger) +Rail=Raíl +Powered Rail=Raíl energizado +Brake Rail=Raíl de frenado diff --git a/mods/carts/locale/carts.fr.tr b/mods/carts/locale/carts.fr.tr new file mode 100644 index 00000000..b092f14d --- /dev/null +++ b/mods/carts/locale/carts.fr.tr @@ -0,0 +1,6 @@ +# textdomain: carts +Cart=Chariot +(Sneak+Click to pick up)=(Se baisser + clic pour ramasser) +Rail=Rail +Powered Rail=Rail de traction +Brake Rail=Rail de freinage diff --git a/mods/carts/locale/carts.id.tr b/mods/carts/locale/carts.id.tr new file mode 100644 index 00000000..ce0db926 --- /dev/null +++ b/mods/carts/locale/carts.id.tr @@ -0,0 +1,6 @@ +# textdomain: carts +Cart=Kereta +(Sneak+Click to pick up)=(Menyelinap + Klik untuk ambil) +Rail=Rel +Powered Rail=Rel Bertenaga +Brake Rail=Rel Rem diff --git a/mods/carts/locale/carts.it.tr b/mods/carts/locale/carts.it.tr new file mode 100644 index 00000000..c28e403e --- /dev/null +++ b/mods/carts/locale/carts.it.tr @@ -0,0 +1,6 @@ +# textdomain: carts +Cart=Vagone +(Sneak+Click to pick up)=(Strisciare+Click per raccoglierlo) +Rail=Binario +Powered Rail=Binario alimentato +Brake Rail=Binario freno diff --git a/mods/carts/locale/carts.ja.tr b/mods/carts/locale/carts.ja.tr new file mode 100644 index 00000000..30c14ce2 --- /dev/null +++ b/mods/carts/locale/carts.ja.tr @@ -0,0 +1,6 @@ +# textdomain: carts +Cart=トロッコ +(Sneak+Click to pick up)=(スニークキーとクリックで乗ります) +Rail=レール +Powered Rail=パワードレール +Brake Rail=ブレーキレール diff --git a/mods/carts/locale/carts.jbo.tr b/mods/carts/locale/carts.jbo.tr new file mode 100644 index 00000000..b48c5423 --- /dev/null +++ b/mods/carts/locale/carts.jbo.tr @@ -0,0 +1,6 @@ +# textdomain: carts +Cart=lo carce +(Sneak+Click to pick up)=to lo nu dzibi'o je cu samxa'e te cabra cu tadji lo nu lebna toi +Rail=lo teryre'e +Powered Rail=lo se dikca teryre'e +Brake Rail=lo terjabre teryre'e diff --git a/mods/carts/locale/carts.ms.tr b/mods/carts/locale/carts.ms.tr new file mode 100644 index 00000000..e8944e9a --- /dev/null +++ b/mods/carts/locale/carts.ms.tr @@ -0,0 +1,6 @@ +# textdomain: carts +Cart=Pedati +(Sneak+Click to pick up)=(Selinap+Klik untuk ambil balik) +Rail=Landasan +Powered Rail=Landasan Berkuasa +Brake Rail=Landasan Brek diff --git a/mods/carts/locale/carts.pl.tr b/mods/carts/locale/carts.pl.tr new file mode 100644 index 00000000..d0cb8792 --- /dev/null +++ b/mods/carts/locale/carts.pl.tr @@ -0,0 +1,6 @@ +# textdomain: carts +Cart=Wagonik +(Sneak+Click to pick up)=(Skradanie+Naciśnij aby zebrać) +Rail=Tory +Powered Rail=Napędzane tory +Brake Rail=Hamujące tory diff --git a/mods/carts/locale/carts.pt_BR.tr b/mods/carts/locale/carts.pt_BR.tr new file mode 100644 index 00000000..b92f91ea --- /dev/null +++ b/mods/carts/locale/carts.pt_BR.tr @@ -0,0 +1,6 @@ +# textdomain: carts +Cart=Carrinho +(Sneak+Click to pick up)=(Esgueirar + Clique para pegar) +Rail=Trilho +Powered Rail=Trilho Energizado +Brake Rail=Trilho de Freio diff --git a/mods/carts/locale/carts.ru.tr b/mods/carts/locale/carts.ru.tr new file mode 100644 index 00000000..9fc60ce3 --- /dev/null +++ b/mods/carts/locale/carts.ru.tr @@ -0,0 +1,6 @@ +# textdomain: carts +Cart=Вагонетка +(Sneak+Click to pick up)=(Пригнитесь и кликните по вагонетке, чтобы забрать) +Rail=Рельсы +Powered Rail=Запитанные рельсы +Brake Rail=Тормозящие рельсы diff --git a/mods/carts/locale/carts.sk.tr b/mods/carts/locale/carts.sk.tr new file mode 100644 index 00000000..6303a49b --- /dev/null +++ b/mods/carts/locale/carts.sk.tr @@ -0,0 +1,6 @@ +# textdomain: carts +Cart=Vozík +(Sneak+Click to pick up)=(Zakrádanie sa + Klik pre zdvihnutie) +Rail=Koľajnica +Powered Rail=Koľajnica s pohonom +Brake Rail=Brzdná koľajnica diff --git a/mods/carts/locale/carts.sv.tr b/mods/carts/locale/carts.sv.tr new file mode 100644 index 00000000..0521ca85 --- /dev/null +++ b/mods/carts/locale/carts.sv.tr @@ -0,0 +1,6 @@ +# textdomain: carts +Cart=Vagn +(Sneak+Click to pick up)=(Shift+Klicka för att plocka upp) +Rail=Räls +Powered Rail=Aktiverad räls +Brake Rail=Bromsräls diff --git a/mods/carts/locale/carts.uk.tr b/mods/carts/locale/carts.uk.tr new file mode 100644 index 00000000..2b236c54 --- /dev/null +++ b/mods/carts/locale/carts.uk.tr @@ -0,0 +1,6 @@ +# textdomain: carts +Cart=Вагонетка +(Sneak+Click to pick up)=(Пригніться та клікніть по вагонетці, щоб забрати) +Rail=Рейки +Powered Rail=Задіяні Рейки +Brake Rail=Гальмівні Рейки diff --git a/mods/carts/locale/carts.zh_CN.tr b/mods/carts/locale/carts.zh_CN.tr new file mode 100644 index 00000000..953cdefc --- /dev/null +++ b/mods/carts/locale/carts.zh_CN.tr @@ -0,0 +1,6 @@ +# textdomain: carts +Cart=矿车 +(Sneak+Click to pick up)=(潜行+单击以捡起) +Rail=铁轨 +Powered Rail=动力铁轨 +Brake Rail=制动铁轨 diff --git a/mods/carts/locale/carts.zh_TW.tr b/mods/carts/locale/carts.zh_TW.tr new file mode 100644 index 00000000..f6300d4a --- /dev/null +++ b/mods/carts/locale/carts.zh_TW.tr @@ -0,0 +1,6 @@ +# textdomain: carts +Cart=礦車 +(Sneak+Click to pick up)=(潛行+單擊以撿起) +Rail=鐵軌 +Powered Rail=動力鐵軌 +Brake Rail=制動鐵軌 diff --git a/mods/carts/locale/template.txt b/mods/carts/locale/template.txt new file mode 100644 index 00000000..a67d95fd --- /dev/null +++ b/mods/carts/locale/template.txt @@ -0,0 +1,6 @@ +# textdomain: carts +Cart= +(Sneak+Click to pick up)= +Rail= +Powered Rail= +Brake Rail= diff --git a/mods/carts/mod.conf b/mods/carts/mod.conf new file mode 100644 index 00000000..0eab35c3 --- /dev/null +++ b/mods/carts/mod.conf @@ -0,0 +1,4 @@ +name = carts +description = Carts (formerly boost_cart) +depends = default, player_api +optional_depends = dungeon_loot diff --git a/mods/carts/models/carts_cart.b3d b/mods/carts/models/carts_cart.b3d new file mode 100644 index 00000000..b8b7c3a1 Binary files /dev/null and b/mods/carts/models/carts_cart.b3d differ diff --git a/mods/carts/models/carts_cart.blend b/mods/carts/models/carts_cart.blend new file mode 100644 index 00000000..3446fb15 Binary files /dev/null and b/mods/carts/models/carts_cart.blend differ diff --git a/mods/carts/rails.lua b/mods/carts/rails.lua new file mode 100644 index 00000000..8bd2ba1e --- /dev/null +++ b/mods/carts/rails.lua @@ -0,0 +1,64 @@ +-- carts/rails.lua + +-- support for MT game translation. +local S = carts.get_translator + +carts:register_rail("carts:rail", { + description = S("Rail"), + tiles = { + "carts_rail_straight.png", "carts_rail_curved.png", + "carts_rail_t_junction.png", "carts_rail_crossing.png" + }, + inventory_image = "carts_rail_straight.png", + wield_image = "carts_rail_straight.png", + groups = carts:get_rail_groups(), +}, {}) + +minetest.register_craft({ + output = "carts:rail 18", + recipe = { + {"default:steel_ingot", "group:wood", "default:steel_ingot"}, + {"default:steel_ingot", "", "default:steel_ingot"}, + {"default:steel_ingot", "group:wood", "default:steel_ingot"}, + } +}) + +minetest.register_alias("default:rail", "carts:rail") + + +carts:register_rail("carts:powerrail", { + description = S("Powered Rail"), + tiles = { + "carts_rail_straight_pwr.png", "carts_rail_curved_pwr.png", + "carts_rail_t_junction_pwr.png", "carts_rail_crossing_pwr.png" + }, + groups = carts:get_rail_groups(), +}, {acceleration = 5}) + +minetest.register_craft({ + output = "carts:powerrail 18", + recipe = { + {"default:steel_ingot", "group:wood", "default:steel_ingot"}, + {"default:steel_ingot", "default:mese_crystal", "default:steel_ingot"}, + {"default:steel_ingot", "group:wood", "default:steel_ingot"}, + } +}) + + +carts:register_rail("carts:brakerail", { + description = S("Brake Rail"), + tiles = { + "carts_rail_straight_brk.png", "carts_rail_curved_brk.png", + "carts_rail_t_junction_brk.png", "carts_rail_crossing_brk.png" + }, + groups = carts:get_rail_groups(), +}, {acceleration = -3}) + +minetest.register_craft({ + output = "carts:brakerail 18", + recipe = { + {"default:steel_ingot", "group:wood", "default:steel_ingot"}, + {"default:steel_ingot", "default:coal_lump", "default:steel_ingot"}, + {"default:steel_ingot", "group:wood", "default:steel_ingot"}, + } +}) diff --git a/mods/carts/sounds/carts_cart_moving.1.ogg b/mods/carts/sounds/carts_cart_moving.1.ogg new file mode 100644 index 00000000..869e765b Binary files /dev/null and b/mods/carts/sounds/carts_cart_moving.1.ogg differ diff --git a/mods/carts/sounds/carts_cart_moving.2.ogg b/mods/carts/sounds/carts_cart_moving.2.ogg new file mode 100644 index 00000000..b4cc5084 Binary files /dev/null and b/mods/carts/sounds/carts_cart_moving.2.ogg differ diff --git a/mods/carts/sounds/carts_cart_moving.3.ogg b/mods/carts/sounds/carts_cart_moving.3.ogg new file mode 100644 index 00000000..e19a782d Binary files /dev/null and b/mods/carts/sounds/carts_cart_moving.3.ogg differ diff --git a/mods/carts/textures/carts_cart.png b/mods/carts/textures/carts_cart.png new file mode 100644 index 00000000..dd6c88cc Binary files /dev/null and b/mods/carts/textures/carts_cart.png differ diff --git a/mods/carts/textures/carts_cart_front.png b/mods/carts/textures/carts_cart_front.png new file mode 100644 index 00000000..0b3015be Binary files /dev/null and b/mods/carts/textures/carts_cart_front.png differ diff --git a/mods/carts/textures/carts_cart_side.png b/mods/carts/textures/carts_cart_side.png new file mode 100644 index 00000000..69b7fdd2 Binary files /dev/null and b/mods/carts/textures/carts_cart_side.png differ diff --git a/mods/carts/textures/carts_cart_top.png b/mods/carts/textures/carts_cart_top.png new file mode 100644 index 00000000..89594837 Binary files /dev/null and b/mods/carts/textures/carts_cart_top.png differ diff --git a/mods/carts/textures/carts_rail_crossing.png b/mods/carts/textures/carts_rail_crossing.png new file mode 100644 index 00000000..99dab9e4 Binary files /dev/null and b/mods/carts/textures/carts_rail_crossing.png differ diff --git a/mods/carts/textures/carts_rail_crossing_brk.png b/mods/carts/textures/carts_rail_crossing_brk.png new file mode 100644 index 00000000..ae71d7e4 Binary files /dev/null and b/mods/carts/textures/carts_rail_crossing_brk.png differ diff --git a/mods/carts/textures/carts_rail_crossing_pwr.png b/mods/carts/textures/carts_rail_crossing_pwr.png new file mode 100644 index 00000000..fc57b08a Binary files /dev/null and b/mods/carts/textures/carts_rail_crossing_pwr.png differ diff --git a/mods/carts/textures/carts_rail_curved.png b/mods/carts/textures/carts_rail_curved.png new file mode 100644 index 00000000..cb1beac2 Binary files /dev/null and b/mods/carts/textures/carts_rail_curved.png differ diff --git a/mods/carts/textures/carts_rail_curved_brk.png b/mods/carts/textures/carts_rail_curved_brk.png new file mode 100644 index 00000000..cff2a30c Binary files /dev/null and b/mods/carts/textures/carts_rail_curved_brk.png differ diff --git a/mods/carts/textures/carts_rail_curved_pwr.png b/mods/carts/textures/carts_rail_curved_pwr.png new file mode 100644 index 00000000..2cd0770f Binary files /dev/null and b/mods/carts/textures/carts_rail_curved_pwr.png differ diff --git a/mods/carts/textures/carts_rail_straight.png b/mods/carts/textures/carts_rail_straight.png new file mode 100644 index 00000000..764333b7 Binary files /dev/null and b/mods/carts/textures/carts_rail_straight.png differ diff --git a/mods/carts/textures/carts_rail_straight_brk.png b/mods/carts/textures/carts_rail_straight_brk.png new file mode 100644 index 00000000..cea7b1b3 Binary files /dev/null and b/mods/carts/textures/carts_rail_straight_brk.png differ diff --git a/mods/carts/textures/carts_rail_straight_pwr.png b/mods/carts/textures/carts_rail_straight_pwr.png new file mode 100644 index 00000000..764fa611 Binary files /dev/null and b/mods/carts/textures/carts_rail_straight_pwr.png differ diff --git a/mods/carts/textures/carts_rail_t_junction.png b/mods/carts/textures/carts_rail_t_junction.png new file mode 100644 index 00000000..0f3fd25a Binary files /dev/null and b/mods/carts/textures/carts_rail_t_junction.png differ diff --git a/mods/carts/textures/carts_rail_t_junction_brk.png b/mods/carts/textures/carts_rail_t_junction_brk.png new file mode 100644 index 00000000..5905d011 Binary files /dev/null and b/mods/carts/textures/carts_rail_t_junction_brk.png differ diff --git a/mods/carts/textures/carts_rail_t_junction_pwr.png b/mods/carts/textures/carts_rail_t_junction_pwr.png new file mode 100644 index 00000000..56565553 Binary files /dev/null and b/mods/carts/textures/carts_rail_t_junction_pwr.png differ diff --git a/mods/caverealms b/mods/caverealms new file mode 160000 index 00000000..dfc42637 --- /dev/null +++ b/mods/caverealms @@ -0,0 +1 @@ +Subproject commit dfc4263715d57da1f7a44d3616fbe047b0acad3e diff --git a/mods/chakram b/mods/chakram new file mode 160000 index 00000000..0a6e184f --- /dev/null +++ b/mods/chakram @@ -0,0 +1 @@ +Subproject commit 0a6e184f395d4e01dbeecee6e53132362765201a diff --git a/mods/character_creator b/mods/character_creator new file mode 160000 index 00000000..65a15d72 --- /dev/null +++ b/mods/character_creator @@ -0,0 +1 @@ +Subproject commit 65a15d720f4f216379a8e91421528efc1c51f151 diff --git a/mods/chat3 b/mods/chat3 new file mode 160000 index 00000000..3c5e3c4b --- /dev/null +++ b/mods/chat3 @@ -0,0 +1 @@ +Subproject commit 3c5e3c4b4ca0d148f8b116da2af1d09334217893 diff --git a/mods/christmas_craft b/mods/christmas_craft new file mode 160000 index 00000000..ecec383b --- /dev/null +++ b/mods/christmas_craft @@ -0,0 +1 @@ +Subproject commit ecec383b57d4374fdd6cd044550408aec7c3af06 diff --git a/mods/city_block b/mods/city_block new file mode 160000 index 00000000..94a99af8 --- /dev/null +++ b/mods/city_block @@ -0,0 +1 @@ +Subproject commit 94a99af86f04fb4e91efceb420883aefce093daf diff --git a/mods/cloaking b/mods/cloaking new file mode 160000 index 00000000..6ee6cd04 --- /dev/null +++ b/mods/cloaking @@ -0,0 +1 @@ +Subproject commit 6ee6cd042603747f66d5a9421357a41d5ba46f30 diff --git a/mods/colored_eggs b/mods/colored_eggs new file mode 160000 index 00000000..472cab43 --- /dev/null +++ b/mods/colored_eggs @@ -0,0 +1 @@ +Subproject commit 472cab43c2b55be2cec3932c52a3d5db924607b7 diff --git a/mods/columnia b/mods/columnia new file mode 160000 index 00000000..7a538423 --- /dev/null +++ b/mods/columnia @@ -0,0 +1 @@ +Subproject commit 7a5384239d0e86b126cd873c5585061fb8926add diff --git a/mods/cottages b/mods/cottages new file mode 160000 index 00000000..876ff2de --- /dev/null +++ b/mods/cottages @@ -0,0 +1 @@ +Subproject commit 876ff2de08bd2135b69040cebc6aaedf22fd4509 diff --git a/mods/creative/README.txt b/mods/creative/README.txt new file mode 100644 index 00000000..32e8d22a --- /dev/null +++ b/mods/creative/README.txt @@ -0,0 +1,17 @@ +Minetest Game mod: creative +=========================== +See license.txt for license information. + +Authors of source code +---------------------- +Originally by Perttu Ahola (celeron55) (MIT) +Jean-Patrick G. (kilbith) (MIT) + +Author of media (textures) +-------------------------- +paramat (CC BY-SA 3.0): +* creative_prev_icon.png +* creative_next_icon.png +* creative_search_icon.png +* creative_clear_icon.png +* creative_trash_icon.png derived from a texture by kilbith (CC BY-SA 3.0) diff --git a/mods/creative/init.lua b/mods/creative/init.lua new file mode 100644 index 00000000..f3134858 --- /dev/null +++ b/mods/creative/init.lua @@ -0,0 +1,101 @@ +-- creative/init.lua + +-- Load support for MT game translation. +local S = minetest.get_translator("creative") + +creative = {} +creative.get_translator = S + +local function update_sfinv(name) + minetest.after(0, function() + local player = minetest.get_player_by_name(name) + if player then + if sfinv.get_page(player):sub(1, 9) == "creative:" then + sfinv.set_page(player, sfinv.get_homepage_name(player)) + else + sfinv.set_player_inventory_formspec(player) + end + end + end) +end + +minetest.register_privilege("creative", { + description = S("Allow player to use creative inventory"), + give_to_singleplayer = false, + give_to_admin = false, + on_grant = update_sfinv, + on_revoke = update_sfinv, +}) + +-- Override the engine's creative mode function +local old_is_creative_enabled = minetest.is_creative_enabled + +function minetest.is_creative_enabled(name) + if name == "" then + return old_is_creative_enabled(name) + end + return minetest.check_player_privs(name, {creative = true}) or + old_is_creative_enabled(name) +end + +-- For backwards compatibility: +function creative.is_enabled_for(name) + return minetest.is_creative_enabled(name) +end + +dofile(minetest.get_modpath("creative") .. "/inventory.lua") + +if minetest.is_creative_enabled("") then + -- Dig time is modified according to difference (leveldiff) between tool + -- 'maxlevel' and node 'level'. Digtime is divided by the larger of + -- leveldiff and 1. + -- To speed up digging in creative, hand 'maxlevel' and 'digtime' have been + -- increased such that nodes of differing levels have an insignificant + -- effect on digtime. + local digtime = 42 + local caps = {times = {digtime, digtime, digtime}, uses = 0, maxlevel = 256} + + -- Override the hand tool + minetest.override_item("", { + range = 10, + tool_capabilities = { + full_punch_interval = 0.5, + max_drop_level = 3, + groupcaps = { + crumbly = caps, + cracky = caps, + snappy = caps, + choppy = caps, + oddly_breakable_by_hand = caps, + -- dig_immediate group doesn't use value 1. Value 3 is instant dig + dig_immediate = + {times = {[2] = digtime, [3] = 0}, uses = 0, maxlevel = 256}, + }, + damage_groups = {fleshy = 10}, + } + }) +end + +-- Unlimited node placement +minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack) + if placer and placer:is_player() then + return minetest.is_creative_enabled(placer:get_player_name()) + end +end) + +-- Don't pick up if the item is already in the inventory +local old_handle_node_drops = minetest.handle_node_drops +function minetest.handle_node_drops(pos, drops, digger) + if not digger or not digger:is_player() or + not minetest.is_creative_enabled(digger:get_player_name()) then + return old_handle_node_drops(pos, drops, digger) + end + local inv = digger:get_inventory() + if inv then + for _, item in ipairs(drops) do + if not inv:contains_item("main", item, true) then + inv:add_item("main", item) + end + end + end +end diff --git a/mods/creative/inventory.lua b/mods/creative/inventory.lua new file mode 100644 index 00000000..1f9a1d50 --- /dev/null +++ b/mods/creative/inventory.lua @@ -0,0 +1,256 @@ +-- creative/inventory.lua + +-- support for MT game translation. +local S = creative.get_translator + +local player_inventory = {} +local inventory_cache = {} + +local function init_creative_cache(items) + inventory_cache[items] = {} + local i_cache = inventory_cache[items] + + for name, def in pairs(items) do + if def.groups.not_in_creative_inventory ~= 1 and + def.description and def.description ~= "" then + i_cache[name] = def + end + end + table.sort(i_cache) + return i_cache +end + +function creative.init_creative_inventory(player) + local player_name = player:get_player_name() + player_inventory[player_name] = { + size = 0, + filter = "", + start_i = 0, + old_filter = nil, -- use only for caching in update_creative_inventory + old_content = nil + } + + minetest.create_detached_inventory("creative_" .. player_name, { + allow_move = function(inv, from_list, from_index, to_list, to_index, count, player2) + local name = player2 and player2:get_player_name() or "" + if not minetest.is_creative_enabled(name) or + to_list == "main" then + return 0 + end + return count + end, + allow_put = function(inv, listname, index, stack, player2) + return 0 + end, + allow_take = function(inv, listname, index, stack, player2) + local name = player2 and player2:get_player_name() or "" + if not minetest.is_creative_enabled(name) then + return 0 + end + return -1 + end, + on_move = function(inv, from_list, from_index, to_list, to_index, count, player2) + end, + on_take = function(inv, listname, index, stack, player2) + if stack and stack:get_count() > 0 then + minetest.log("action", player_name .. " takes " .. stack:get_name().. " from creative inventory") + end + end, + }, player_name) + + return player_inventory[player_name] +end + +local NO_MATCH = 999 +local function match(s, filter) + if filter == "" then + return 0 + end + if s:lower():find(filter, 1, true) then + return #s - #filter + end + return NO_MATCH +end + +local function description(def, lang_code) + local s = def.description + if lang_code then + s = minetest.get_translated_string(lang_code, s) + end + return s:gsub("\n.*", "") -- First line only +end + +function creative.update_creative_inventory(player_name, tab_content) + local inv = player_inventory[player_name] or + creative.init_creative_inventory(minetest.get_player_by_name(player_name)) + local player_inv = minetest.get_inventory({type = "detached", name = "creative_" .. player_name}) + + if inv.filter == inv.old_filter and tab_content == inv.old_content then + return + end + inv.old_filter = inv.filter + inv.old_content = tab_content + + local items = inventory_cache[tab_content] or init_creative_cache(tab_content) + + local lang + local player_info = minetest.get_player_information(player_name) + if player_info and player_info.lang_code ~= "" then + lang = player_info.lang_code + end + + local creative_list = {} + local order = {} + for name, def in pairs(items) do + local m = match(description(def), inv.filter) + if m > 0 then + m = math.min(m, match(description(def, lang), inv.filter)) + end + if m > 0 then + m = math.min(m, match(name, inv.filter)) + end + + if m < NO_MATCH then + creative_list[#creative_list+1] = name + -- Sort by match value first so closer matches appear earlier + order[name] = string.format("%02d", m) .. name + end + end + + table.sort(creative_list, function(a, b) return order[a] < order[b] end) + + player_inv:set_size("main", #creative_list) + player_inv:set_list("main", creative_list) + inv.size = #creative_list +end + +-- Create the trash field +local trash = minetest.create_detached_inventory("trash", { + -- Allow the stack to be placed and remove it in on_put() + -- This allows the creative inventory to restore the stack + allow_put = function(inv, listname, index, stack, player) + return stack:get_count() + end, + on_put = function(inv, listname) + inv:set_list(listname, {}) + end, +}) +trash:set_size("main", 1) + +creative.formspec_add = "" + +function creative.register_tab(name, title, items) + sfinv.register_page("creative:" .. name, { + title = title, + is_in_nav = function(self, player, context) + return minetest.is_creative_enabled(player:get_player_name()) + end, + get = function(self, player, context) + local player_name = player:get_player_name() + creative.update_creative_inventory(player_name, items) + local inv = player_inventory[player_name] + local pagenum = math.floor(inv.start_i / (4*8) + 1) + local pagemax = math.ceil(inv.size / (4*8)) + local esc = minetest.formspec_escape + return sfinv.make_formspec(player, context, + "label[5.8,4.15;" .. minetest.colorize("#FFFF00", tostring(pagenum)) .. " / " .. tostring(pagemax) .. "]" .. + [[ + image[4.08,4.2;0.8,0.8;creative_trash_icon.png] + listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF] + list[detached:trash;main;4.02,4.1;1,1;] + listring[] + image_button[5,4.05;0.8,0.8;creative_prev_icon.png;creative_prev;] + image_button[7.2,4.05;0.8,0.8;creative_next_icon.png;creative_next;] + image_button[2.63,4.05;0.8,0.8;creative_search_icon.png;creative_search;] + image_button[3.25,4.05;0.8,0.8;creative_clear_icon.png;creative_clear;] + ]] .. + "tooltip[creative_search;" .. esc(S("Search")) .. "]" .. + "tooltip[creative_clear;" .. esc(S("Reset")) .. "]" .. + "tooltip[creative_prev;" .. esc(S("Previous page")) .. "]" .. + "tooltip[creative_next;" .. esc(S("Next page")) .. "]" .. + "listring[current_player;main]" .. + "field_close_on_enter[creative_filter;false]" .. + "field[0.3,4.2;2.8,1.2;creative_filter;;" .. esc(inv.filter) .. "]" .. + "listring[detached:creative_" .. player_name .. ";main]" .. + "list[detached:creative_" .. player_name .. ";main;0,0;8,4;" .. tostring(inv.start_i) .. "]" .. + creative.formspec_add, true) + end, + on_enter = function(self, player, context) + local player_name = player:get_player_name() + local inv = player_inventory[player_name] + if inv then + inv.start_i = 0 + end + end, + on_player_receive_fields = function(self, player, context, fields) + local player_name = player:get_player_name() + local inv = player_inventory[player_name] + assert(inv) + + if fields.creative_clear then + inv.start_i = 0 + inv.filter = "" + sfinv.set_player_inventory_formspec(player, context) + elseif fields.creative_search or + fields.key_enter_field == "creative_filter" then + inv.start_i = 0 + inv.filter = fields.creative_filter:lower() + sfinv.set_player_inventory_formspec(player, context) + elseif not fields.quit then + local start_i = inv.start_i or 0 + + if fields.creative_prev then + start_i = start_i - 4*8 + if start_i < 0 then + start_i = inv.size - (inv.size % (4*8)) + if inv.size == start_i then + start_i = math.max(0, inv.size - (4*8)) + end + end + elseif fields.creative_next then + start_i = start_i + 4*8 + if start_i >= inv.size then + start_i = 0 + end + end + + inv.start_i = start_i + sfinv.set_player_inventory_formspec(player, context) + end + end + }) +end + +-- Sort registered items +local registered_nodes = {} +local registered_tools = {} +local registered_craftitems = {} + +minetest.register_on_mods_loaded(function() + for name, def in pairs(minetest.registered_items) do + local group = def.groups or {} + + local nogroup = not (group.node or group.tool or group.craftitem) + if group.node or (nogroup and minetest.registered_nodes[name]) then + registered_nodes[name] = def + elseif group.tool or (nogroup and minetest.registered_tools[name]) then + registered_tools[name] = def + elseif group.craftitem or (nogroup and minetest.registered_craftitems[name]) then + registered_craftitems[name] = def + end + end +end) + +creative.register_tab("all", S("All"), minetest.registered_items) +creative.register_tab("nodes", S("Nodes"), registered_nodes) +creative.register_tab("tools", S("Tools"), registered_tools) +creative.register_tab("craftitems", S("Items"), registered_craftitems) + +local old_homepage_name = sfinv.get_homepage_name +function sfinv.get_homepage_name(player) + if minetest.is_creative_enabled(player:get_player_name()) then + return "creative:all" + else + return old_homepage_name(player) + end +end diff --git a/mods/creative/license.txt b/mods/creative/license.txt new file mode 100644 index 00000000..50ff9c74 --- /dev/null +++ b/mods/creative/license.txt @@ -0,0 +1,61 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2012-2016 Perttu Ahola (celeron55) +Copyright (C) 2015-2016 Jean-Patrick G. (kilbith) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2016 Jean-Patrick G. (kilbith) +Copyright (C) 2018 paramat + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/creative/locale/creative.de.tr b/mods/creative/locale/creative.de.tr new file mode 100644 index 00000000..02b02777 --- /dev/null +++ b/mods/creative/locale/creative.de.tr @@ -0,0 +1,10 @@ +# textdomain: creative +Allow player to use creative inventory=Spieler erlauben, das Kreativinventar zu benutzen +Search=Suchen +Reset=Zurücksetzen +Previous page=Vorherige Seite +Next page=Nächste Seite +All=Alles +Nodes=Blöcke +Tools=Werkzeuge +Items=Gegenstände diff --git a/mods/creative/locale/creative.eo.tr b/mods/creative/locale/creative.eo.tr new file mode 100644 index 00000000..1bb4fdc0 --- /dev/null +++ b/mods/creative/locale/creative.eo.tr @@ -0,0 +1,10 @@ +# textdomain: creative +Allow player to use creative inventory=Permesi ke la ludanto uzu la kreeman stokon +Search=Serĉi +Reset=Rekomencigi +Previous page=Antaŭa paĝo +Next page=Sekva paĝo +All=Ĉio +Nodes=Nodoj +Tools=Iloj +Items=Objektoj diff --git a/mods/creative/locale/creative.es.tr b/mods/creative/locale/creative.es.tr new file mode 100644 index 00000000..f4e39a70 --- /dev/null +++ b/mods/creative/locale/creative.es.tr @@ -0,0 +1,10 @@ +# textdomain: creative +Allow player to use creative inventory=Permitir al jugador usar el inventario creativo +Search=Buscar +Reset=Resetear +Previous page=Pág. siguiente +Next page=Pág. anterior +All=Todos +Nodes=Nodos +Tools=Herramientas +Items=Objetos diff --git a/mods/creative/locale/creative.fr.tr b/mods/creative/locale/creative.fr.tr new file mode 100644 index 00000000..695c0a19 --- /dev/null +++ b/mods/creative/locale/creative.fr.tr @@ -0,0 +1,10 @@ +# textdomain: creative +Allow player to use creative inventory=Permettre aux joueurs d'utiliser l'inventaire du mode créatif +Search=Rechercher +Reset=Réinitialiser +Previous page=Page précédente +Next page=Page suivante +All=Tout +Nodes=Nœuds +Tools=Outils +Items=Article diff --git a/mods/creative/locale/creative.id.tr b/mods/creative/locale/creative.id.tr new file mode 100644 index 00000000..613ab137 --- /dev/null +++ b/mods/creative/locale/creative.id.tr @@ -0,0 +1,10 @@ +# textdomain: creative +Allow player to use creative inventory=Bolehkan pemain memakai inventaris kreatif +Search=Cari +Reset=Atur ulang +Previous page=Halaman sebelumnya +Next page=Halaman selanjutnya +All=Semua +Nodes=Nodus +Tools=Perkakas +Items=Barang diff --git a/mods/creative/locale/creative.it.tr b/mods/creative/locale/creative.it.tr new file mode 100644 index 00000000..32f540db --- /dev/null +++ b/mods/creative/locale/creative.it.tr @@ -0,0 +1,10 @@ +# textdomain: creative +Allow player to use creative inventory=Permette al giocatore di usare l'inventario creativo +Search=Cerca +Reset=Azzera +Previous page=Pagina precedente +Next page=Pagina successiva +All=Tutto +Nodes=Nodi +Tools=Strumenti +Items=Oggetti diff --git a/mods/creative/locale/creative.ja.tr b/mods/creative/locale/creative.ja.tr new file mode 100644 index 00000000..1c215bbf --- /dev/null +++ b/mods/creative/locale/creative.ja.tr @@ -0,0 +1,10 @@ +# textdomain: creative +Allow player to use creative inventory=プレーヤーにクリエイティブ インベントリーの使用を許可する +Search=検索 +Reset=リセット +Previous page=前のページ +Next page=次のページ +All=すべて +Nodes=ブロック +Tools=道具 +Items=アイテム diff --git a/mods/creative/locale/creative.jbo.tr b/mods/creative/locale/creative.jbo.tr new file mode 100644 index 00000000..6d0b7361 --- /dev/null +++ b/mods/creative/locale/creative.jbo.tr @@ -0,0 +1,10 @@ +# textdomain: creative +Allow player to use creative inventory=zifre le ka pilno le finti ke dacti liste +Search=sisku +Reset=kraga'igau +Previous page=lidne +Next page=selyli'e +All=ro dacti +Nodes=bliku +Tools=tutci +Items=dacti diff --git a/mods/creative/locale/creative.ms.tr b/mods/creative/locale/creative.ms.tr new file mode 100644 index 00000000..a2aef801 --- /dev/null +++ b/mods/creative/locale/creative.ms.tr @@ -0,0 +1,10 @@ +# textdomain: creative +Allow player to use creative inventory=Benarkan pemain menggunakan inventori kreatif +Search=Cari +Reset=Set semula +Previous page=Halaman sebelumnya +Next page=Halaman seterusnya +All=Semua +Nodes=Nod +Tools=Alatan +Items=Item diff --git a/mods/creative/locale/creative.pl.tr b/mods/creative/locale/creative.pl.tr new file mode 100644 index 00000000..7844cd69 --- /dev/null +++ b/mods/creative/locale/creative.pl.tr @@ -0,0 +1,10 @@ +# textdomain: creative +Allow player to use creative inventory=Zezwól graczom na używanie kreatywnego ekwipunku +Search=Wyszukaj +Reset=Zresetuj +Previous page=Poprzednia strona +Next page=Następna strona +All=Wszystko +Nodes=Bloki +Tools=Narzędzia +Items=Przedmioty diff --git a/mods/creative/locale/creative.pt_BR.tr b/mods/creative/locale/creative.pt_BR.tr new file mode 100644 index 00000000..c8a04bde --- /dev/null +++ b/mods/creative/locale/creative.pt_BR.tr @@ -0,0 +1,10 @@ +# textdomain: creative +Allow player to use creative inventory=Permitir o jogador usar o inventário criativo +Search=Pesquisar +Reset=Redefinir +Previous page=Página anterior +Next page=Próxima página +All=Todos +Nodes=Blocos +Tools=Ferramentas +Items=Itens diff --git a/mods/creative/locale/creative.ru.tr b/mods/creative/locale/creative.ru.tr new file mode 100644 index 00000000..f649dbc6 --- /dev/null +++ b/mods/creative/locale/creative.ru.tr @@ -0,0 +1,10 @@ +# textdomain: creative +Allow player to use creative inventory=Разрешить игроку использовать творческий инвентарь +Search=Поиск +Reset=Сброс +Previous page=Предыдущая страница +Next page=Следующая страница +All=Всё +Nodes=Ноды +Tools=Инструменты +Items=Предметы diff --git a/mods/creative/locale/creative.sk.tr b/mods/creative/locale/creative.sk.tr new file mode 100644 index 00000000..935c7803 --- /dev/null +++ b/mods/creative/locale/creative.sk.tr @@ -0,0 +1,10 @@ +# textdomain: creative +Allow player to use creative inventory=Povolí hráčovi použivať kreatívny inventár +Search=Hľadaj +Reset=Vrátiť späť +Previous page=Predchádzajúca stránka +Next page=Nasledujúca stránka +All=Všetko +Nodes=Kocky +Tools=Nástroje +Items=Veci diff --git a/mods/creative/locale/creative.sv.tr b/mods/creative/locale/creative.sv.tr new file mode 100644 index 00000000..a9a741f4 --- /dev/null +++ b/mods/creative/locale/creative.sv.tr @@ -0,0 +1,10 @@ +# textdomain: creative +Allow player to use creative inventory=Tillåt spelare att använda kreativa saker +Search=Sök +Reset=Återställ +Previous page=Förra sida +Next page=Nästa sida +All=Alla +Nodes=Noder +Tools=Verktyg +Items=Saker diff --git a/mods/creative/locale/creative.uk.tr b/mods/creative/locale/creative.uk.tr new file mode 100644 index 00000000..4e68caa2 --- /dev/null +++ b/mods/creative/locale/creative.uk.tr @@ -0,0 +1,10 @@ +# textdomain: creative +Allow player to use creative inventory=Дозволити гравцеві використати творчий інвентар +Search=Пошук +Reset=Скинути +Previous page=Попередня сторінка +Next page=Наступна сторінка +All=Все +Nodes=Ноди +Tools=Інструменти +Items=Предмети diff --git a/mods/creative/locale/creative.zh_CN.tr b/mods/creative/locale/creative.zh_CN.tr new file mode 100644 index 00000000..1ca424e5 --- /dev/null +++ b/mods/creative/locale/creative.zh_CN.tr @@ -0,0 +1,10 @@ +# textdomain: creative +Allow player to use creative inventory=允许玩家使用创造模式物品栏 +Search=搜索 +Reset=重置 +Previous page=上一页 +Next page=下一页 +All=所有 +Nodes=节点 +Tools=工具 +Items=物品 diff --git a/mods/creative/locale/creative.zh_TW.tr b/mods/creative/locale/creative.zh_TW.tr new file mode 100644 index 00000000..c5746d40 --- /dev/null +++ b/mods/creative/locale/creative.zh_TW.tr @@ -0,0 +1,10 @@ +# textdomain: creative +Allow player to use creative inventory=允許玩家使用創造模式物品欄 +Search=搜索 +Reset=重置 +Previous page=上一頁 +Next page=下一頁 +All=所有 +Nodes=節點 +Tools=工具 +Items=物品 diff --git a/mods/creative/locale/template.txt b/mods/creative/locale/template.txt new file mode 100644 index 00000000..3e79730c --- /dev/null +++ b/mods/creative/locale/template.txt @@ -0,0 +1,10 @@ +# textdomain: creative +Allow player to use creative inventory= +Search= +Reset= +Previous page= +Next page= +All= +Nodes= +Tools= +Items= diff --git a/mods/creative/mod.conf b/mods/creative/mod.conf new file mode 100644 index 00000000..8f3fcd9f --- /dev/null +++ b/mods/creative/mod.conf @@ -0,0 +1,4 @@ +name = creative +description = Minetest Game mod: creative +depends = sfinv +optional_depends = default diff --git a/mods/creative/textures/creative_clear_icon.png b/mods/creative/textures/creative_clear_icon.png new file mode 100644 index 00000000..ab421d98 Binary files /dev/null and b/mods/creative/textures/creative_clear_icon.png differ diff --git a/mods/creative/textures/creative_next_icon.png b/mods/creative/textures/creative_next_icon.png new file mode 100644 index 00000000..4a3637dc Binary files /dev/null and b/mods/creative/textures/creative_next_icon.png differ diff --git a/mods/creative/textures/creative_prev_icon.png b/mods/creative/textures/creative_prev_icon.png new file mode 100644 index 00000000..d5e3c27a Binary files /dev/null and b/mods/creative/textures/creative_prev_icon.png differ diff --git a/mods/creative/textures/creative_search_icon.png b/mods/creative/textures/creative_search_icon.png new file mode 100644 index 00000000..421b833e Binary files /dev/null and b/mods/creative/textures/creative_search_icon.png differ diff --git a/mods/creative/textures/creative_trash_icon.png b/mods/creative/textures/creative_trash_icon.png new file mode 100644 index 00000000..a0f6d237 Binary files /dev/null and b/mods/creative/textures/creative_trash_icon.png differ diff --git a/mods/ctravelnet b/mods/ctravelnet new file mode 160000 index 00000000..28d47391 --- /dev/null +++ b/mods/ctravelnet @@ -0,0 +1 @@ +Subproject commit 28d4739144ec1f9c654656849eea5f26c9a81b76 diff --git a/mods/death_messages b/mods/death_messages new file mode 160000 index 00000000..d6f359ed --- /dev/null +++ b/mods/death_messages @@ -0,0 +1 @@ +Subproject commit d6f359ed0c297b400f6aaa50e686b826b88f8200 diff --git a/mods/default/README.txt b/mods/default/README.txt new file mode 100644 index 00000000..949b9402 --- /dev/null +++ b/mods/default/README.txt @@ -0,0 +1,407 @@ +Minetest Game mod: default +========================== +See license.txt for license information. + +Authors of source code +---------------------- +Originally by celeron55, Perttu Ahola (LGPLv2.1+) +Various Minetest developers and contributors (LGPLv2.1+) + +The torch code was derived by sofar from the 'torches' mod by +BlockMen (LGPLv2.1+) + +Authors of media (textures, sounds, models and schematics) +---------------------------------------------------------- +Everything not listed in here: +celeron55, Perttu Ahola (CC BY-SA 3.0) + + +Textures +-------- +Cisoun's texture pack (CC BY-SA 3.0): + default_jungletree.png + default_lava.png + default_leaves.png + default_sapling.png + default_bush_sapling.png + default_stone.png + default_tree.png + default_tree_top.png + default_water.png + +RealBadAngel's animated water (CC BY-SA 3.0): + default_water_source_animated.png + default_water_flowing_animated.png + +VanessaE (CC BY-SA 3.0): + default_torch_animated.png + default_torch_on_ceiling_animated.png + default_torch_on_floor_animated.png + default_torch_on_floor.png + default_desert_sand.png + default_desert_stone.png + default_sand.png + default_mese_crystal.png + default_mese_crystal_fragment.png + +Calinou (CC BY-SA 3.0): + default_brick.png + default_papyrus.png + default_mineral_copper.png + +PilzAdam (CC BY-SA 3.0): + default_jungleleaves.png + default_junglesapling.png + default_obsidian_glass.png + default_obsidian_shard.png + default_mineral_gold.png + +jojoa1997 (CC BY-SA 3.0): + default_obsidian.png + +InfinityProject (CC BY-SA 3.0): + default_mineral_diamond.png + +Splizard (CC BY-SA 3.0): + default_pine_sapling.png + default_pine_needles.png + +Zeg9 (CC BY-SA 3.0): + default_coal_block.png + +paramat (CC BY-SA 3.0): + wieldhand.png -- Copied from character.png by Jordach (CC BY-SA 3.0) + default_pinetree.png + default_pinetree_top.png + default_pinewood.png + default_acacia_leaves.png + default_acacia_leaves_simple.png + default_acacia_sapling.png + default_acacia_bush_sapling.png + default_pine_bush_sapling.png + default_acacia_tree.png + default_acacia_tree_top.png + default_acacia_wood.png + default_acacia_bush_stem.png + default_bush_stem.png + default_pine_bush_stem.png + default_junglewood.png + default_jungletree_top.png + default_sandstone_brick.png + default_obsidian_brick.png + default_stone_brick.png + default_desert_stone_brick.png + default_sandstone_block.png + default_obsidian_block.png + default_stone_block.png + default_desert_stone_block.png + default_river_water.png + default_river_water_source_animated.png + default_river_water_flowing_animated.png + default_dry_grass.png + default_dry_grass_side.png + default_dry_grass_*.png + default_grass_side.png -- Derived from a texture by TumeniNodes (CC-BY-SA 3.0) + default_mese_block.png + default_silver_sand.png + default_mese_post_light_side.png + default_mese_post_light_side_dark.png + default_mese_post_light_top.png + default_silver_sandstone.png -- Derived from a texture by GreenXenith (CC-BY-SA 3.0) + default_silver_sandstone_brick.png -- Derived from a texture by GreenXenith (CC-BY-SA 3.0) + default_silver_sandstone_block.png -- Derived from a texture by GreenXenith (CC-BY-SA 3.0) + default_bookshelf_slot.png -- Derived from a texture by Gambit (CC-BY-SA 3.0) + default_marram_grass_*.png -- Derived from textures by TumeniNodes (CC-BY-SA 3.0) + default_emergent_jungle_sapling.png + default_permafrost.png -- Derived from a texture by Neuromancer (CC BY-SA 3.0) + default_stones.png -- Derived from a texture by sofar (CC0 1.0) + default_stones_side.png -- Derived from a texture by sofar (CC0 1.0) + default_moss.png + default_moss_side.png + default_fence_rail_acacia_wood + default_fence_rail_aspen_wood -- Derived from a texture by sofar (CC BY-SA 3.0) + default_fence_rail_junglewood + default_fence_rail_pine_wood + default_fence_rail_wood -- Derived from a texture by BlockMen (CC BY-SA 3.0) + gui_hotbar.png + gui_hotbar_selected.png + +TumeniNodes (CC BY-SA 3.0): + default_desert_cobble.png -- Derived from a texture by brunob.santos (CC BY-SA 3.0) + default_coniferous_litter.png + default_coniferous_litter_side.png + default_grass.png + default_dry_dirt.png + +BlockMen (CC BY-SA 3.0): + default_aspen_leaves.png -- Derived from Sofar's texture + default_wood.png + default_clay_brick.png + default_iron_ingot.png + default_gold_ingot.png + default_tool_steelsword.png + default_diamond.png + default_tool_*.png + default_lava_source_animated.png + default_lava_flowing_animated.png + default_stick.png + default_chest_front.png + default_chest_lock.png + default_chest_side.png + default_chest_top.png + default_mineral_mese.png + default_meselamp.png + gui_formbg.png + gui_furnace_arrow_bg.png + gui_furnace_arrow_fg.png + gui_hb_bg.png + +sofar (CC BY-SA 3.0): + default_aspen_sapling + default_aspen_tree + default_aspen_tree_top, derived from default_pine_tree_top (by paramat) + default_aspen_wood, derived from default_pine_wood (by paramat) + default_chest_inside + +sofar (CC0 1.0): + default_gravel.png -- Derived from Gambit's PixelBOX texture pack light gravel + +Neuromancer (CC BY-SA 3.0): + default_cobble.png, based on texture by Brane praefect + default_mossycobble.png, based on texture by Brane praefect + default_furnace_*.png + +Gambit (CC BY-SA 3.0): + default_bronze_ingot.png + default_copper_ingot.png + default_copper_lump.png + default_iron_lump.png + default_gold_lump.png + default_clay_lump.png + default_coal_lump.png + default_grass_*.png + default_paper.png + default_diamond_block.png + default_ladder_steel.png + default_sign_wall_wood.png + default_flint.png + default_snow.png + default_snow_side.png + default_snowball.png + default_book.png + +asl97 (CC BY-SA 3.0): + default_ice.png + +Pithydon (CC BY-SA 3.0) + default_coral_brown.png + default_coral_orange.png + default_coral_skeleton.png + +Ferk (CC0 1.0): + default_item_smoke.png + +npx (CC BY-SA 3.0): + default_rainforest_litter.png + default_rainforest_litter_side.png + +kaeza (CC-BY-SA 3.0): + default_desert_sandstone.png + default_desert_sandstone_brick.png + default_desert_sandstone_block.png + +kilbith (CC BY-SA 3.0): + default_steel_block.png + default_copper_block.png + default_bronze_block.png + default_gold_block.png + default_tin_block.png + default_mineral_tin.png + default_tin_ingot.png + default_tin_lump.png + +tobyplowy (CC BY-SA 3.0): + default_kelp.png + +CloudyProton (CC BY-SA 3.0): + default_book_written.png, based on default_book.png by Gambit + +Mossmanikin (CC BY-SA 3.0): + default_fern_*.png + +random-geek (CC BY-SA 3.0): + default_blueberries.png + default_blueberry_overlay.png + default_blueberry_bush_leaves.png, derived from default_bush_leaves (by paramat) + default_blueberry_bush_sapling.png + default_dirt.png -- Derived from a texture by Neuromancer (CC BY-SA 3.0) + +Krock (CC0 1.0): + default_glass.png + default_glass_detail.png + +Topywo (CC BY-SA 3.0) + default_coral_cyan.png + default_coral_green.png + default_coral_pink.png + +Extex101 (CC BY-SA 3.0) + default_large_cactus_seedling.png + default_dry_shrub.png -- Derived from the original texture by celeron55 + +An0n3m0us (CC BY-SA 3.0): + heart.png -- Derived from a texture by KevDoy (CC BY-SA 3.0) + bubble.png -- Derived from a texture by BlockMen (CC BY-SA 3.0) + + +Sounds +------ +Glass breaking sounds (CC BY 3.0): + 1: http://www.freesound.org/people/cmusounddesign/sounds/71947/ + 2: http://www.freesound.org/people/Tomlija/sounds/97669/ + 3: http://www.freesound.org/people/lsprice/sounds/88808/ + +Mito551 (sounds) (CC BY-SA 3.0): + default_dig_crumbly.*.ogg + default_dig_dig_immediate.ogg + default_dig_oddly_breakable_by_hand.ogg + default_dug_node.*.ogg + default_grass_footstep.1.ogg + default_grass_footstep.2.ogg + default_grass_footstep.3.ogg + default_gravel_footstep.*.ogg + default_place_node.*.ogg + default_place_node_hard.*.ogg + default_glass_footstep.ogg + default_wood_footstep.1.ogg + default_wood_footstep.2.ogg + default_dirt_footstep.1.ogg + default_dirt_footstep.2.ogg + default_glass_footstep.ogg + +Metal sounds: + default_dig_metal.ogg - yadronoff - CC-BY-3.0 + - https://www.freesound.org/people/yadronoff/sounds/320397/ + default_dug_metal.*.ogg - Iwan Gabovitch - qubodup - CC0 + - http://opengameart.org/users/qubodup + default_metal_footstep.*.ogg - (CC0 1.0) - CC0 1.0 + - https://freesound.org/people/mypantsfelldown/sounds/398937/ + default_place_node_metal.*.ogg - Ogrebane - CC0 + - http://opengameart.org/content/wood-and-metal-sound-effects-volume-2 + +Tool breaking sounds added by sofar: CC-BY-3.0 + default_tool_breaks.* - http://www.freesound.org/people/HerbertBoland/sounds/33206/ + +AGFX (CC BY 3.0): +https://www.freesound.org/people/AGFX/packs/1253/ + default_water_footstep.1.ogg + default_water_footstep.2.ogg + default_water_footstep.3.ogg + +blukotek (CC0 1.0): +https://www.freesound.org/people/blukotek/sounds/251660/ + default_dig_snappy.ogg + +Chests sounds added by sofar, derived of several files mixed together: + default_chest_open.ogg + default_chest_close.ogg + - http://www.freesound.org/people/Sevin7/sounds/269722/ CC0 + - http://www.freesound.org/people/Percy%20Duke/sounds/23448/ CC-BY-3.0 + - http://www.freesound.org/people/kingsamas/sounds/135576/ CC-BY-3.0 + - http://www.freesound.org/people/bulbastre/sounds/126887/ CC-BY-3.0 + - http://www.freesound.org/people/Yoyodaman234/sounds/183541/ CC0 + +Ryding (CC0 1.0): +http://freesound.org/people/Ryding/sounds/94337/ + default_snow_footstep.*.ogg + +Ferk (CC0 1.0): + default_item_smoke.ogg, based on a sound by http://opengameart.org/users/bart + +sonictechtonic (CC BY 3.0): +https://www.freesound.org/people/sonictechtonic/sounds/241872/ + player_damage.ogg + +Sheyvan (CC0 1.0): +https://freesound.org/people/Sheyvan/sounds/476113/ + default_dig_choppy.*.ogg + +lolamadeus (CC0 1.0): +https://freesound.org/people/lolamadeus/sounds/179341/ + default_gravel_dig.*.ogg + default_gravel_dug.*.ogg + +Benboncan (CC BY 3.0): +https://freesound.org/people/Benboncan/sounds/71823/ + default_dig_cracky.*.ogg + +Erdie (CC BY 3.0): +https://freesound.org/people/Erdie/sounds/41579/ + default_hard_footstep.*.ogg + +worthahep88 (CC0 1.0): +https://freesound.org/people/worthahep88/sounds/319224/ + default_sand_footstep.*.ogg + +dheming (CC BY 3.0): +https://freesound.org/people/dheming/sounds/268023/ + default_ice_dig.*.ogg + +InspectorJ (CC BY 3.0): +https://freesound.org/people/InspectorJ/sounds/416967/ + default_ice_footstep.*.ogg + +Angel_Perez_Grandi (CC BY 3.0): +https://freesound.org/people/Angel_Perez_Grandi/sounds/49190/ + default_ice_dug.ogg + +iankath (CC0 1.0) +https://freesound.org/people/iankath/sounds/173991/ + default_furnace_active.ogg + + +Models +------ +sofar (CC BY-SA 3.0): + chest_open.obj + torch_ceiling.obj + torch_floor.obj + torch_wall.obj + + +Schematics +---------- +paramat (CC BY-SA 3.0): + acacia_bush.mts + acacia_tree.mts + acacia_tree_from_sapling.mts + apple_tree.mts + apple_tree_from_sapling.mts + aspen_tree.mts + aspen_tree_from_sapling.mts + bush.mts + emergent_jungle_tree.mts + emergent_jungle_tree_from_sapling.mts + jungle_tree.mts + jungle_tree_from_sapling.mts + large_cactus.mts + papyrus.mts + pine_tree.mts + pine_tree_from_sapling.mts + snowy_pine_tree_from_sapling.mts + small_pine_tree.mts + small_pine_tree_from_sapling.mts + snowy_small_pine_tree_from_sapling.mts + +Shara RedCat (CC BY-SA 3.0): + acacia_log.mts + apple_log.mts + aspen_log.mts + jungle_log.mts + pine_log.mts + +TumeniNodes (CC BY-SA 3.0): + pine_bush.mts + +random-geek (CC BY-SA 3.0): + blueberry_bush.mts diff --git a/mods/legacy/init.lua b/mods/default/aliases.lua similarity index 65% rename from mods/legacy/init.lua rename to mods/default/aliases.lua index fa8f297f..c871a800 100644 --- a/mods/legacy/init.lua +++ b/mods/default/aliases.lua @@ -1,9 +1,7 @@ --- legacy (Minetest 0.4 mod) --- Provides as much backwards-compatibility as feasible +-- mods/default/aliases.lua --- --- Aliases to support loading 0.3 and old 0.4 worlds and inventories --- +-- Aliases to support loading worlds using nodes following the old naming convention +-- These can also be helpful when using chat commands, for example /giveme minetest.register_alias("stone", "default:stone") minetest.register_alias("stone_with_coal", "default:stone_with_coal") @@ -25,8 +23,9 @@ minetest.register_alias("papyrus", "default:papyrus") minetest.register_alias("bookshelf", "default:bookshelf") minetest.register_alias("glass", "default:glass") minetest.register_alias("wooden_fence", "default:fence_wood") -minetest.register_alias("rail", "default:rail") -minetest.register_alias("ladder", "default:ladder") +minetest.register_alias("rail", "carts:rail") +minetest.register_alias("ladder", "default:ladder_wood") +minetest.register_alias("default:ladder_wood", "default:ladder") minetest.register_alias("wood", "default:wood") minetest.register_alias("mese", "default:mese") minetest.register_alias("cloud", "default:cloud") @@ -35,15 +34,13 @@ minetest.register_alias("water_source", "default:water_source") minetest.register_alias("lava_flowing", "default:lava_flowing") minetest.register_alias("lava_source", "default:lava_source") minetest.register_alias("torch", "default:torch") -minetest.register_alias("sign_wall", "default:sign_wall") +minetest.register_alias("sign_wall", "default:sign_wall_wood") minetest.register_alias("furnace", "default:furnace") minetest.register_alias("chest", "default:chest") minetest.register_alias("locked_chest", "default:chest_locked") minetest.register_alias("cobble", "default:cobble") minetest.register_alias("mossycobble", "default:mossycobble") minetest.register_alias("steelblock", "default:steelblock") -minetest.register_alias("nyancat", "default:nyancat") -minetest.register_alias("nyancat_rainbow", "default:nyancat_rainbow") minetest.register_alias("sapling", "default:sapling") minetest.register_alias("apple", "default:apple") @@ -69,65 +66,14 @@ minetest.register_alias("lump_of_iron", "default:iron_lump") minetest.register_alias("lump_of_clay", "default:clay_lump") minetest.register_alias("steel_ingot", "default:steel_ingot") minetest.register_alias("clay_brick", "default:clay_brick") -minetest.register_alias("scorched_stuff", "default:scorched_stuff") +minetest.register_alias("snow", "default:snow") --- --- Old items --- +-- 'mese_block' was used for a while for the block form of mese +minetest.register_alias("default:mese_block", "default:mese") -minetest.register_craftitem(":rat", { - description = "Rat", - inventory_image = "rat.png", - on_drop = function(item, dropper, pos) - minetest.env:add_rat(pos) - item:take_item() - return item - end, - on_place = function(item, dropped, pointed) - pos = minetest.get_pointed_thing_position(pointed, true) - if pos ~= nil then - minetest.env:add_rat(pos) - item:take_item() - return item - end - end -}) +-- Aliases for corrected pine node names +minetest.register_alias("default:pinetree", "default:pine_tree") +minetest.register_alias("default:pinewood", "default:pine_wood") -minetest.register_craftitem(":cooked_rat", { - description = "Cooked rat", - inventory_image = "cooked_rat.png", - on_use = minetest.item_eat(6), -}) - -minetest.register_craftitem(":firefly", { - description = "Firefly", - inventory_image = "firefly.png", - groups = {not_in_creative_inventory=1}, - on_drop = function(item, dropper, pos) - minetest.env:add_firefly(pos) - item:take_item() - return item - end, - on_place = function(item, dropped, pointed) - pos = minetest.get_pointed_thing_position(pointed, true) - if pos ~= nil then - minetest.env:add_firefly(pos) - item:take_item() - return item - end - end -}) - -minetest.register_craft({ - type = "cooking", - output = "cooked_rat", - recipe = "rat", -}) - -minetest.register_craft({ - type = "cooking", - output = "scorched_stuff", - recipe = "cooked_rat", -}) - --- END +minetest.register_alias("default:ladder", "default:ladder_wood") +minetest.register_alias("default:sign_wall", "default:sign_wall_wood") diff --git a/mods/default/chests.lua b/mods/default/chests.lua new file mode 100644 index 00000000..585b5f7c --- /dev/null +++ b/mods/default/chests.lua @@ -0,0 +1,346 @@ +default.chest = {} + +-- support for MT game translation. +local S = default.get_translator + +function default.chest.get_chest_formspec(pos) + local spos = pos.x .. "," .. pos.y .. "," .. pos.z + local formspec = + "size[8,9]" .. + "list[nodemeta:" .. spos .. ";main;0,0.3;8,4;]" .. + "list[current_player;main;0,4.85;8,1;]" .. + "list[current_player;main;0,6.08;8,3;8]" .. + "listring[nodemeta:" .. spos .. ";main]" .. + "listring[current_player;main]" .. + default.get_hotbar_bg(0,4.85) + return formspec +end + +function default.chest.chest_lid_obstructed(pos) + local above = {x = pos.x, y = pos.y + 1, z = pos.z} + local def = minetest.registered_nodes[minetest.get_node(above).name] + -- allow ladders, signs, wallmounted things and torches to not obstruct + if def and + (def.drawtype == "airlike" or + def.drawtype == "signlike" or + def.drawtype == "torchlike" or + (def.drawtype == "nodebox" and def.paramtype2 == "wallmounted")) then + return false + end + return true +end + +function default.chest.chest_lid_close(pn) + local chest_open_info = default.chest.open_chests[pn] + local pos = chest_open_info.pos + local sound = chest_open_info.sound + local swap = chest_open_info.swap + + default.chest.open_chests[pn] = nil + for k, v in pairs(default.chest.open_chests) do + if v.pos.x == pos.x and v.pos.y == pos.y and v.pos.z == pos.z then + return true + end + end + + local node = minetest.get_node(pos) + minetest.after(0.2, minetest.swap_node, pos, { name = swap, + param2 = node.param2 }) + minetest.sound_play(sound, {gain = 0.3, pos = pos, + max_hear_distance = 10}, true) +end + +default.chest.open_chests = {} + +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname ~= "default:chest" then + return + end + if not player or not fields.quit then + return + end + local pn = player:get_player_name() + + if not default.chest.open_chests[pn] then + return + end + + default.chest.chest_lid_close(pn) + return true +end) + +minetest.register_on_leaveplayer(function(player) + local pn = player:get_player_name() + if default.chest.open_chests[pn] then + default.chest.chest_lid_close(pn) + end +end) + +function default.chest.register_chest(prefixed_name, d) + local name = prefixed_name:sub(1,1) == ':' and prefixed_name:sub(2,-1) or prefixed_name + local def = table.copy(d) + def.drawtype = "mesh" + def.visual = "mesh" + def.paramtype = "light" + def.paramtype2 = "facedir" + def.legacy_facedir_simple = true + def.is_ground_content = false + + if def.protected then + def.on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", S("Locked Chest")) + meta:set_string("owner", "") + local inv = meta:get_inventory() + inv:set_size("main", 8*4) + end + def.after_place_node = function(pos, placer) + local meta = minetest.get_meta(pos) + meta:set_string("owner", placer:get_player_name() or "") + meta:set_string("infotext", S("Locked Chest (owned by @1)", meta:get_string("owner"))) + end + def.can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") and + default.can_interact_with_node(player, pos) + end + def.allow_metadata_inventory_move = function(pos, from_list, from_index, + to_list, to_index, count, player) + if not default.can_interact_with_node(player, pos) then + return 0 + end + return count + end + def.allow_metadata_inventory_put = function(pos, listname, index, stack, player) + if not default.can_interact_with_node(player, pos) then + return 0 + end + return stack:get_count() + end + def.allow_metadata_inventory_take = function(pos, listname, index, stack, player) + if not default.can_interact_with_node(player, pos) then + return 0 + end + return stack:get_count() + end + def.on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + if not default.can_interact_with_node(clicker, pos) then + return itemstack + end + + minetest.sound_play(def.sound_open, {gain = 0.3, + pos = pos, max_hear_distance = 10}, true) + if not default.chest.chest_lid_obstructed(pos) then + minetest.swap_node(pos, + { name = name .. "_open", + param2 = node.param2 }) + end + minetest.after(0.2, minetest.show_formspec, + clicker:get_player_name(), + "default:chest", default.chest.get_chest_formspec(pos)) + default.chest.open_chests[clicker:get_player_name()] = { pos = pos, + sound = def.sound_close, swap = name } + end + def.on_blast = function() end + def.on_key_use = function(pos, player) + local secret = minetest.get_meta(pos):get_string("key_lock_secret") + local itemstack = player:get_wielded_item() + local key_meta = itemstack:get_meta() + + if itemstack:get_metadata() == "" then + return + end + + if key_meta:get_string("secret") == "" then + key_meta:set_string("secret", minetest.parse_json(itemstack:get_metadata()).secret) + itemstack:set_metadata("") + end + + if secret ~= key_meta:get_string("secret") then + return + end + + minetest.show_formspec( + player:get_player_name(), + "default:chest_locked", + default.chest.get_chest_formspec(pos) + ) + end + def.on_skeleton_key_use = function(pos, player, newsecret) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + local pn = player:get_player_name() + + -- verify placer is owner of lockable chest + if owner ~= pn then + minetest.record_protection_violation(pos, pn) + minetest.chat_send_player(pn, S("You do not own this chest.")) + return nil + end + + local secret = meta:get_string("key_lock_secret") + if secret == "" then + secret = newsecret + meta:set_string("key_lock_secret", secret) + end + + return secret, S("a locked chest"), owner + end + else + def.on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", S("Chest")) + local inv = meta:get_inventory() + inv:set_size("main", 8*4) + end + def.can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end + def.on_rightclick = function(pos, node, clicker) + minetest.sound_play(def.sound_open, {gain = 0.3, pos = pos, + max_hear_distance = 10}, true) + if not default.chest.chest_lid_obstructed(pos) then + minetest.swap_node(pos, { + name = name .. "_open", + param2 = node.param2 }) + end + minetest.after(0.2, minetest.show_formspec, + clicker:get_player_name(), + "default:chest", default.chest.get_chest_formspec(pos)) + default.chest.open_chests[clicker:get_player_name()] = { pos = pos, + sound = def.sound_close, swap = name } + end + def.on_blast = function(pos) + local drops = {} + default.get_inventory_drops(pos, "main", drops) + drops[#drops+1] = name + minetest.remove_node(pos) + return drops + end + end + + default.set_inventory_action_loggers(def, "chest") + + local def_opened = table.copy(def) + local def_closed = table.copy(def) + + def_opened.mesh = "chest_open.obj" + for i = 1, #def_opened.tiles do + if type(def_opened.tiles[i]) == "string" then + def_opened.tiles[i] = {name = def_opened.tiles[i], backface_culling = true} + elseif def_opened.tiles[i].backface_culling == nil then + def_opened.tiles[i].backface_culling = true + end + end + def_opened.drop = name + def_opened.groups.not_in_creative_inventory = 1 + def_opened.selection_box = { + type = "fixed", + fixed = { -1/2, -1/2, -1/2, 1/2, 3/16, 1/2 }, + } + def_opened.can_dig = function() + return false + end + def_opened.on_blast = function() end + + def_closed.mesh = nil + def_closed.drawtype = nil + def_closed.tiles[6] = def.tiles[5] -- swap textures around for "normal" + def_closed.tiles[5] = def.tiles[3] -- drawtype to make them match the mesh + def_closed.tiles[3] = def.tiles[3].."^[transformFX" + + minetest.register_node(prefixed_name, def_closed) + minetest.register_node(prefixed_name .. "_open", def_opened) + + -- convert old chests to this new variant + if name == "default:chest" or name == "default:chest_locked" then + minetest.register_lbm({ + label = "update chests to opening chests", + name = "default:upgrade_" .. name:sub(9,-1) .. "_v2", + nodenames = {name}, + action = function(pos, node) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", nil) + local inv = meta:get_inventory() + local list = inv:get_list("default:chest") + if list then + inv:set_size("main", 8*4) + inv:set_list("main", list) + inv:set_list("default:chest", nil) + end + end + }) + end +end + +default.chest.register_chest("default:chest", { + description = S("Chest"), + tiles = { + "default_chest_top.png", + "default_chest_top.png", + "default_chest_side.png", + "default_chest_side.png", + "default_chest_front.png", + "default_chest_inside.png" + }, + sounds = default.node_sound_wood_defaults(), + sound_open = "default_chest_open", + sound_close = "default_chest_close", + groups = {choppy = 2, oddly_breakable_by_hand = 2}, +}) + +default.chest.register_chest("default:chest_locked", { + description = S("Locked Chest"), + tiles = { + "default_chest_top.png", + "default_chest_top.png", + "default_chest_side.png", + "default_chest_side.png", + "default_chest_lock.png", + "default_chest_inside.png" + }, + sounds = default.node_sound_wood_defaults(), + sound_open = "default_chest_open", + sound_close = "default_chest_close", + groups = {choppy = 2, oddly_breakable_by_hand = 2}, + protected = true, +}) + +minetest.register_craft({ + output = "default:chest", + recipe = { + {"group:wood", "group:wood", "group:wood"}, + {"group:wood", "", "group:wood"}, + {"group:wood", "group:wood", "group:wood"}, + } +}) + +minetest.register_craft({ + output = "default:chest_locked", + recipe = { + {"group:wood", "group:wood", "group:wood"}, + {"group:wood", "default:steel_ingot", "group:wood"}, + {"group:wood", "group:wood", "group:wood"}, + } +}) + +minetest.register_craft( { + type = "shapeless", + output = "default:chest_locked", + recipe = {"default:chest", "default:steel_ingot"}, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:chest", + burntime = 30, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:chest_locked", + burntime = 30, +}) diff --git a/mods/default/crafting.lua b/mods/default/crafting.lua new file mode 100644 index 00000000..af7e6cb9 --- /dev/null +++ b/mods/default/crafting.lua @@ -0,0 +1,737 @@ +-- mods/default/crafting.lua + +minetest.register_craft({ + output = "default:wood 4", + recipe = { + {"default:tree"}, + } +}) + +minetest.register_craft({ + output = "default:junglewood 4", + recipe = { + {"default:jungletree"}, + } +}) + +minetest.register_craft({ + output = "default:pine_wood 4", + recipe = { + {"default:pine_tree"}, + } +}) + +minetest.register_craft({ + output = "default:acacia_wood 4", + recipe = { + {"default:acacia_tree"}, + } +}) + +minetest.register_craft({ + output = "default:aspen_wood 4", + recipe = { + {"default:aspen_tree"}, + } +}) + +minetest.register_craft({ + output = "default:wood", + recipe = { + {"default:bush_stem"}, + } +}) + +minetest.register_craft({ + output = "default:acacia_wood", + recipe = { + {"default:acacia_bush_stem"}, + } +}) + +minetest.register_craft({ + output = "default:pine_wood", + recipe = { + {"default:pine_bush_stem"}, + } +}) + +minetest.register_craft({ + output = "default:sign_wall_steel 1", + recipe = { + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"", "group:stick", ""}, + } +}) + +minetest.register_craft({ + output = "default:sign_wall_wood 3", + recipe = { + {"group:wood", "group:wood", "group:wood"}, + {"group:wood", "group:wood", "group:wood"}, + {"", "group:stick", ""}, + } +}) + +minetest.register_craft({ + output = "default:coalblock", + recipe = { + {"default:coal_lump", "default:coal_lump", "default:coal_lump"}, + {"default:coal_lump", "default:coal_lump", "default:coal_lump"}, + {"default:coal_lump", "default:coal_lump", "default:coal_lump"}, + } +}) + +minetest.register_craft({ + output = "default:steelblock", + recipe = { + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + } +}) + +minetest.register_craft({ + output = "default:copperblock", + recipe = { + {"default:copper_ingot", "default:copper_ingot", "default:copper_ingot"}, + {"default:copper_ingot", "default:copper_ingot", "default:copper_ingot"}, + {"default:copper_ingot", "default:copper_ingot", "default:copper_ingot"}, + } +}) + +minetest.register_craft({ + output = "default:tinblock", + recipe = { + {"default:tin_ingot", "default:tin_ingot", "default:tin_ingot"}, + {"default:tin_ingot", "default:tin_ingot", "default:tin_ingot"}, + {"default:tin_ingot", "default:tin_ingot", "default:tin_ingot"}, + } +}) + +minetest.register_craft({ + output = "default:bronzeblock", + recipe = { + {"default:bronze_ingot", "default:bronze_ingot", "default:bronze_ingot"}, + {"default:bronze_ingot", "default:bronze_ingot", "default:bronze_ingot"}, + {"default:bronze_ingot", "default:bronze_ingot", "default:bronze_ingot"}, + } +}) + +minetest.register_craft({ + output = "default:bronze_ingot 9", + recipe = { + {"default:bronzeblock"}, + } +}) + +minetest.register_craft({ + output = "default:goldblock", + recipe = { + {"default:gold_ingot", "default:gold_ingot", "default:gold_ingot"}, + {"default:gold_ingot", "default:gold_ingot", "default:gold_ingot"}, + {"default:gold_ingot", "default:gold_ingot", "default:gold_ingot"}, + } +}) + +minetest.register_craft({ + output = "default:diamondblock", + recipe = { + {"default:diamond", "default:diamond", "default:diamond"}, + {"default:diamond", "default:diamond", "default:diamond"}, + {"default:diamond", "default:diamond", "default:diamond"}, + } +}) + +minetest.register_craft({ + output = "default:sandstone", + recipe = { + {"default:sand", "default:sand"}, + {"default:sand", "default:sand"}, + } +}) + +minetest.register_craft({ + output = "default:sand 4", + recipe = { + {"default:sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:sandstonebrick 4", + recipe = { + {"default:sandstone", "default:sandstone"}, + {"default:sandstone", "default:sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:sandstone_block 9", + recipe = { + {"default:sandstone", "default:sandstone", "default:sandstone"}, + {"default:sandstone", "default:sandstone", "default:sandstone"}, + {"default:sandstone", "default:sandstone", "default:sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:desert_sandstone", + recipe = { + {"default:desert_sand", "default:desert_sand"}, + {"default:desert_sand", "default:desert_sand"}, + } +}) + +minetest.register_craft({ + output = "default:desert_sand 4", + recipe = { + {"default:desert_sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:desert_sandstone_brick 4", + recipe = { + {"default:desert_sandstone", "default:desert_sandstone"}, + {"default:desert_sandstone", "default:desert_sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:desert_sandstone_block 9", + recipe = { + {"default:desert_sandstone", "default:desert_sandstone", "default:desert_sandstone"}, + {"default:desert_sandstone", "default:desert_sandstone", "default:desert_sandstone"}, + {"default:desert_sandstone", "default:desert_sandstone", "default:desert_sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:silver_sandstone", + recipe = { + {"default:silver_sand", "default:silver_sand"}, + {"default:silver_sand", "default:silver_sand"}, + } +}) + +minetest.register_craft({ + output = "default:silver_sand 4", + recipe = { + {"default:silver_sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:silver_sandstone_brick 4", + recipe = { + {"default:silver_sandstone", "default:silver_sandstone"}, + {"default:silver_sandstone", "default:silver_sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:silver_sandstone_block 9", + recipe = { + {"default:silver_sandstone", "default:silver_sandstone", "default:silver_sandstone"}, + {"default:silver_sandstone", "default:silver_sandstone", "default:silver_sandstone"}, + {"default:silver_sandstone", "default:silver_sandstone", "default:silver_sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:clay", + recipe = { + {"default:clay_lump", "default:clay_lump"}, + {"default:clay_lump", "default:clay_lump"}, + } +}) +--[[ +minetest.register_craft({ + output = "default:brick", + recipe = { + {"default:clay_brick", "default:clay_brick"}, + {"default:clay_brick", "default:clay_brick"}, + } +}) +]] +minetest.register_craft({ + output = "default:bookshelf", + recipe = { + {"group:wood", "group:wood", "group:wood"}, + {"default:book", "default:book", "default:book"}, + {"group:wood", "group:wood", "group:wood"}, + } +}) + +minetest.register_craft({ + output = "default:ladder_wood 5", + recipe = { + {"group:stick", "", "group:stick"}, + {"group:stick", "group:stick", "group:stick"}, + {"group:stick", "", "group:stick"}, + } +}) + +minetest.register_craft({ + output = "default:ladder_steel 15", + recipe = { + {"default:steel_ingot", "", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "", "default:steel_ingot"}, + } +}) + +minetest.register_craft({ + output = "default:mese", + recipe = { + {"default:mese_crystal", "default:mese_crystal", "default:mese_crystal"}, + {"default:mese_crystal", "default:mese_crystal", "default:mese_crystal"}, + {"default:mese_crystal", "default:mese_crystal", "default:mese_crystal"}, + } +}) + +minetest.register_craft({ + output = "default:meselamp", + recipe = { + {"default:glass"}, + {"default:mese_crystal"}, + } +}) + +minetest.register_craft({ + output = "default:obsidian", + recipe = { + {"default:obsidian_shard", "default:obsidian_shard", "default:obsidian_shard"}, + {"default:obsidian_shard", "default:obsidian_shard", "default:obsidian_shard"}, + {"default:obsidian_shard", "default:obsidian_shard", "default:obsidian_shard"}, + } +}) + +minetest.register_craft({ + output = "default:obsidianbrick 4", + recipe = { + {"default:obsidian", "default:obsidian"}, + {"default:obsidian", "default:obsidian"} + } +}) + +minetest.register_craft({ + output = "default:obsidian_block 9", + recipe = { + {"default:obsidian", "default:obsidian", "default:obsidian"}, + {"default:obsidian", "default:obsidian", "default:obsidian"}, + {"default:obsidian", "default:obsidian", "default:obsidian"}, + } +}) + +minetest.register_craft({ + output = "default:stonebrick 4", + recipe = { + {"default:stone", "default:stone"}, + {"default:stone", "default:stone"}, + } +}) + +minetest.register_craft({ + output = "default:stone_block 9", + recipe = { + {"default:stone", "default:stone", "default:stone"}, + {"default:stone", "default:stone", "default:stone"}, + {"default:stone", "default:stone", "default:stone"}, + } +}) + +minetest.register_craft({ + output = "default:desert_stonebrick 4", + recipe = { + {"default:desert_stone", "default:desert_stone"}, + {"default:desert_stone", "default:desert_stone"}, + } +}) + +minetest.register_craft({ + output = "default:desert_stone_block 9", + recipe = { + {"default:desert_stone", "default:desert_stone", "default:desert_stone"}, + {"default:desert_stone", "default:desert_stone", "default:desert_stone"}, + {"default:desert_stone", "default:desert_stone", "default:desert_stone"}, + } +}) + +minetest.register_craft({ + output = "default:snowblock", + recipe = { + {"default:snow", "default:snow", "default:snow"}, + {"default:snow", "default:snow", "default:snow"}, + {"default:snow", "default:snow", "default:snow"}, + } +}) + +minetest.register_craft({ + output = "default:snow 9", + recipe = { + {"default:snowblock"}, + } +}) + +minetest.register_craft({ + output = "default:emergent_jungle_sapling", + recipe = { + {"default:junglesapling", "default:junglesapling", "default:junglesapling"}, + {"default:junglesapling", "default:junglesapling", "default:junglesapling"}, + {"default:junglesapling", "default:junglesapling", "default:junglesapling"}, + } +}) + +minetest.register_craft({ + output = "default:large_cactus_seedling", + recipe = { + {"", "default:cactus", ""}, + {"default:cactus", "default:cactus", "default:cactus"}, + {"", "default:cactus", ""}, + } +}) + + +-- +-- Crafting (tool repair) +-- + +minetest.register_craft({ + type = "toolrepair", + additional_wear = -0.02, +}) + + +-- +-- Cooking recipes +-- + +minetest.register_craft({ + type = "cooking", + output = "default:glass", + recipe = "group:sand", +}) + +minetest.register_craft({ + type = "cooking", + output = "default:obsidian_glass", + recipe = "default:obsidian_shard", +}) + +minetest.register_craft({ + type = "cooking", + output = "default:stone", + recipe = "default:cobble", +}) + +minetest.register_craft({ + type = "cooking", + output = "default:stone", + recipe = "default:mossycobble", +}) + +minetest.register_craft({ + type = "cooking", + output = "default:desert_stone", + recipe = "default:desert_cobble", +}) + + +-- +-- Fuels +-- + +-- Support use of group:tree, includes default:tree which has the same burn time +minetest.register_craft({ + type = "fuel", + recipe = "group:tree", + burntime = 30, +}) + +-- Burn time for all woods are in order of wood density, +-- which is also the order of wood colour darkness: +-- aspen, pine, apple, acacia, jungle + +minetest.register_craft({ + type = "fuel", + recipe = "default:aspen_tree", + burntime = 22, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:pine_tree", + burntime = 26, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:acacia_tree", + burntime = 34, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:jungletree", + burntime = 38, +}) + + +-- Support use of group:wood, includes default:wood which has the same burn time +minetest.register_craft({ + type = "fuel", + recipe = "group:wood", + burntime = 7, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:aspen_wood", + burntime = 5, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:pine_wood", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:acacia_wood", + burntime = 8, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:junglewood", + burntime = 9, +}) + + +-- Support use of group:sapling, includes default:sapling which has the same burn time +minetest.register_craft({ + type = "fuel", + recipe = "group:sapling", + burntime = 5, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:bush_sapling", + burntime = 3, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:acacia_bush_sapling", + burntime = 4, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:pine_bush_sapling", + burntime = 2, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:aspen_sapling", + burntime = 4, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:pine_sapling", + burntime = 5, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:acacia_sapling", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:junglesapling", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:emergent_jungle_sapling", + burntime = 7, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_aspen_wood", + burntime = 5, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_pine_wood", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_wood", + burntime = 7, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_acacia_wood", + burntime = 8, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_junglewood", + burntime = 9, +}) + + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_rail_aspen_wood", + burntime = 3, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_rail_pine_wood", + burntime = 4, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_rail_wood", + burntime = 5, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_rail_acacia_wood", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fence_rail_junglewood", + burntime = 7, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:bush_stem", + burntime = 7, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:acacia_bush_stem", + burntime = 8, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:pine_bush_stem", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:junglegrass", + burntime = 3, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "group:leaves", + burntime = 4, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:cactus", + burntime = 15, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:large_cactus_seedling", + burntime = 5, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:papyrus", + burntime = 3, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:bookshelf", + burntime = 30, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:ladder_wood", + burntime = 7, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:lava_source", + burntime = 60, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:sign_wall_wood", + burntime = 10, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:coalblock", + burntime = 370, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:grass_1", + burntime = 2, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:dry_grass_1", + burntime = 2, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:fern_1", + burntime = 2, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:marram_grass_1", + burntime = 2, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:dry_shrub", + burntime = 2, +}) diff --git a/mods/default/craftitems.lua b/mods/default/craftitems.lua new file mode 100644 index 00000000..d2e827f4 --- /dev/null +++ b/mods/default/craftitems.lua @@ -0,0 +1,540 @@ +-- mods/default/craftitems.lua + +-- support for MT game translation. +local S = default.get_translator + +local esc = minetest.formspec_escape +local formspec_size = "size[8,8]" + +local function formspec_core(tab) + if tab == nil then tab = 1 else tab = tostring(tab) end + return "tabheader[0,0;book_header;" .. + esc(S("Write")) .. "," .. + esc(S("Read")) .. ";" .. + tab .. ";false;false]" +end + +local function formspec_write(title, text) + return "field[0.5,1;7.5,0;title;" .. esc(S("Title:")) .. ";" .. + esc(title) .. "]" .. + "textarea[0.5,1.5;7.5,7;text;" .. esc(S("Contents:")) .. ";" .. + esc(text) .. "]" .. + "button_exit[2.5,7.5;3,1;save;" .. esc(S("Save")) .. "]" +end + +local function formspec_read(owner, title, string, text, page, page_max) + return "label[0.5,0.5;" .. esc(S("by @1", owner)) .. "]" .. + "tablecolumns[color;text]" .. + "tableoptions[background=#00000000;highlight=#00000000;border=false]" .. + "table[0.4,0;7,0.5;title;#FFFF00," .. esc(title) .. "]" .. + "textarea[0.5,1.5;7.5,7;;" .. + esc(string ~= "" and string or text) .. ";]" .. + "button[2.4,7.6;0.8,0.8;book_prev;<]" .. + "label[3.2,7.7;" .. esc(S("Page @1 of @2", page, page_max)) .. "]" .. + "button[4.9,7.6;0.8,0.8;book_next;>]" +end + +local function formspec_string(lpp, page, lines, string) + for i = ((lpp * page) - lpp) + 1, lpp * page do + if not lines[i] then break end + string = string .. lines[i] .. "\n" + end + return string +end + +local book_writers = {} + +minetest.register_on_leaveplayer(function(player) + book_writers[player:get_player_name()] = nil +end) + +local tab_number +local lpp = 14 -- Lines per book's page +local function book_on_use(itemstack, user) + local player_name = user:get_player_name() + local meta = itemstack:get_meta() + local title, text, owner = "", "", player_name + local page, page_max, lines, string = 1, 1, {}, "" + + -- Backwards compatibility + local old_data = minetest.deserialize(itemstack:get_metadata()) + if old_data then + meta:from_table({ fields = old_data }) + end + + local data = meta:to_table().fields + + if data.owner then + title = data.title or "" + text = data.text or "" + owner = data.owner + + for str in (text .. "\n"):gmatch("([^\n]*)[\n]") do + lines[#lines+1] = str + end + + if data.page then + page = data.page + page_max = data.page_max + string = formspec_string(lpp, page, lines, string) + end + end + + local formspec + if title == "" and text == "" then + formspec = formspec_write(title, text) + elseif owner == player_name then + local tab = tab_number or 1 + if tab == 2 then + formspec = formspec_core(tab) .. + formspec_read(owner, title, string, text, page, page_max) + else + formspec = formspec_core(tab) .. formspec_write(title, text) + end + else + formspec = formspec_read(owner, title, string, text, page, page_max) + end + + minetest.show_formspec(player_name, "default:book", formspec_size .. formspec) + -- Store the wield index in case the user accidentally switches before the formspec is shown + book_writers[player_name] = {wield_index = user:get_wield_index()} + return itemstack +end + +local max_text_size = 10000 +local max_title_size = 80 +local short_title_size = 35 +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname ~= "default:book" then + return + end + local player_name = player:get_player_name() + local inv = player:get_inventory() + if not book_writers[player_name] then + return + end + local wield_index = book_writers[player_name].wield_index + local wield_list = player:get_wield_list() + local stack = inv:get_stack(wield_list, wield_index) + local written = stack:get_name() == "default:book_written" + if stack:get_name() ~= "default:book" and not written then + -- No book in the wield slot, abort & inform the player + minetest.chat_send_player(player_name, S("The book you were writing to mysteriously disappeared.")) + return + end + local data = stack:get_meta():to_table().fields + + local title = data.title or "" + local text = data.text or "" + + if fields.book_header ~= nil and data.owner == player_name then + local contents + local tab = tonumber(fields.book_header) + if tab == 1 then + contents = formspec_core(tab) .. + formspec_write(title, text) + elseif tab == 2 then + local lines, string = {}, "" + for str in (text .. "\n"):gmatch("([^\n]*)[\n]") do + lines[#lines+1] = str + end + string = formspec_string(lpp, data.page, lines, string) + contents = formspec_read(player_name, title, string, + text, data.page, data.page_max) + end + tab_number = tab + local formspec = formspec_size .. formspec_core(tab) .. contents + minetest.show_formspec(player_name, "default:book", formspec) + return + end + + if fields.close then + book_writers[player_name] = nil + end + + if fields.save and fields.title and fields.text then + local new_stack + if not written then + local count = stack:get_count() + if count == 1 then + stack:set_name("default:book_written") + else + stack:set_count(count - 1) + new_stack = ItemStack("default:book_written") + end + end + + if data.owner ~= player_name and title ~= "" and text ~= "" then + return + end + + if not data then data = {} end + data.title = fields.title:sub(1, max_title_size) + data.owner = player:get_player_name() + local short_title = data.title + -- Don't bother triming the title if the trailing dots would make it longer + if #short_title > short_title_size + 3 then + short_title = short_title:sub(1, short_title_size) .. "..." + end + data.description = S("\"@1\" by @2", short_title, data.owner) + data.text = fields.text:sub(1, max_text_size) + data.text = data.text:gsub("\r\n", "\n"):gsub("\r", "\n") + data.page = 1 + data.page_max = math.ceil((#data.text:gsub("[^\n]", "") + 1) / lpp) + + if new_stack then + new_stack:get_meta():from_table({ fields = data }) + if inv:room_for_item("main", new_stack) then + inv:add_item("main", new_stack) + else + minetest.add_item(player:get_pos(), new_stack) + end + else + stack:get_meta():from_table({ fields = data }) + end + + elseif fields.book_next or fields.book_prev then + if not data.page then + return + end + + data.page = tonumber(data.page) + data.page_max = tonumber(data.page_max) + + if fields.book_next then + data.page = data.page + 1 + if data.page > data.page_max then + data.page = 1 + end + else + data.page = data.page - 1 + if data.page == 0 then + data.page = data.page_max + end + end + + stack:get_meta():from_table({fields = data}) + stack = book_on_use(stack, player) + end + + -- Update stack + inv:set_stack(wield_list, wield_index, stack) +end) + + +-- +-- Craftitem registry +-- + +minetest.register_craftitem("default:blueberries", { + description = S("Blueberries"), + inventory_image = "default_blueberries.png", + groups = {food_blueberries = 1, food_berry = 1}, + on_use = minetest.item_eat(2), +}) + +minetest.register_craftitem("default:book", { + description = S("Book"), + inventory_image = "default_book.png", + groups = {book = 1, flammable = 3}, + on_use = book_on_use, +}) + +minetest.register_craftitem("default:book_written", { + description = S("Book with Text"), + inventory_image = "default_book_written.png", + groups = {book = 1, not_in_creative_inventory = 1, flammable = 3}, + stack_max = 1, + on_use = book_on_use, +}) + +minetest.register_craftitem("default:bronze_ingot", { + description = S("Bronze Ingot"), + inventory_image = "default_bronze_ingot.png" +}) + +minetest.register_craftitem("default:clay_brick", { + description = S("Clay Brick"), + inventory_image = "default_clay_brick.png", +}) + +minetest.register_craftitem("default:clay_lump", { + description = S("Clay Lump"), + inventory_image = "default_clay_lump.png", +}) + +minetest.register_craftitem("default:coal_lump", { + description = S("Coal Lump"), + inventory_image = "default_coal_lump.png", + groups = {coal = 1, flammable = 1} +}) + +minetest.register_craftitem("default:copper_ingot", { + description = S("Copper Ingot"), + inventory_image = "default_copper_ingot.png" +}) + +minetest.register_craftitem("default:copper_lump", { + description = S("Copper Lump"), + inventory_image = "default_copper_lump.png" +}) + +minetest.register_craftitem("default:diamond", { + description = S("Diamond"), + inventory_image = "default_diamond.png", +}) + +minetest.register_craftitem("default:flint", { + description = S("Flint"), + inventory_image = "default_flint.png" +}) + +minetest.register_craftitem("default:gold_ingot", { + description = S("Gold Ingot"), + inventory_image = "default_gold_ingot.png" +}) + +minetest.register_craftitem("default:gold_lump", { + description = S("Gold Lump"), + inventory_image = "default_gold_lump.png" +}) + +minetest.register_craftitem("default:iron_lump", { + description = S("Iron Lump"), + inventory_image = "default_iron_lump.png" +}) + +minetest.register_craftitem("default:mese_crystal", { + description = S("Mese Crystal"), + inventory_image = "default_mese_crystal.png", +}) + +minetest.register_craftitem("default:mese_crystal_fragment", { + description = S("Mese Crystal Fragment"), + inventory_image = "default_mese_crystal_fragment.png", +}) + +minetest.register_craftitem("default:obsidian_shard", { + description = S("Obsidian Shard"), + inventory_image = "default_obsidian_shard.png", +}) + +minetest.register_craftitem("default:paper", { + description = S("Paper"), + inventory_image = "default_paper.png", + groups = {flammable = 3}, +}) + +minetest.register_craftitem("default:steel_ingot", { + description = S("Steel Ingot"), + inventory_image = "default_steel_ingot.png" +}) + +minetest.register_craftitem("default:stick", { + description = S("Stick"), + inventory_image = "default_stick.png", + groups = {stick = 1, flammable = 2}, +}) + +minetest.register_craftitem("default:tin_ingot", { + description = S("Tin Ingot"), + inventory_image = "default_tin_ingot.png" +}) + +minetest.register_craftitem("default:tin_lump", { + description = S("Tin Lump"), + inventory_image = "default_tin_lump.png" +}) + +-- +-- Crafting recipes +-- + +minetest.register_craft({ + output = "default:book", + recipe = { + {"default:paper"}, + {"default:paper"}, + {"default:paper"}, + } +}) + +default.register_craft_metadata_copy("default:book", "default:book_written") + +minetest.register_craft({ + output = "default:bronze_ingot 9", + recipe = { + {"default:copper_ingot", "default:copper_ingot", "default:copper_ingot"}, + {"default:copper_ingot", "default:tin_ingot", "default:copper_ingot"}, + {"default:copper_ingot", "default:copper_ingot", "default:copper_ingot"}, + } +}) + +minetest.register_craft({ + output = "default:clay_brick 4", + recipe = { + {"default:brick"}, + } +}) + +minetest.register_craft({ + output = "default:clay_lump 4", + recipe = { + {"default:clay"}, + } +}) + +minetest.register_craft({ + output = "default:coal_lump 9", + recipe = { + {"default:coalblock"}, + } +}) + +minetest.register_craft({ + output = "default:copper_ingot 9", + recipe = { + {"default:copperblock"}, + } +}) + +minetest.register_craft({ + output = "default:diamond 9", + recipe = { + {"default:diamondblock"}, + } +}) + +minetest.register_craft({ + output = "default:gold_ingot 9", + recipe = { + {"default:goldblock"}, + } +}) + +minetest.register_craft({ + output = "default:mese_crystal", + recipe = { + {"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"}, + {"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"}, + {"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"}, + } +}) + +minetest.register_craft({ + output = "default:mese_crystal 9", + recipe = { + {"default:mese"}, + } +}) + +minetest.register_craft({ + output = "default:mese_crystal_fragment 9", + recipe = { + {"default:mese_crystal"}, + } +}) + +minetest.register_craft({ + output = "default:obsidian_shard 9", + recipe = { + {"default:obsidian"} + } +}) + +minetest.register_craft({ + output = "default:paper", + recipe = { + {"default:papyrus", "default:papyrus", "default:papyrus"}, + } +}) + +minetest.register_craft({ + output = "default:steel_ingot 9", + recipe = { + {"default:steelblock"}, + } +}) + +minetest.register_craft({ + output = "default:stick 4", + recipe = { + {"group:wood"}, + } +}) + +minetest.register_craft({ + output = "default:tin_ingot 9", + recipe = { + {"default:tinblock"}, + } +}) + +-- +-- Cooking recipes +-- + +minetest.register_craft({ + type = "cooking", + output = "default:clay_brick", + recipe = "default:clay_lump", +}) + +minetest.register_craft({ + type = "cooking", + output = "default:copper_ingot", + recipe = "default:copper_lump", +}) + +minetest.register_craft({ + type = "cooking", + output = "default:gold_ingot", + recipe = "default:gold_lump", +}) + + +minetest.register_craft({ + type = "cooking", + output = "default:steel_ingot", + recipe = "default:iron_lump", +}) + +minetest.register_craft({ + type = "cooking", + output = "default:tin_ingot", + recipe = "default:tin_lump", +}) + +-- +-- Fuels +-- + +minetest.register_craft({ + type = "fuel", + recipe = "default:book", + burntime = 3, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:book_written", + burntime = 3, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:coal_lump", + burntime = 40, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:paper", + burntime = 1, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "group:stick", + burntime = 1, +}) diff --git a/mods/default/functions.lua b/mods/default/functions.lua new file mode 100644 index 00000000..dbc72029 --- /dev/null +++ b/mods/default/functions.lua @@ -0,0 +1,817 @@ +-- +-- Sounds +-- + +function default.node_sound_defaults(table) + table = table or {} + table.footstep = table.footstep or + {name = "", gain = 1.0} + table.dug = table.dug or + {name = "default_dug_node", gain = 0.25} + table.place = table.place or + {name = "default_place_node_hard", gain = 1.0} + return table +end + +function default.node_sound_stone_defaults(table) + table = table or {} + table.footstep = table.footstep or + {name = "default_hard_footstep", gain = 0.2} + table.dug = table.dug or + {name = "default_hard_footstep", gain = 1.0} + default.node_sound_defaults(table) + return table +end + +function default.node_sound_dirt_defaults(table) + table = table or {} + table.footstep = table.footstep or + {name = "default_dirt_footstep", gain = 0.25} + table.dig = table.dig or + {name = "default_dig_crumbly", gain = 0.4} + table.dug = table.dug or + {name = "default_dirt_footstep", gain = 1.0} + table.place = table.place or + {name = "default_place_node", gain = 1.0} + default.node_sound_defaults(table) + return table +end + +function default.node_sound_sand_defaults(table) + table = table or {} + table.footstep = table.footstep or + {name = "default_sand_footstep", gain = 0.05} + table.dug = table.dug or + {name = "default_sand_footstep", gain = 0.15} + table.place = table.place or + {name = "default_place_node", gain = 1.0} + default.node_sound_defaults(table) + return table +end + +function default.node_sound_gravel_defaults(table) + table = table or {} + table.footstep = table.footstep or + {name = "default_gravel_footstep", gain = 0.25} + table.dig = table.dig or + {name = "default_gravel_dig", gain = 0.35} + table.dug = table.dug or + {name = "default_gravel_dug", gain = 1.0} + table.place = table.place or + {name = "default_place_node", gain = 1.0} + default.node_sound_defaults(table) + return table +end + +function default.node_sound_wood_defaults(table) + table = table or {} + table.footstep = table.footstep or + {name = "default_wood_footstep", gain = 0.15} + table.dig = table.dig or + {name = "default_dig_choppy", gain = 0.4} + table.dug = table.dug or + {name = "default_wood_footstep", gain = 1.0} + default.node_sound_defaults(table) + return table +end + +function default.node_sound_leaves_defaults(table) + table = table or {} + table.footstep = table.footstep or + {name = "default_grass_footstep", gain = 0.45} + table.dug = table.dug or + {name = "default_grass_footstep", gain = 0.7} + table.place = table.place or + {name = "default_place_node", gain = 1.0} + default.node_sound_defaults(table) + return table +end + +function default.node_sound_glass_defaults(table) + table = table or {} + table.footstep = table.footstep or + {name = "default_glass_footstep", gain = 0.3} + table.dig = table.dig or + {name = "default_glass_footstep", gain = 0.5} + table.dug = table.dug or + {name = "default_break_glass", gain = 1.0} + default.node_sound_defaults(table) + return table +end + +function default.node_sound_ice_defaults(table) + table = table or {} + table.footstep = table.footstep or + {name = "default_ice_footstep", gain = 0.15} + table.dig = table.dig or + {name = "default_ice_dig", gain = 0.5} + table.dug = table.dug or + {name = "default_ice_dug", gain = 0.5} + default.node_sound_defaults(table) + return table +end + +function default.node_sound_metal_defaults(table) + table = table or {} + table.footstep = table.footstep or + {name = "default_metal_footstep", gain = 0.2} + table.dig = table.dig or + {name = "default_dig_metal", gain = 0.5} + table.dug = table.dug or + {name = "default_dug_metal", gain = 0.5} + table.place = table.place or + {name = "default_place_node_metal", gain = 0.5} + default.node_sound_defaults(table) + return table +end + +function default.node_sound_water_defaults(table) + table = table or {} + table.footstep = table.footstep or + {name = "default_water_footstep", gain = 0.2} + default.node_sound_defaults(table) + return table +end + +function default.node_sound_snow_defaults(table) + table = table or {} + table.footstep = table.footstep or + {name = "default_snow_footstep", gain = 0.2} + table.dig = table.dig or + {name = "default_snow_footstep", gain = 0.3} + table.dug = table.dug or + {name = "default_snow_footstep", gain = 0.3} + table.place = table.place or + {name = "default_place_node", gain = 1.0} + default.node_sound_defaults(table) + return table +end + + +-- +-- Lavacooling +-- + +lavagen = { +"default:stone" +} + +-- thanks to ElectronLibre from Minetest IRC +if minetest.get_modpath("darkage") then + table.insert(lavagen, "darkage:basalt") +else + if minetest.get_modpath("illuna_extras") then + table.insert(lavagen, "darkage:basalt") + end +end + +default.cool_lava = function(pos, node) + if node.name == "default:lava_source" then + minetest.set_node(pos, {name = "default:obsidian"}) + else + minetest.set_node(pos, {name = lavagen[math.random(1,#lavagen)]}) + end + minetest.sound_play("default_cool_lava", + {pos = pos, max_hear_distance = 16, gain = 0.2}, true) +end + +if minetest.settings:get_bool("enable_lavacooling") ~= false then + minetest.register_abm({ + label = "Lava cooling", + nodenames = {"default:lava_source", "default:lava_flowing"}, + neighbors = {"group:cools_lava", "group:water"}, + interval = 2, + chance = 2, + catch_up = false, + action = function(...) + default.cool_lava(...) + end, + }) +end + + +-- +-- Optimized helper to put all items in an inventory into a drops list +-- + +function default.get_inventory_drops(pos, inventory, drops) + local inv = minetest.get_meta(pos):get_inventory() + local n = #drops + for i = 1, inv:get_size(inventory) do + local stack = inv:get_stack(inventory, i) + if stack:get_count() > 0 then + drops[n+1] = stack:to_table() + n = n + 1 + end + end +end + + +-- +-- Papyrus and cactus growing +-- + +-- Wrapping the functions in ABM action is necessary to make overriding them possible + +function default.grow_cactus(pos, node) + if node.param2 >= 4 then + return + end + pos.y = pos.y - 1 + if minetest.get_item_group(minetest.get_node(pos).name, "sand") == 0 then + return + end + pos.y = pos.y + 1 + local height = 0 + while node.name == "default:cactus" and height < 4 do + height = height + 1 + pos.y = pos.y + 1 + node = minetest.get_node(pos) + end + if height == 4 or node.name ~= "air" then + return + end + if minetest.get_node_light(pos) < 13 then + return + end + minetest.set_node(pos, {name = "default:cactus"}) + return true +end + +function default.grow_papyrus(pos, node) + pos.y = pos.y - 1 + local name = minetest.get_node(pos).name + if name ~= "default:dirt" and + name ~= "default:dirt_with_grass" and + name ~= "default:dirt_with_dry_grass" and + name ~= "default:dirt_with_rainforest_litter" and + name ~= "default:dry_dirt" and + name ~= "default:dry_dirt_with_dry_grass" then + return + end + if not minetest.find_node_near(pos, 3, {"group:water"}) then + return + end + pos.y = pos.y + 1 + local height = 0 + while node.name == "default:papyrus" and height < 4 do + height = height + 1 + pos.y = pos.y + 1 + node = minetest.get_node(pos) + end + if height == 4 or node.name ~= "air" then + return + end + if minetest.get_node_light(pos) < 13 then + return + end + minetest.set_node(pos, {name = "default:papyrus"}) + return true +end + +minetest.register_abm({ + label = "Grow cactus", + nodenames = {"default:cactus"}, + neighbors = {"group:sand"}, + interval = 12, + chance = 83, + action = function(...) + default.grow_cactus(...) + end +}) + +minetest.register_abm({ + label = "Grow papyrus", + nodenames = {"default:papyrus"}, + -- Grows on the dirt and surface dirt nodes of the biomes papyrus appears in, + -- including the old savanna nodes. + -- 'default:dirt_with_grass' is here only because it was allowed before. + neighbors = { + "default:dirt", + "default:dirt_with_grass", + "default:dirt_with_dry_grass", + "default:dirt_with_rainforest_litter", + "default:dry_dirt", + "default:dry_dirt_with_dry_grass", + }, + interval = 14, + chance = 71, + action = function(...) + default.grow_papyrus(...) + end +}) + + +-- +-- Dig upwards +-- + +function default.dig_up(pos, node, digger) + if digger == nil then return end + local np = {x = pos.x, y = pos.y + 1, z = pos.z} + local nn = minetest.get_node(np) + if nn.name == node.name then + minetest.node_dig(np, nn, digger) + end +end + + +-- +-- Fence registration helper +-- +local fence_collision_extra = minetest.settings:get_bool("enable_fence_tall") and 3/8 or 0 + +function default.register_fence(name, def) + minetest.register_craft({ + output = name .. " 4", + recipe = { + { def.material, 'group:stick', def.material }, + { def.material, 'group:stick', def.material }, + } + }) + + local fence_texture = "default_fence_overlay.png^" .. def.texture .. + "^default_fence_overlay.png^[makealpha:255,126,126" + -- Allow almost everything to be overridden + local default_fields = { + paramtype = "light", + drawtype = "nodebox", + node_box = { + type = "connected", + fixed = {-1/8, -1/2, -1/8, 1/8, 1/2, 1/8}, + -- 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}} + }, + collision_box = { + type = "connected", + fixed = {-1/8, -1/2, -1/8, 1/8, 1/2 + fence_collision_extra, 1/8}, + -- connect_top = + -- connect_bottom = + connect_front = {-1/8, -1/2, -1/2, 1/8, 1/2 + fence_collision_extra, -1/8}, + connect_left = {-1/2, -1/2, -1/8, -1/8, 1/2 + fence_collision_extra, 1/8}, + connect_back = {-1/8, -1/2, 1/8, 1/8, 1/2 + fence_collision_extra, 1/2}, + connect_right = { 1/8, -1/2, -1/8, 1/2, 1/2 + fence_collision_extra, 1/8} + }, + connects_to = {"group:fence", "group:wood", "group:tree", "group:wall"}, + inventory_image = fence_texture, + wield_image = fence_texture, + tiles = { def.texture }, + sunlight_propagates = true, + is_ground_content = false, + selection_box = { + type = "fixed", + fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7}, + }, + groups = {}, + } + for k, v in pairs(default_fields) do + if def[k] == nil then + def[k] = v + end + end + + -- Always add to the fence group, even if no group provided + def.groups.fence = 1 + + def.texture = nil + def.material = nil + + minetest.register_node(name, def) +end + + +-- +-- Fence rail registration helper +-- + +function default.register_fence_rail(name, def) + minetest.register_craft({ + output = name .. " 16", + recipe = { + { def.material, def.material }, + { "", ""}, + { def.material, def.material }, + } + }) + + local fence_rail_texture = "default_fence_rail_overlay.png^" .. def.texture .. + "^default_fence_rail_overlay.png^[makealpha:255,126,126" + -- Allow almost everything to be overridden + local default_fields = { + paramtype = "light", + drawtype = "nodebox", + node_box = { + type = "connected", + fixed = {{-1/16, 3/16, -1/16, 1/16, 5/16, 1/16}, + {-1/16, -3/16, -1/16, 1/16, -5/16, 1/16}}, + -- connect_top = + -- connect_bottom = + connect_front = {{-1/16, 3/16, -1/2, 1/16, 5/16, -1/16}, + {-1/16, -5/16, -1/2, 1/16, -3/16, -1/16}}, + connect_left = {{-1/2, 3/16, -1/16, -1/16, 5/16, 1/16}, + {-1/2, -5/16, -1/16, -1/16, -3/16, 1/16}}, + connect_back = {{-1/16, 3/16, 1/16, 1/16, 5/16, 1/2 }, + {-1/16, -5/16, 1/16, 1/16, -3/16, 1/2 }}, + connect_right = {{ 1/16, 3/16, -1/16, 1/2, 5/16, 1/16}, + { 1/16, -5/16, -1/16, 1/2, -3/16, 1/16}} + }, + collision_box = { + type = "connected", + fixed = {-1/8, -1/2, -1/8, 1/8, 1/2 + fence_collision_extra, 1/8}, + -- connect_top = + -- connect_bottom = + connect_front = {-1/8, -1/2, -1/2, 1/8, 1/2 + fence_collision_extra, -1/8}, + connect_left = {-1/2, -1/2, -1/8, -1/8, 1/2 + fence_collision_extra, 1/8}, + connect_back = {-1/8, -1/2, 1/8, 1/8, 1/2 + fence_collision_extra, 1/2}, + connect_right = { 1/8, -1/2, -1/8, 1/2, 1/2 + fence_collision_extra, 1/8} + }, + connects_to = {"group:fence", "group:wall"}, + inventory_image = fence_rail_texture, + wield_image = fence_rail_texture, + tiles = {def.texture}, + sunlight_propagates = true, + is_ground_content = false, + groups = {}, + } + for k, v in pairs(default_fields) do + if def[k] == nil then + def[k] = v + end + end + + -- Always add to the fence group, even if no group provided + def.groups.fence = 1 + + def.texture = nil + def.material = nil + + minetest.register_node(name, def) +end + +-- +-- Mese post registration helper +-- + +function default.register_mesepost(name, def) + minetest.register_craft({ + output = name .. " 4", + recipe = { + {'', 'default:glass', ''}, + {'default:mese_crystal', 'default:mese_crystal', 'default:mese_crystal'}, + {'', def.material, ''}, + } + }) + + local post_texture = def.texture .. "^default_mese_post_light_side.png^[makealpha:0,0,0" + local post_texture_dark = def.texture .. "^default_mese_post_light_side_dark.png^[makealpha:0,0,0" + -- Allow almost everything to be overridden + local default_fields = { + wield_image = post_texture, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-2 / 16, -8 / 16, -2 / 16, 2 / 16, 8 / 16, 2 / 16}, + }, + }, + paramtype = "light", + tiles = {def.texture, def.texture, post_texture_dark, post_texture_dark, post_texture, post_texture}, + use_texture_alpha = "opaque", + light_source = default.LIGHT_MAX, + sunlight_propagates = true, + is_ground_content = false, + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + } + for k, v in pairs(default_fields) do + if def[k] == nil then + def[k] = v + end + end + + def.texture = nil + def.material = nil + + minetest.register_node(name, def) +end + +-- +-- Leafdecay +-- + +-- Prevent decay of placed leaves + +default.after_place_leaves = function(pos, placer, itemstack, pointed_thing) + if placer and placer:is_player() then + local node = minetest.get_node(pos) + node.param2 = 1 + minetest.set_node(pos, node) + end +end + +-- Leafdecay +local function leafdecay_after_destruct(pos, oldnode, def) + for _, v in pairs(minetest.find_nodes_in_area(vector.subtract(pos, def.radius), + vector.add(pos, def.radius), def.leaves)) do + local node = minetest.get_node(v) + local timer = minetest.get_node_timer(v) + if node.param2 ~= 1 and not timer:is_started() then + timer:start(math.random(20, 120) / 10) + end + end +end + +local movement_gravity = tonumber( + minetest.settings:get("movement_gravity")) or 9.81 + +local function leafdecay_on_timer(pos, def) + if minetest.find_node_near(pos, def.radius, def.trunks) then + return false + end + + local node = minetest.get_node(pos) + local drops = minetest.get_node_drops(node.name) + for _, item in ipairs(drops) do + local is_leaf + for _, v in pairs(def.leaves) do + if v == item then + is_leaf = true + end + end + if minetest.get_item_group(item, "leafdecay_drop") ~= 0 or + not is_leaf then + minetest.add_item({ + x = pos.x - 0.5 + math.random(), + y = pos.y - 0.5 + math.random(), + z = pos.z - 0.5 + math.random(), + }, item) + end + end + + minetest.remove_node(pos) + minetest.check_for_falling(pos) + + -- spawn a few particles for the removed node + minetest.add_particlespawner({ + amount = 8, + time = 0.001, + minpos = vector.subtract(pos, {x=0.5, y=0.5, z=0.5}), + maxpos = vector.add(pos, {x=0.5, y=0.5, z=0.5}), + minvel = vector.new(-0.5, -1, -0.5), + maxvel = vector.new(0.5, 0, 0.5), + minacc = vector.new(0, -movement_gravity, 0), + maxacc = vector.new(0, -movement_gravity, 0), + minsize = 0, + maxsize = 0, + node = node, + }) +end + +function default.register_leafdecay(def) + assert(def.leaves) + assert(def.trunks) + assert(def.radius) + for _, v in pairs(def.trunks) do + minetest.override_item(v, { + after_destruct = function(pos, oldnode) + leafdecay_after_destruct(pos, oldnode, def) + end, + }) + end + for _, v in pairs(def.leaves) do + minetest.override_item(v, { + on_timer = function(pos) + leafdecay_on_timer(pos, def) + end, + }) + end +end + + +-- +-- Convert default:dirt to something that fits the environment +-- + +minetest.register_abm({ + label = "Grass spread", + nodenames = {"default:dirt"}, + neighbors = { + "air", + "group:grass", + "group:dry_grass", + "default:snow", + }, + interval = 6, + chance = 50, + catch_up = false, + action = function(pos, node) + -- Check for darkness: night, shadow or under a light-blocking node + -- Returns if ignore above + local above = {x = pos.x, y = pos.y + 1, z = pos.z} + if (minetest.get_node_light(above) or 0) < 13 then + return + end + + -- Look for spreading dirt-type neighbours + local p2 = minetest.find_node_near(pos, 1, "group:spreading_dirt_type") + if p2 then + local n3 = minetest.get_node(p2) + minetest.set_node(pos, {name = n3.name}) + return + end + + -- Else, any seeding nodes on top? + local name = minetest.get_node(above).name + -- Snow check is cheapest, so comes first + if name == "default:snow" then + minetest.set_node(pos, {name = "default:dirt_with_snow"}) + elseif minetest.get_item_group(name, "grass") ~= 0 then + minetest.set_node(pos, {name = "default:dirt_with_grass"}) + elseif minetest.get_item_group(name, "dry_grass") ~= 0 then + minetest.set_node(pos, {name = "default:dirt_with_dry_grass"}) + end + end +}) + + +-- +-- Grass and dry grass removed in darkness +-- + +minetest.register_abm({ + label = "Grass covered", + nodenames = {"group:spreading_dirt_type", "default:dry_dirt_with_dry_grass"}, + interval = 8, + chance = 50, + catch_up = false, + action = function(pos, node) + local above = {x = pos.x, y = pos.y + 1, z = pos.z} + local name = minetest.get_node(above).name + local nodedef = minetest.registered_nodes[name] + if name ~= "ignore" and nodedef and not ((nodedef.sunlight_propagates or + nodedef.paramtype == "light") and + nodedef.liquidtype == "none") then + if node.name == "default:dry_dirt_with_dry_grass" then + minetest.set_node(pos, {name = "default:dry_dirt"}) + else + minetest.set_node(pos, {name = "default:dirt"}) + end + end + end +}) + + +-- +-- Moss growth on cobble near water +-- + +local moss_correspondences = { + ["default:cobble"] = "default:mossycobble", + ["stairs:slab_cobble"] = "stairs:slab_mossycobble", + ["stairs:stair_cobble"] = "stairs:stair_mossycobble", + ["stairs:stair_inner_cobble"] = "stairs:stair_inner_mossycobble", + ["stairs:stair_outer_cobble"] = "stairs:stair_outer_mossycobble", + ["walls:cobble"] = "walls:mossycobble", +} +minetest.register_abm({ + label = "Moss growth", + nodenames = {"default:cobble", "stairs:slab_cobble", "stairs:stair_cobble", + "stairs:stair_inner_cobble", "stairs:stair_outer_cobble", + "walls:cobble", "default:stone", "default:stonebrick"}, + neighbors = {"group:water"}, + interval = 16, + chance = 200, + catch_up = false, + action = function(pos, node) + node.name = moss_correspondences[node.name] + if node.name then + minetest.set_node(pos, node) + end + end +}) + +-- +-- Register a craft to copy the metadata of items +-- + +function default.register_craft_metadata_copy(ingredient, result) + minetest.register_craft({ + type = "shapeless", + output = result, + recipe = {ingredient, result} + }) + + minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) + if itemstack:get_name() ~= result then + return + end + + local original + local index + for i = 1, #old_craft_grid do + if old_craft_grid[i]:get_name() == result then + original = old_craft_grid[i] + index = i + end + end + if not original then + return + end + local copymeta = original:get_meta():to_table() + itemstack:get_meta():from_table(copymeta) + -- put the book with metadata back in the craft grid + craft_inv:set_stack("craft", index, original) + end) +end + +-- +-- Log API / helpers +-- + +local log_non_player_actions = minetest.settings:get_bool("log_non_player_actions", false) + +local is_pos = function(v) + return type(v) == "table" and + type(v.x) == "number" and type(v.y) == "number" and type(v.z) == "number" +end + +function default.log_player_action(player, ...) + local msg = player:get_player_name() + if player.is_fake_player or not player:is_player() then + if not log_non_player_actions then + return + end + msg = msg .. "(" .. (type(player.is_fake_player) == "string" + and player.is_fake_player or "*") .. ")" + end + for _, v in ipairs({...}) do + -- translate pos + local part = is_pos(v) and minetest.pos_to_string(v) or v + -- no leading spaces before punctuation marks + msg = msg .. (string.match(part, "^[;,.]") and "" or " ") .. part + end + minetest.log("action", msg) +end + +function default.set_inventory_action_loggers(def, name) + def.on_metadata_inventory_move = function(pos, from_list, from_index, + to_list, to_index, count, player) + default.log_player_action(player, "moves stuff in", name, "at", pos) + end + def.on_metadata_inventory_put = function(pos, listname, index, stack, player) + default.log_player_action(player, "moves", stack:get_name(), "to", name, "at", pos) + end + def.on_metadata_inventory_take = function(pos, listname, index, stack, player) + default.log_player_action(player, "takes", stack:get_name(), "from", name, "at", pos) + end +end + +-- +-- NOTICE: This method is not an official part of the API yet. +-- This method may change in future. +-- + +function default.can_interact_with_node(player, pos) + if player and player:is_player() then + if minetest.check_player_privs(player, "protection_bypass") then + return true + end + else + return false + end + + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + + if not owner or owner == "" or owner == player:get_player_name() then + return true + end + + -- Is player wielding the right key? + local item = player:get_wielded_item() + if minetest.get_item_group(item:get_name(), "key") == 1 then + local key_meta = item:get_meta() + + if key_meta:get_string("secret") == "" then + local key_oldmeta = item:get_metadata() + if key_oldmeta == "" or not minetest.parse_json(key_oldmeta) then + return false + end + + key_meta:set_string("secret", minetest.parse_json(key_oldmeta).secret) + item:set_metadata("") + end + + return meta:get_string("key_lock_secret") == key_meta:get_string("secret") + end + + return false +end diff --git a/mods/default/furnace.lua b/mods/default/furnace.lua new file mode 100644 index 00000000..e4bc0568 --- /dev/null +++ b/mods/default/furnace.lua @@ -0,0 +1,427 @@ +-- default/furnace.lua + +-- support for MT game translation. +local S = default.get_translator + +-- List of sound handles for active furnace +local furnace_fire_sounds = {} + +-- +-- Formspecs +-- + +function default.get_furnace_active_formspec(fuel_percent, item_percent) + return "size[8,8.5]".. + "list[context;src;2.75,0.5;1,1;]".. + "list[context;fuel;2.75,2.5;1,1;]".. + "image[2.75,1.5;1,1;default_furnace_fire_bg.png^[lowpart:".. + (fuel_percent)..":default_furnace_fire_fg.png]".. + "image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[lowpart:".. + (item_percent)..":gui_furnace_arrow_fg.png^[transformR270]".. + "list[context;dst;4.75,0.96;2,2;]".. + "list[current_player;main;0,4.25;8,1;]".. + "list[current_player;main;0,5.5;8,3;8]".. + "listring[context;dst]".. + "listring[current_player;main]".. + "listring[context;src]".. + "listring[current_player;main]".. + "listring[context;fuel]".. + "listring[current_player;main]".. + default.get_hotbar_bg(0, 4.25) +end + +function default.get_furnace_inactive_formspec() + return "size[8,8.5]".. + "list[context;src;2.75,0.5;1,1;]".. + "list[context;fuel;2.75,2.5;1,1;]".. + "image[2.75,1.5;1,1;default_furnace_fire_bg.png]".. + "image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[transformR270]".. + "list[context;dst;4.75,0.96;2,2;]".. + "list[current_player;main;0,4.25;8,1;]".. + "list[current_player;main;0,5.5;8,3;8]".. + "listring[context;dst]".. + "listring[current_player;main]".. + "listring[context;src]".. + "listring[current_player;main]".. + "listring[context;fuel]".. + "listring[current_player;main]".. + default.get_hotbar_bg(0, 4.25) +end + +-- +-- Node callback functions that are the same for active and inactive furnace +-- + +local function can_dig(pos, player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("fuel") and inv:is_empty("dst") and inv:is_empty("src") +end + +local function allow_metadata_inventory_put(pos, listname, index, stack, player) + if minetest.is_protected(pos, player:get_player_name()) then + return 0 + end + 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", S("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 + +local function allow_metadata_inventory_move(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) + return allow_metadata_inventory_put(pos, to_list, to_index, stack, player) +end + +local function allow_metadata_inventory_take(pos, listname, index, stack, player) + if minetest.is_protected(pos, player:get_player_name()) then + return 0 + end + return stack:get_count() +end + +local function stop_furnace_sound(pos, fadeout_step) + local hash = minetest.hash_node_position(pos) + local sound_ids = furnace_fire_sounds[hash] + if sound_ids then + for _, sound_id in ipairs(sound_ids) do + minetest.sound_fade(sound_id, -1, 0) + end + furnace_fire_sounds[hash] = nil + end +end + +local function 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 + +local function furnace_node_timer(pos, elapsed) + -- + -- Initialize metadata + -- + local meta = minetest.get_meta(pos) + local fuel_time = meta:get_float("fuel_time") or 0 + local src_time = meta:get_float("src_time") or 0 + local fuel_totaltime = meta:get_float("fuel_totaltime") or 0 + + local inv = meta:get_inventory() + local srclist, fuellist + local dst_full = false + + local timer_elapsed = meta:get_int("timer_elapsed") or 0 + meta:set_int("timer_elapsed", timer_elapsed + 1) + + local cookable, cooked + local fuel + + local update = true + while elapsed > 0 and update do + update = false + + srclist = inv:get_list("src") + fuellist = inv:get_list("fuel") + + -- + -- Cooking + -- + + -- Check if we have cookable content + local aftercooked + cooked, aftercooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist}) + cookable = cooked.time ~= 0 + + local el = math.min(elapsed, fuel_totaltime - fuel_time) + if cookable then -- fuel lasts long enough, adjust el to cooking duration + el = math.min(el, cooked.time - src_time) + end + + -- Check if we have enough fuel to burn + if fuel_time < fuel_totaltime then + -- The furnace is currently active and has enough fuel + fuel_time = fuel_time + el + -- If there is a cookable item then check if it is ready yet + if cookable then + src_time = src_time + el + if src_time >= cooked.time then + -- Place result in dst list if possible + if inv:room_for_item("dst", cooked.item) then + inv:add_item("dst", cooked.item) + inv:set_stack("src", 1, aftercooked.items[1]) + src_time = src_time - cooked.time + update = true + else + dst_full = true + end + -- Play cooling sound + minetest.sound_play("default_cool_lava", + {pos = pos, max_hear_distance = 16, gain = 0.07}, true) + else + -- Item could not be cooked: probably missing fuel + update = true + end + end + else + -- Furnace ran out of fuel + if cookable then + -- We need to get new fuel + local afterfuel + fuel, afterfuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist}) + + if fuel.time == 0 then + -- No valid fuel in fuel list + fuel_totaltime = 0 + src_time = 0 + else + -- prevent blocking of fuel inventory (for automatization mods) + local is_fuel = minetest.get_craft_result({method = "fuel", width = 1, items = {afterfuel.items[1]:to_string()}}) + if is_fuel.time == 0 then + table.insert(fuel.replacements, afterfuel.items[1]) + inv:set_stack("fuel", 1, "") + else + -- Take fuel from fuel list + inv:set_stack("fuel", 1, afterfuel.items[1]) + end + -- Put replacements in dst list or drop them on the furnace. + local replacements = fuel.replacements + if replacements[1] then + local leftover = inv:add_item("dst", replacements[1]) + if not leftover:is_empty() then + local above = vector.new(pos.x, pos.y + 1, pos.z) + local drop_pos = minetest.find_node_near(above, 1, {"air"}) or above + minetest.item_drop(replacements[1], nil, drop_pos) + end + end + update = true + fuel_totaltime = fuel.time + (fuel_totaltime - fuel_time) + end + else + -- We don't need to get new fuel since there is no cookable item + fuel_totaltime = 0 + src_time = 0 + end + fuel_time = 0 + end + + elapsed = elapsed - el + end + + if fuel and fuel_totaltime > fuel.time then + fuel_totaltime = fuel.time + end + if srclist and srclist[1]:is_empty() then + src_time = 0 + end + + -- + -- Update formspec, infotext and node + -- + local formspec + local item_state + local item_percent = 0 + if cookable then + item_percent = math.floor(src_time / cooked.time * 100) + if dst_full then + item_state = S("100% (output full)") + else + item_state = S("@1%", item_percent) + end + else + if srclist and not srclist[1]:is_empty() then + item_state = S("Not cookable") + else + item_state = S("Empty") + end + end + + local fuel_state = S("Empty") + local active = false + local result = false + + if fuel_totaltime ~= 0 then + active = true + local fuel_percent = 100 - math.floor(fuel_time / fuel_totaltime * 100) + fuel_state = S("@1%", fuel_percent) + formspec = default.get_furnace_active_formspec(fuel_percent, item_percent) + swap_node(pos, "default:furnace_active") + -- make sure timer restarts automatically + result = true + + -- Play sound every 5 seconds while the furnace is active + if timer_elapsed == 0 or (timer_elapsed + 1) % 5 == 0 then + local sound_id = minetest.sound_play("default_furnace_active", + {pos = pos, max_hear_distance = 16, gain = 0.25}) + local hash = minetest.hash_node_position(pos) + furnace_fire_sounds[hash] = furnace_fire_sounds[hash] or {} + table.insert(furnace_fire_sounds[hash], sound_id) + -- Only remember the 3 last sound handles + if #furnace_fire_sounds[hash] > 3 then + table.remove(furnace_fire_sounds[hash], 1) + end + -- Remove the sound ID automatically from table after 11 seconds + minetest.after(11, function() + if not furnace_fire_sounds[hash] then + return + end + for f=#furnace_fire_sounds[hash], 1, -1 do + if furnace_fire_sounds[hash][f] == sound_id then + table.remove(furnace_fire_sounds[hash], f) + end + end + if #furnace_fire_sounds[hash] == 0 then + furnace_fire_sounds[hash] = nil + end + end) + end + else + if fuellist and not fuellist[1]:is_empty() then + fuel_state = S("@1%", 0) + end + formspec = default.get_furnace_inactive_formspec() + swap_node(pos, "default:furnace") + -- stop timer on the inactive furnace + minetest.get_node_timer(pos):stop() + meta:set_int("timer_elapsed", 0) + + stop_furnace_sound(pos) + end + + + local infotext + if active then + infotext = S("Furnace active") + else + infotext = S("Furnace inactive") + end + infotext = infotext .. "\n" .. S("(Item: @1; Fuel: @2)", item_state, fuel_state) + + -- + -- Set meta values + -- + meta:set_float("fuel_totaltime", fuel_totaltime) + meta:set_float("fuel_time", fuel_time) + meta:set_float("src_time", src_time) + meta:set_string("formspec", formspec) + meta:set_string("infotext", infotext) + + return result +end + +-- +-- Node definitions +-- + +minetest.register_node("default:furnace", { + description = S("Furnace"), + tiles = { + "default_furnace_top.png", "default_furnace_bottom.png", + "default_furnace_side.png", "default_furnace_side.png", + "default_furnace_side.png", "default_furnace_front.png" + }, + paramtype2 = "facedir", + groups = {cracky=2}, + legacy_facedir_simple = true, + is_ground_content = false, + sounds = default.node_sound_stone_defaults(), + + can_dig = can_dig, + + on_timer = furnace_node_timer, + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + inv:set_size('src', 1) + inv:set_size('fuel', 1) + inv:set_size('dst', 4) + furnace_node_timer(pos, 0) + end, + + on_metadata_inventory_move = function(pos) + minetest.get_node_timer(pos):start(1.0) + end, + on_metadata_inventory_put = function(pos) + -- start timer function, it will sort out whether furnace can burn or not. + minetest.get_node_timer(pos):start(1.0) + end, + on_metadata_inventory_take = function(pos) + -- check whether the furnace is empty or not. + minetest.get_node_timer(pos):start(1.0) + end, + on_blast = function(pos) + local drops = {} + default.get_inventory_drops(pos, "src", drops) + default.get_inventory_drops(pos, "fuel", drops) + default.get_inventory_drops(pos, "dst", drops) + drops[#drops+1] = "default:furnace" + minetest.remove_node(pos) + return drops + end, + + allow_metadata_inventory_put = allow_metadata_inventory_put, + allow_metadata_inventory_move = allow_metadata_inventory_move, + allow_metadata_inventory_take = allow_metadata_inventory_take, +}) + +minetest.register_node("default:furnace_active", { + description = S("Furnace"), + tiles = { + "default_furnace_top.png", "default_furnace_bottom.png", + "default_furnace_side.png", "default_furnace_side.png", + "default_furnace_side.png", + { + image = "default_furnace_front_active.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1.5 + }, + } + }, + paramtype2 = "facedir", + light_source = 8, + drop = "default:furnace", + groups = {cracky=2, not_in_creative_inventory=1}, + legacy_facedir_simple = true, + is_ground_content = false, + sounds = default.node_sound_stone_defaults(), + on_timer = furnace_node_timer, + on_destruct = function(pos) + stop_furnace_sound(pos) + end, + + can_dig = can_dig, + + allow_metadata_inventory_put = allow_metadata_inventory_put, + allow_metadata_inventory_move = allow_metadata_inventory_move, + allow_metadata_inventory_take = allow_metadata_inventory_take, +}) + +minetest.register_craft({ + output = "default:furnace", + recipe = { + {"group:stone", "group:stone", "group:stone"}, + {"group:stone", "", "group:stone"}, + {"group:stone", "group:stone", "group:stone"}, + } +}) diff --git a/mods/default/init.lua b/mods/default/init.lua new file mode 100644 index 00000000..993316b8 --- /dev/null +++ b/mods/default/init.lua @@ -0,0 +1,79 @@ +-- Minetest 0.4 mod: default +-- See README.txt for licensing and other information. + +-- The API documentation in here was moved into game_api.txt + +-- Load support for MT game translation. +local S = minetest.get_translator("default") + +-- Definitions made by this mod that other mods can use too +default = {} + +default.LIGHT_MAX = 14 +default.get_translator = S + +-- Check for engine features required by MTG +-- This provides clear error behaviour when MTG is newer than the installed engine +-- and avoids obscure, hard to debug runtime errors. +-- This section should be updated before release and older checks can be dropped +-- when newer ones are introduced. +if ItemStack("").add_wear_by_uses == nil then + error("\nThis version of Minetest Game is incompatible with your engine version ".. + "(which is too old). You should download a version of Minetest Game that ".. + "matches the installed engine version.\n") +end + +-- GUI related stuff +minetest.register_on_joinplayer(function(player) + -- Set formspec prepend + local formspec = [[ + bgcolor[#080808BB;true] + listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF] ]] + local name = player:get_player_name() + local info = minetest.get_player_information(name) + if info.formspec_version > 1 then + formspec = formspec .. "background9[5,5;1,1;gui_formbg.png;true;10]" + else + formspec = formspec .. "background[5,5;1,1;gui_formbg.png;true]" + end + player:set_formspec_prepend(formspec) + + -- Set hotbar textures + player:hud_set_hotbar_image("gui_hotbar.png") + player:hud_set_hotbar_selected_image("gui_hotbar_selected.png") +end) + +function default.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 + +default.gui_survival_form = "size[8,8.5]".. + "list[current_player;main;0,4.25;8,1;]".. + "list[current_player;main;0,5.5;8,3;8]".. + "list[current_player;craft;1.75,0.5;3,3;]".. + "list[current_player;craftpreview;5.75,1.5;1,1;]".. + "image[4.75,1.5;1,1;gui_furnace_arrow_bg.png^[transformR270]".. + "listring[current_player;main]".. + "listring[current_player;craft]".. + default.get_hotbar_bg(0,4.25) + +-- Load files +local default_path = minetest.get_modpath("default") + +dofile(default_path.."/functions.lua") +dofile(default_path.."/trees.lua") +dofile(default_path.."/nodes.lua") +dofile(default_path.."/chests.lua") +dofile(default_path.."/furnace.lua") +dofile(default_path.."/torch.lua") +dofile(default_path.."/tools.lua") +dofile(default_path.."/item_entity.lua") +dofile(default_path.."/craftitems.lua") +dofile(default_path.."/crafting.lua") +dofile(default_path.."/mapgen.lua") +dofile(default_path.."/aliases.lua") +dofile(default_path.."/legacy.lua") diff --git a/mods/default/item_entity.lua b/mods/default/item_entity.lua new file mode 100644 index 00000000..3e6cc9db --- /dev/null +++ b/mods/default/item_entity.lua @@ -0,0 +1,79 @@ +-- mods/default/item_entity.lua + +local builtin_item = minetest.registered_entities["__builtin:item"] + +local item = { + set_item = function(self, itemstring) + builtin_item.set_item(self, itemstring) + + local stack = ItemStack(itemstring) + local itemdef = minetest.registered_items[stack:get_name()] + if itemdef and itemdef.groups.flammable ~= 0 then + self.flammable = itemdef.groups.flammable + end + end, + + burn_up = function(self) + -- disappear in a smoke puff + local p = self.object:get_pos() + self.object:remove() + minetest.sound_play("default_item_smoke", { + pos = p, + gain = 1.0, + max_hear_distance = 8, + }, true) + minetest.add_particlespawner({ + amount = 3, + time = 0.1, + minpos = {x = p.x - 0.1, y = p.y + 0.1, z = p.z - 0.1 }, + maxpos = {x = p.x + 0.1, y = p.y + 0.2, z = p.z + 0.1 }, + minvel = {x = 0, y = 2.5, z = 0}, + maxvel = {x = 0, y = 2.5, z = 0}, + minacc = {x = -0.15, y = -0.02, z = -0.15}, + maxacc = {x = 0.15, y = -0.01, z = 0.15}, + minexptime = 4, + maxexptime = 6, + minsize = 5, + maxsize = 5, + collisiondetection = true, + texture = "default_item_smoke.png" + }) + end, + + on_step = function(self, dtime, ...) + builtin_item.on_step(self, dtime, ...) + + if self.flammable then + -- flammable, check for igniters every 10 s + self.ignite_timer = (self.ignite_timer or 0) + dtime + if self.ignite_timer > 10 then + self.ignite_timer = 0 + + local pos = self.object:get_pos() + if pos == nil then + return -- object already deleted + end + local node = minetest.get_node_or_nil(pos) + if not node then + return + end + + -- Immediately burn up flammable items in lava + if minetest.get_item_group(node.name, "lava") > 0 then + self:burn_up() + else + -- otherwise there'll be a chance based on its igniter value + local burn_chance = self.flammable + * minetest.get_item_group(node.name, "igniter") + if burn_chance > 0 and math.random(0, burn_chance) ~= 0 then + self:burn_up() + end + end + end + end + end, +} + +-- set defined item as new __builtin:item, with the old one as fallback table +setmetatable(item, { __index = builtin_item }) +minetest.register_entity(":__builtin:item", item) diff --git a/mods/default/legacy.lua b/mods/default/legacy.lua new file mode 100644 index 00000000..a2d812d4 --- /dev/null +++ b/mods/default/legacy.lua @@ -0,0 +1,49 @@ +-- mods/default/legacy.lua + +-- Horrible stuff to support old code registering falling nodes +-- Don't use this and never do what this does, it's completely wrong! +-- (More specifically, the client and the C++ code doesn't get the group) +function default.register_falling_node(nodename, texture) + minetest.log("error", debug.traceback()) + minetest.log('error', "WARNING: default.register_falling_node is deprecated") + if minetest.registered_nodes[nodename] then + minetest.registered_nodes[nodename].groups.falling_node = 1 + end +end + +function default.spawn_falling_node(p, nodename) + spawn_falling_node(p, nodename) +end + +-- Liquids +WATER_ALPHA = minetest.registered_nodes["default:water_source"].alpha +WATER_VISC = minetest.registered_nodes["default:water_source"].liquid_viscosity +LAVA_VISC = minetest.registered_nodes["default:lava_source"].liquid_viscosity +LIGHT_MAX = default.LIGHT_MAX + +-- Formspecs +default.gui_suvival_form = default.gui_survival_form +default.gui_bg = "" +default.gui_bg_img = "" +default.gui_slots = "" + +-- Players +if minetest.get_modpath("player_api") then + default.registered_player_models = player_api.registered_models + default.player_register_model = player_api.register_model + default.player_attached = player_api.player_attached + default.player_get_animation = player_api.get_animation + default.player_set_model = player_api.set_model + default.player_set_textures = player_api.set_textures + default.player_set_animation = player_api.set_animation +end + +-- Chests +default.register_chest = default.chest.register_chest + +-- Check for a volume intersecting protection +function default.intersects_protection(minp, maxp, player_name, interval) + minetest.log("warning", "default.intersects_protection() is " .. + "deprecated, use minetest.is_area_protected() instead.") + return minetest.is_area_protected(minp, maxp, player_name, interval) +end diff --git a/mods/default/license.txt b/mods/default/license.txt new file mode 100644 index 00000000..3c95c1b4 --- /dev/null +++ b/mods/default/license.txt @@ -0,0 +1,157 @@ +License of source code +---------------------- + +GNU Lesser General Public License, version 2.1 +Copyright (C) 2011-2018 celeron55, Perttu Ahola +Copyright (C) 2011-2018 Various Minetest developers and contributors + +This program is free software; you can redistribute it and/or modify it under the terms +of the GNU Lesser General Public License as published by the Free Software Foundation; +either version 2.1 of the License, or (at your option) any later version. + +This program 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 Lesser General Public License for more details: +https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + + +Licenses of media (textures, models and sounds) +----------------------------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2010-2018: + + celeron55, Perttu Ahola + Cisoun + G4JC + VanessaE + RealBadAngel + Calinou + MirceaKitsune + Jordach + PilzAdam + jojoa1997 + InfinityProject + Splizard + Zeg9 + paramat + BlockMen + sofar + Neuromancer + Gambit + asl97 + KevDoy + Mito551 + GreenXenith + kaeza + kilbith + tobyplowy + CloudyProton + TumeniNodes + Mossmanikin + random-geek + Extex101 + An0n3m0us + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ + +----------------------- + +Attribution 3.0 Unported (CC BY 3.0) + +Copyright (C) 2009 cmusounddesign +Copyright (C) 2010 Tomlija +Copyright (C) 2010 lsprice +Copyright (C) 2014 sonictechtonic +Copyright (C) 2015 yadronoff +Copyright (C) 2007 HerbertBoland +Copyright (C) 2006 AGFX + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by/3.0/ + +----------------------- + +CC0 1.0 Universal (CC0 1.0) Public Domain Dedication + +Iwan Gabovitch +Ottomaani138 +Ogrebane +blukotek +Sevin7 +Yoyodaman234 +Ryding + +No Copyright + +The person who associated a work with this deed has dedicated the work to the +public domain by waiving all of his or her rights to the work worldwide under +copyright law, including all related and neighboring rights, to the extent +allowed by law. + +You can copy, modify, distribute and perform the work, even for commercial +purposes, all without asking permission. See Other Information below. + +Other Information: + +In no way are the patent or trademark rights of any person affected by CC0, nor +are the rights that other persons may have in the work or in how the work is +used, such as publicity or privacy rights. + +Unless expressly stated otherwise, the person who associated a work with this +deed makes no warranties about the work, and disclaims liability for all uses +of the work, to the fullest extent permitted by applicable law. + +When using or citing the work, you should not imply endorsement by the author +or the affirmer. + +For more details: +https://creativecommons.org/publicdomain/zero/1.0/ diff --git a/mods/default/locale/default.de.tr b/mods/default/locale/default.de.tr new file mode 100644 index 00000000..9bee6b8a --- /dev/null +++ b/mods/default/locale/default.de.tr @@ -0,0 +1,220 @@ +# textdomain: default +Locked Chest=Abgeschlossene Truhe +Locked Chest (owned by @1)=Abgeschlossene Truhe (Eigentum von @1) +You do not own this chest.=Ihnen gehört diese Truhe nicht. +a locked chest=eine abgeschlossene Truhe +Chest=Truhe +Write=Schreiben +Read=Lesen +Title:=Titel: +Contents:=Inhalt: +Save=Speichern +by @1=von @1 +Page @1 of @2=Seite @1 von @2 +The book you were writing to mysteriously disappeared.=Das Buch, an dem Sie geschrieben haben, ist auf mysteriöse Weise verschwunden. +"@1" by @2=„@1“ von @2 +Blueberries=Blaubeeren +Book=Buch +Book with Text=Buch mit Text +Bronze Ingot=Bronzebarren +Clay Brick=Tonziegel +Clay Lump=Tonklumpen +Coal Lump=Kohleklumpen +Copper Ingot=Kupferbarren +Copper Lump=Kupferklumpen +Diamond=Diamant +Flint=Feuerstein +Gold Ingot=Goldbarren +Gold Lump=Goldklumpen +Iron Lump=Eisenklumpen +Mese Crystal=Mesekristall +Mese Crystal Fragment=Mesekristallfragment +Obsidian Shard=Obsidianscherbe +Paper=Papier +Steel Ingot=Stahlbarren +Stick=Stock +Tin Ingot=Zinnbarren +Tin Lump=Zinnklumpen +Furnace is empty=Ofen ist leer +100% (output full)=100% (Ausgabe voll) +@1%=@1% +Not cookable=Nicht kochbar +Empty=Leer +Furnace active=Ofen aktiv +Furnace inactive=Ofen inaktiv +(Item: @1; Fuel: @2)=(Gegenstand: @1; Brennstoff: @2) +Furnace=Ofen +Stone=Stein +Cobblestone=Kopfsteinpflaster +Stone Brick=Steinziegel +Stone Block=Steinblock +Mossy Cobblestone=Moosiges Kopfsteinpflaster +Desert Stone=Wüstenstein +Desert Cobblestone=Wüstenkopfsteinpflaster +Desert Stone Brick=Wüstensteinziegel +Desert Stone Block=Wüstensteinblock +Sandstone=Sandstein +Sandstone Brick=Sandsteinziegel +Sandstone Block=Sandsteinblock +Desert Sandstone=Wüstensandstein +Desert Sandstone Brick=Wüstensandsteinziegel +Desert Sandstone Block=Wüstensandsteinblock +Silver Sandstone=Silbersandstein +Silver Sandstone Brick=Silbersandsteinziegel +Silver Sandstone Block=Silbersandsteinblock +Obsidian=Obsidian +Obsidian Brick=Obsidianziegel +Obsidian Block=Obsidianblock +Dirt=Erde +Dirt with Grass=Erde mit Gras +Dirt with Grass and Footsteps=Erde mit Gras und Fußstapfen +Dirt with Savanna Grass=Erde mit Savannengras +Dirt with Snow=Erde mit Schnee +Dirt with Rainforest Litter=Erde mit Regenwaldboden +Dirt with Coniferous Litter=Erde mit Nadelwaldboden +Savanna Dirt=Savannenerde +Savanna Dirt with Savanna Grass=Savannenerde mit Savannengras +Permafrost=Permafrost +Permafrost with Stones=Permafrost mit Steinen +Permafrost with Moss=Permafrost mit Moos +Sand=Sand +Desert Sand=Wüstensand +Silver Sand=Silbersand +Gravel=Kies +Clay=Ton +Snow=Schnee +Snow Block=Schneeblock +Ice=Eis +Cave Ice=Höhleneis +Apple Tree=Apfelbaum +Apple Wood Planks=Apfelbaumplanken +Apple Tree Sapling=Apfelbaumsetzling +Apple Tree Leaves=Apfelbaumblätter +Apple=Apfel +Apple Marker=Apfelmarkierung +Jungle Tree=Dschungelbaum +Jungle Wood Planks=Dschungelholzplanken +Jungle Tree Leaves=Dschungelbaumblätter +Jungle Tree Sapling=Dschungelbaumsetzling +Emergent Jungle Tree Sapling=Hervorstehender Dschungelbaumsetzling +Pine Tree=Kiefernbaum +Pine Wood Planks=Kiefernholzplanken +Pine Needles=Kiefernnadeln +Pine Tree Sapling=Kiefernbaumsetzling +Acacia Tree=Akazienbaum +Acacia Wood Planks=Akazienholzplanken +Acacia Tree Leaves=Akazienbaumblätter +Acacia Tree Sapling=Akazienbaumsetzling +Aspen Tree=Espenbaum +Aspen Wood Planks=Espenholzplanken +Aspen Tree Leaves=Espenbaumblätter +Aspen Tree Sapling=Esepenbaumsetzling +Coal Ore=Kohleerz +Coal Block=Kohleblock +Iron Ore=Eisenerz +Steel Block=Stahlblock +Copper Ore=Kupfererz +Copper Block=Kupferblock +Tin Ore=Zinnerz +Tin Block=Zinnblock +Bronze Block=Bronzeblock +Mese Ore=Meseerz +Mese Block=Meseblock +Gold Ore=Golderz +Gold Block=Goldblock +Diamond Ore=Diamanterz +Diamond Block=Diamantblock +Cactus=Kaktus +Large Cactus Seedling=Großer Kaktussämling +Papyrus=Papyrus +Dry Shrub=Trockener Busch +Jungle Grass=Dschungelgras +Grass=Gras +Savanna Grass=Savannengras +Fern=Farn +Marram Grass=Dünengras +Bush Stem=Buschstamm +Bush Leaves=Buschblätter +Bush Sapling=Buschsetzling +Blueberry Bush Leaves with Berries=Blaubeerbuschblätter mit Beeren +Blueberry Bush Leaves=Blaubeerbuschblätter +Blueberry Bush Sapling=Blaubeerbuschsetzling +Acacia Bush Stem=Akazienbuschstamm +Acacia Bush Leaves=Akazienbuschblätter +Acacia Bush Sapling=Akazienbuschsetzling +Pine Bush Stem=Kiefernbuschstamm +Pine Bush Needles=Kiefernbuschnadeln +Pine Bush Sapling=Kiefernbuschsetzling +Kelp=Seetang +Green Coral=Grüne Koralle +Pink Coral=Rosa Koralle +Cyan Coral=Türkise Koralle +Brown Coral=Braune Koralle +Orange Coral=Orange Koralle +Coral Skeleton=Korallenskelett +Water Source=Wasserquelle +Flowing Water=Fließendes Wasser +River Water Source=Flusswasserquelle +Flowing River Water=Fließendes Flusswasser +Lava Source=Lavaquelle +Flowing Lava=Fließende Lava +Empty Bookshelf=Leeres Bücherregal +Bookshelf (@1 written, @2 empty books)=Bücherregal (@1 beschriebene, @2 leere Bücher) +Bookshelf=Bücherregal +Text too long=Text zu lang +"@1"=„@1“ +Wooden Sign=Holzschild +Steel Sign=Stahlschild +Wooden Ladder=Holzleiter +Steel Ladder=Stahlleiter +Apple Wood Fence=Apfelholzzaun +Acacia Wood Fence=Akazienholzzaun +Jungle Wood Fence=Dschungelholzzaun +Pine Wood Fence=Kiefernholzzaun +Aspen Wood Fence=Espenholzzaun +Apple Wood Fence Rail=Apfelholzzaungeländer +Acacia Wood Fence Rail=Akazienholzzaungeländer +Jungle Wood Fence Rail=Dschungelholzzaungeländer +Pine Wood Fence Rail=Kiefernholzzaungeländer +Aspen Wood Fence Rail=Espenholzzaungeländer +Glass=Glas +Obsidian Glass=Obsidianglas +Brick Block=Ziegelblock +Mese Lamp=Meselampe +Apple Wood Mese Post Light=Apfelholzmesestandlampe +Acacia Wood Mese Post Light=Akazienholzmesestandlampe +Jungle Wood Mese Post Light=Dschungelholzmesestandlampe +Pine Wood Mese Post Light=Kiefernholzmesestandlampe +Aspen Wood Mese Post Light=Espenholzmesestandlampe +Cloud=Wolke +Wooden Pickaxe=Holzspitzhacke +Stone Pickaxe=Steinspitzhacke +Bronze Pickaxe=Bronzespitzhacke +Steel Pickaxe=Stahlspitzhacke +Mese Pickaxe=Mesespitzhacke +Diamond Pickaxe=Diamantspitzhacke +Wooden Shovel=Holzschaufel +Stone Shovel=Steinschaufel +Bronze Shovel=Bronzeschaufel +Steel Shovel=Stahlschaufel +Mese Shovel=Meseschaufel +Diamond Shovel=Diamantschaufel +Wooden Axe=Holzaxt +Stone Axe=Steinaxt +Bronze Axe=Bronzeaxt +Steel Axe=Stahlaxt +Mese Axe=Meseaxt +Diamond Axe=Diamantaxt +Wooden Sword=Holzschwert +Stone Sword=Steinschwert +Bronze Sword=Bronzeschwert +Steel Sword=Stahlschwert +Mese Sword=Meseschwert +Diamond Sword=Diamantschwert +Torch=Fackel +@1 will intersect protection on growth.=@1 wird bei Wachstum mit geschützter Zone überlappen. + + +##### not used anymore ##### + +Mese Post Light=Mesestandlampe diff --git a/mods/default/locale/default.eo.tr b/mods/default/locale/default.eo.tr new file mode 100644 index 00000000..d50f3b43 --- /dev/null +++ b/mods/default/locale/default.eo.tr @@ -0,0 +1,220 @@ +# textdomain: default +Locked Chest=Ŝlosita Kesto +Locked Chest (owned by @1)=Ŝlosita Kesto (de @1) +You do not own this chest.=Vi ne posedas ĉi tiun keston. +a locked chest=ŝlosita kesto +Chest=Kesto +Write=Skribi +Read=Legi +Title:=Titolo: +Contents:=Enhavo: +Save=Konservi +by @1=per @1 +Page @1 of @2=Paĝo @1 el @2 +The book you were writing to mysteriously disappeared.=La libro, kiun vi skribis, mistere malaperis. +"@1" by @2="@1" per @2 +Blueberries=Mirteloj +Book=Libro +Book with Text=Libro kun Teksto +Bronze Ingot=Bronza Ingoto +Clay Brick=Argila Briko +Clay Lump=Argila Bulo +Coal Lump=Karba Bulo +Copper Ingot=Kupra Ingoto +Copper Lump=Kupra Bulo +Diamond=Diamanto +Flint=Siliko +Gold Ingot=Ora Ingoto +Gold Lump=Ora Bulo +Iron Lump=Fera Bulo +Mese Crystal=Mesea Kristalo +Mese Crystal Fragment=Mesea Kristala Ero +Obsidian Shard=Obsidiana Peceto +Paper=Papero +Steel Ingot=Ŝtala Ingoto +Stick=Bastono +Tin Ingot=Stana Ingoto +Tin Lump=Stana Bulo +Furnace is empty=Forno estas malplena +100% (output full)=100% (plena eligo) +@1%=@1% +Not cookable=Nekuirebla +Empty=Malplena +Furnace active=Forno laboras +Furnace inactive=Forno ne laboras +(Item: @1; Fuel: @2)=(Objekto: @1; Brulaĵo: @2) +Furnace=Forno +Stone=Ŝtono +Cobblestone=Pavimŝtono +Stone Brick=Ŝtona Briko +Stone Block=Ŝtona Bloko +Mossy Cobblestone=Muska Pavimŝtono +Desert Stone=Dezerta Ŝtono +Desert Cobblestone=Dezerta Pavimŝtono +Desert Stone Brick=Dezerta Ŝtona Briko +Desert Stone Block=Dezerta Ŝtona Bloko +Sandstone=Sablaŝtono +Sandstone Brick=Sablaŝtono Briko +Sandstone Block=Sablaŝtono Bloko +Desert Sandstone=Dezerta Sablaŝtono +Desert Sandstone Brick=Dezerta Sablaŝtono Briko +Desert Sandstone Block=Dezerta Sablaŝtono Bloko +Silver Sandstone=Arĝenta Sablaŝtono +Silver Sandstone Brick=Arĝenta Sablaŝtono Briko +Silver Sandstone Block=Arĝenta Sablaŝtono Bloko +Obsidian=Obsidiano +Obsidian Brick=Obsidiana Briko +Obsidian Block=Obsidiana Bloko +Dirt=Tero +Dirt with Grass=Tero kun Herbo +Dirt with Grass and Footsteps=Tero kun Herbo kaj Piedpaŝoj +Dirt with Savanna Grass=Tero kun Savana Herbo +Dirt with Snow=Tero kun Neĝo +Dirt with Rainforest Litter=Tero kun Pluvarbara Folioj +Dirt with Coniferous Litter=Tero kun Koniferaj Folioj +Savanna Dirt=Savana Tero +Savanna Dirt with Savanna Grass=Savana Tero kun Savana Herbo +Permafrost=Ĉiamfrosto +Permafrost with Stones=Ĉiamfrosto kun Ŝtonoj +Permafrost with Moss=Ĉiamfrosto kun Musko +Sand=Sablo +Desert Sand=Dezerta Sablo +Silver Sand=Arĝenta Sablo +Gravel=Gruzo +Clay=Argilo +Snow=Neĝo +Snow Block=Neĝa Bloko +Ice=Glacio +Cave Ice=Kaverna Glacio +Apple Tree=Pomarbo +Apple Wood Planks=Pomarbaj Lignaj Tabuloj +Apple Tree Sapling=Pomarba Arbido +Apple Tree Leaves=Pomarbaj Folioj +Apple=Pomo +Apple Marker=Poma Marko +Jungle Tree=Ĝangala Arbo +Jungle Wood Planks=Ĝangalaj Lignaj Tabuloj +Jungle Tree Leaves=Ĝangalaj Arbaj Folioj +Jungle Tree Sapling=Ĝangala Arba Arbido +Emergent Jungle Tree Sapling=Nova Ĝangala Arba Arbido +Pine Tree=Pino +Pine Wood Planks=Pinaj Lignaj Tabuloj +Pine Needles=Pinpingloj +Pine Tree Sapling=Pina Arbido +Acacia Tree=Akacio +Acacia Wood Planks=Akaciaj Lignaj Tabuloj +Acacia Tree Leaves=Akaciaj Folioj +Acacia Tree Sapling=Akacia Arbido +Aspen Tree=Tremolo +Aspen Wood Planks=Tremolaj Lignaj Tabuloj +Aspen Tree Leaves=Tremolaj Folioj +Aspen Tree Sapling=Tremola Arbido +Coal Ore=Karba Minaĵo +Coal Block=Karba Bloko +Iron Ore=Fera Minaĵo +Steel Block=Ŝtala Bloko +Copper Ore=Kupra Minaĵo +Copper Block=Kupra Bloko +Tin Ore=Stana Minaĵo +Tin Block=Stana Bloko +Bronze Block=Bronza Bloko +Mese Ore=Mesea Minaĵo +Mese Block=Mesea Bloko +Gold Ore=Ora Minaĵo +Gold Block=Ora Bloko +Diamond Ore=Diamanta Minaĵo +Diamond Block=Diamanta Bloko +Cactus=Kakto +Large Cactus Seedling=Granda Kakta Kreskaĵo +Papyrus=Papiruso +Dry Shrub=Seka Arbetaĵo +Jungle Grass=Ĝangala Herbo +Grass=Herbo +Savanna Grass=Savana Herbo +Fern=Filiko +Marram Grass=Amofilo +Bush Stem=Arbateĵa Tubo +Bush Leaves=Arbateĵaj Folioj +Bush Sapling=Arbateĵa Arbido +Blueberry Bush Leaves with Berries=Mirtelaj Arbateĵaj Folioj kaj Beroj +Blueberry Bush Leaves=Mirtelaj Arbateĵaj Folioj +Blueberry Bush Sapling=Mirtela Arbateĵa Arbido +Acacia Bush Stem=Akacia Arbateĵa Tubo +Acacia Bush Leaves=Akaciaj Arbateĵaj Folioj +Acacia Bush Sapling=Akacia Arbateĵa Arbido +Pine Bush Stem=Pina Arbateĵa Tubo +Pine Bush Needles=Pinaj Arbateĵaj Pingloj +Pine Bush Sapling=Pina Arbateĵa Arbido +Kelp=Fuko +Green Coral=Verda Koralo +Pink Coral=Rozkolora Koralo +Cyan Coral=Bluverda Koralo +Brown Coral=Bruna Koralo +Orange Coral=Oranĝkolora Koralo +Coral Skeleton=Korala Framo +Water Source=Akva Fonto +Flowing Water=Flua Akvo +River Water Source=Rivera Akva Fonto +Flowing River Water=Flua Rivera Akvo +Lava Source=Lafa Fonto +Flowing Lava=Flua Lafa +Empty Bookshelf=Malplena Librobreto +Bookshelf (@1 written, @2 empty books)=Librobreto (@1 skriba(j), @2 malplena(j) libro(j)) +Bookshelf=Librobreto +Text too long=Tro longa teksto +Wooden Sign=Ligna Signo +Steel Sign=Ŝtala Signo +Wooden Ladder=Ligna Ŝtupetaro +Steel Ladder=Ŝtala Ŝtupetaro +Apple Wood Fence=Poma Ligna Barilo +Acacia Wood Fence=Akacia Ligna Barilo +Jungle Wood Fence=Ĝangala Ligna Barilo +Pine Wood Fence=Pina Ligna Barilo +Aspen Wood Fence=Tremola Ligna Barilo +Apple Wood Fence Rail=Poma Ligna Barila Relo +Acacia Wood Fence Rail=Akacia Ligna Barila Relo +Jungle Wood Fence Rail=Ĝangala Ligna Barila Relo +Pine Wood Fence Rail=Pina Ligna Barila Relo +Aspen Wood Fence Rail=Tremola Ligna Barila Relo +Glass=Vitro +Obsidian Glass=Obsidiana Vitro +Brick Block=Brika Bloko +Mese Lamp=Mesea Lampo +Apple Wood Mese Post Light=Poma Ligna Mesea Fosta Lampo +Acacia Wood Mese Post Light=Akacia Ligna Mesea Fosta Lampo +Jungle Wood Mese Post Light=Ĝangala Ligna Mesea Fosta Lampo +Pine Wood Mese Post Light=Pina Ligna Mesea Fosta Lampo +Aspen Wood Mese Post Light=Tremola Ligna Mesea Fosta Lampo +Cloud=Nubo +Wooden Pickaxe=Ligna Pioĉo +Stone Pickaxe=Ŝtona Pioĉo +Bronze Pickaxe=Bronza Pioĉo +Steel Pickaxe=Ŝtala Pioĉo +Mese Pickaxe=Mesea Pioĉo +Diamond Pickaxe=Diamanta Pioĉo +Wooden Shovel=Ligna Fosilo +Stone Shovel=Ŝtona Fosilo +Bronze Shovel=Bronza Fosilo +Steel Shovel=Ŝtala Fosilo +Mese Shovel=Mesea Fosilo +Diamond Shovel=Diamanta Fosilo +Wooden Axe=Ligna Hakilo +Stone Axe=Ŝtona Hakilo +Bronze Axe=Bronza Hakilo +Steel Axe=Ŝtala Hakilo +Mese Axe=Mesea Hakilo +Diamond Axe=Diamanta Hakilo +Wooden Sword=Ligna Glavo +Stone Sword=Ŝtona Glavo +Bronze Sword=Bronza Glavo +Steel Sword=Ŝtala Glavo +Mese Sword=Mesea Glavo +Diamond Sword=Diamanta Glavo +Torch=Torĉo +@1 will intersect protection on growth.=@1 sekcos protekton dum kresko. + + +##### not used anymore ##### + +Mese Post Light=Mesea Fosta Lampo + diff --git a/mods/default/locale/default.es.tr b/mods/default/locale/default.es.tr new file mode 100644 index 00000000..d08c2d2e --- /dev/null +++ b/mods/default/locale/default.es.tr @@ -0,0 +1,224 @@ +# textdomain: default +Locked Chest=Cofre cerrado +Locked Chest (owned by @1)=Cofre cerrado (propiedad de @1) +You do not own this chest.=Este cofre no te pertenece. +a locked chest=un cofre cerrado +Chest=Cofre +Write= +Read= +Title:=Título: +Contents:=Contenidos: +Save=Guardar +by @1=por @1 +Page @1 of @2=Página @1 de @2 +The book you were writing to mysteriously disappeared.= +"@1" by @2="@1" por @2 +Blueberries=Arándanos +Book=Libro +Book with Text=Libro escrito +Bronze Ingot=Lingote de bronce +Clay Brick=Ladrillo de arcilla +Clay Lump=Bola de arcilla +Coal Lump=Carbón +Copper Ingot=Lingote de cobre +Copper Lump=Pepita de cobre +Diamond=Diamante +Flint=Pedernal +Gold Ingot=Lingote de oro +Gold Lump=Pepita de oro +Iron Lump=Pepita de hierro +Mese Crystal=Cristal de mese +Mese Crystal Fragment=Fragmento de cristal de mese +Obsidian Shard=Esquirla de obsidiana +Paper=Papel +Steel Ingot=Lingote de acero +Stick=Palo +Tin Ingot=Lingote de estaño +Tin Lump=Pepita de estaño +Furnace is empty=El horno está vacío +100% (output full)=100% (salida completa) +@1%=@1% +Not cookable=No se puede cocinar +Empty=Vacío +Furnace active=Horno activado +Furnace inactive=Horno desactivado +(Item: @1; Fuel: @2)=(Objeto: @1; Combustible: @2) +Furnace=Horno +Stone=Piedra +Cobblestone=Adoquín +Stone Brick=Ladrillo de piedra +Stone Block=Bloque de piedra +Mossy Cobblestone=Adoquín musgoso +Desert Stone=Piedra desértica +Desert Cobblestone=Adoquín desértico +Desert Stone Brick=Ladrillo de piedra desértica +Desert Stone Block=Bloque de piedra desértica +Sandstone=Piedra arenisca +Sandstone Brick=Ladrillo de arenisca +Sandstone Block=Bloque de arenisca +Desert Sandstone=Piedra arenisca desértica +Desert Sandstone Brick=Ladrillo de arenisca desértica +Desert Sandstone Block=Bloque de arenisca deśertica +Silver Sandstone=Piedra arenisca plateada +Silver Sandstone Brick=Ladrillo de arenisca plateada +Silver Sandstone Block=Bloque de arenisca plateada +Obsidian=Obsidiana +Obsidian Brick=Ladrillo de obsidiana +Obsidian Block=Bloque de obsidiana +Dirt=Tierra +Dirt with Grass=Tierra con pasto +Dirt with Grass and Footsteps=Tierra con pasto y pisadas +Dirt with Savanna Grass=Tierra con hierba de sabana +Dirt with Snow=Tierra con nieve +Dirt with Rainforest Litter=Tierra con hojarasca de selva tropical +Dirt with Coniferous Litter=Tierra con hojarasca de coníferas +Savanna Dirt=Tierra de sabana +Savanna Dirt with Savanna Grass=Tierra de sabana con hierba de sabana +Permafrost=Permafrost +Permafrost with Stones=Permafrost pedregoso +Permafrost with Moss=Permafrost musgoso +Sand=Arena +Desert Sand=Arena desértica +Silver Sand=Arena plateada +Gravel=Grava +Clay=Arcilla +Snow=Nieve +Snow Block=Bloque de nieve +Ice=Hielo +Cave Ice=Hielo de cueva +Apple Tree=Madera de manzano +Apple Wood Planks=Tablas de manzano +Apple Tree Sapling=Retoño de manzano +Apple Tree Leaves=Hojas de manzano +Apple=Manzana +Apple Marker=Marcador de manzano +Jungle Tree=Madera de árbol tropical +Jungle Wood Planks=Tablas de madera tropical +Jungle Tree Leaves=Hojas de árbol tropical +Jungle Tree Sapling=Retoño de árbol tropical +Emergent Jungle Tree Sapling=Retoño de árbol tropical +Pine Tree=Madera de pino +Pine Wood Planks=Tablas de pino +Pine Needles=Agujas de pino +Pine Tree Sapling=Retoño de pino +Acacia Tree=Madera de acacia +Acacia Wood Planks=Tablas de acacia +Acacia Tree Leaves=Hojas de acacia +Acacia Tree Sapling=Retoño de acacia +Aspen Tree=Madera de álamo +Aspen Wood Planks=Tablas de álamo +Aspen Tree Leaves=Hojas de álamo +Aspen Tree Sapling=Retoño de álamo +Coal Ore=Mineral de carbón +Coal Block=Bloque de carbón +Iron Ore=Mineral de hierro +Steel Block=Bloque de acero +Copper Ore=Mineral de cobre +Copper Block=Bloque de cobre +Tin Ore=Mineral de estaño +Tin Block=Bloque de estaño +Bronze Block=Bloque de bronce +Mese Ore=Mineral de mese +Mese Block=Bloque de mese +Gold Ore=Mineral de oro +Gold Block=Bloque de oro +Diamond Ore=Mineral de diamante +Diamond Block=Bloque de diamante +Cactus=Cáctus +Large Cactus Seedling=Vástago grande de cactus +Papyrus=Papiro +Dry Shrub=Arbusto seco +Jungle Grass=Pasto de jungla +Grass=Pasto +Savanna Grass=Hierba de sabana +Fern=Helecho +Marram Grass=Carrizo +Bush Stem=Tallo de arbusto +Bush Leaves=Hojas de arbusto +Bush Sapling=Retoño de arbusto +Blueberry Bush Leaves with Berries=Hojas de arbusto de arándano con bayas +Blueberry Bush Leaves=Hojas de arbusto de arándano +Blueberry Bush Sapling=Retoño de arbusto de arándano +Acacia Bush Stem=Tallo de arbusto de acacia +Acacia Bush Leaves=Hojas de arbusto de acacia +Acacia Bush Sapling=Retoño de arbusto de acacia +Pine Bush Stem=Tallo de arbusto de pino +Pine Bush Needles=Agujas de arbusto de pino +Pine Bush Sapling=Retoño de arbusto de pino +Kelp=Alga marina +Green Coral=Coral verde +Pink Coral=Coral rosa +Cyan Coral=Coral cián +Brown Coral=Coral café +Orange Coral=Coral naranja +Coral Skeleton=Esqueleto de coral +Water Source=Fuente de agua +Flowing Water=Fluído de agua +River Water Source=Fuente de agua de río +Flowing River Water=Fluído de agua de río +Lava Source=Fuente de lava +Flowing Lava=Fluído de lava +Empty Bookshelf=Librería vacía +Bookshelf (@1 written, @2 empty books)=Librería(@1 escritos, @2 libros en blanco) +Bookshelf=Librería +Text too long=Texto demasiado largo +"@1"="@1" +Wooden Sign=Cartel de madera +Steel Sign=Cartel de acero +Wooden Ladder=Escalera de madera +Steel Ladder=Escalera de acero +Apple Wood Fence=Cerca de manzano +Acacia Wood Fence=Cerca de acacia +Jungle Wood Fence=Cerca de madera tropical +Pine Wood Fence=Cerca de pino +Aspen Wood Fence=Cerca de álamo +Apple Wood Fence Rail=Listones de manzano para cerca +Acacia Wood Fence Rail=Listones de acacia para cerca +Jungle Wood Fence Rail=Listones de madera tropical para cerca +Pine Wood Fence Rail=Listones de pino para cerca +Aspen Wood Fence Rail=Listones de álamo para cerca +Glass=Vidrio +Obsidian Glass=Vidrio de obsidiana +Brick Block=Bloque de ladrillo +Mese Lamp=Lámpara de mese +Apple Wood Mese Post Light=Poste de luz de madera de manzano +Acacia Wood Mese Post Light=Poste de luz de madera de acacia +Jungle Wood Mese Post Light=Poste de luz de madera de jungla +Pine Wood Mese Post Light=Poste de luz de madera de pino +Aspen Wood Mese Post Light=Poste de luz de madera de álamo +Cloud=Nube +Wooden Pickaxe=Pico de madera +Stone Pickaxe=Pico de piedra +Bronze Pickaxe=Pico de bronce +Steel Pickaxe=Pico de acero +Mese Pickaxe=Pico de mese +Diamond Pickaxe=Pico de diamante +Wooden Shovel=Pala de madera +Stone Shovel=Pala de piedra +Bronze Shovel=Pala de bronce +Steel Shovel=Pala de acero +Mese Shovel=Pala de mese +Diamond Shovel=Pala de diamante +Wooden Axe=Hacha de madera +Stone Axe=Hacha de piedra +Bronze Axe=Hacha de bronce +Steel Axe=Hacha de acero +Mese Axe=Hacha de mese +Diamond Axe=Hacha de diamante +Wooden Sword=Espada de madera +Stone Sword=Espada de piedra +Bronze Sword=Espada de bronce +Steel Sword=Espada de acero +Mese Sword=Espada de mese +Diamond Sword=Espada de diamante +Torch=Antorcha +@1 will intersect protection on growth.=@1 intersectará con protección cuando crezca. + + +##### not used anymore ##### + +Dirt with Dry Grass=Tierra con pasto seco +Dry Dirt=Tierra Seca +Dry Dirt with Dry Grass=Tierra seca con pasto seco +Dry Grass=Pasto seco +Mese Post Light=Poste de luz de mese diff --git a/mods/default/locale/default.fr.tr b/mods/default/locale/default.fr.tr new file mode 100644 index 00000000..c5e5bf04 --- /dev/null +++ b/mods/default/locale/default.fr.tr @@ -0,0 +1,224 @@ +# textdomain: default +Locked Chest=Coffre verrouillé +Locked Chest (owned by @1)=Coffre verrouillé (possédé par @1) +You do not own this chest.=Ce coffre ne vous appartient pas. +a locked chest=un coffre verrouillé +Chest=Coffre +Write=Écrire +Read=Lire +Title:=Titre : +Contents:=Contenu : +Save=Sauvegarder +by @1=de @1 +Page @1 of @2=Page @1 sur @2 +The book you were writing to mysteriously disappeared.= +"@1" by @2=« @1 » de @2 +Blueberries=Myrtille +Book=Livre +Book with Text=Livre avec du texte +Bronze Ingot=Lingot de bronze +Clay Brick=Brique d'argile +Clay Lump=Morceau d'argile +Coal Lump=Morceau de charbon +Copper Ingot=Lingot de cuivre +Copper Lump=Morceau de cuivre +Diamond=Diamant +Flint=Silex +Gold Ingot=Lingot d'or +Gold Lump=Morceau d'or +Iron Lump=Morceau de fer +Mese Crystal=Cristal de Mese +Mese Crystal Fragment=Fragment de cristal de Mese +Obsidian Shard=Tesson d'obsidienne +Paper=Papier +Steel Ingot=Lingot d'acier +Stick=Baton +Tin Ingot=Lingot d'étain +Tin Lump=Morceau d'étain +Furnace is empty=Le four est vide +100% (output full)=100% (Sortie pleine) +@1%=@1% +Not cookable=Ne se cuit pas +Empty=Vide +Furnace active=Four actif +Furnace inactive=Four inactif +(Item: @1; Fuel: @2)=(Article: @1; Carburant: @2) +Furnace=Four +Stone=Pierre +Cobblestone=Pavé +Stone Brick=Brique de pierre +Stone Block=Bloc de pierre +Mossy Cobblestone=Pavé moussu +Desert Stone=Pierre du désert +Desert Cobblestone=Pavé de pierre du désert +Desert Stone Brick=Brique de pierre du désert +Desert Stone Block=Bloc de pierre du désert +Sandstone=Grès +Sandstone Brick=Brique de grès +Sandstone Block=Bloc de grès +Desert Sandstone=Grès du désert +Desert Sandstone Brick=Brique de grès du désert +Desert Sandstone Block=Bloc de grès du désert +Silver Sandstone=Grès argenté +Silver Sandstone Brick=Brique de grès argenté +Silver Sandstone Block=Bloc de grès argenté +Obsidian=Obsidienne +Obsidian Brick=Brique d'obsidienne +Obsidian Block=Bloc d'obsidienne +Dirt=Terre +Dirt with Grass=Terre avec de l'herbe +Dirt with Grass and Footsteps=Terre avec de l'herbe et des traces de pas +Dirt with Savanna Grass=Terre avec de l'herbe de savane +Dirt with Snow=Terre avec de la neige +Dirt with Rainforest Litter=Terre avec sol de forêt humide +Dirt with Coniferous Litter=Terre avec sol de forêt de conifère +Savanna Dirt=Terre de la savane +Savanna Dirt with Savanna Grass=Terre de la savane avec son herbe +Permafrost=Pergélisol +Permafrost with Stones=Pergélisol avec de la pierre +Permafrost with Moss=Pergélisol avec de la mousse +Sand=Sable +Desert Sand=Sable du désert +Silver Sand=Sable argenté +Gravel=Gravier +Clay=Argile +Snow=Neige +Snow Block=Bloc de neige +Ice=Glace +Cave Ice=Glace de grotte +Apple Tree=Pommier +Apple Wood Planks=Planche de pommier +Apple Tree Sapling=Pousse de pommier +Apple Tree Leaves=Feuilles de pommier +Apple=Pomme +Apple Marker=Marqueur de pomme +Jungle Tree=Arbre de la jungle +Jungle Wood Planks=Planche d'arbre de la jungle +Jungle Tree Leaves=Feuilles d'arbre de la jungle +Jungle Tree Sapling=Pousse d'arbre de la jungle +Emergent Jungle Tree Sapling=Pousse d'arbre de la jungle émergent +Pine Tree=Pin +Pine Wood Planks=Planche de pin +Pine Needles=Aiguilles de pin +Pine Tree Sapling=Pousse de pin +Acacia Tree=Acacia +Acacia Wood Planks=Planche d'acacia +Acacia Tree Leaves=Feuilles d'acacia +Acacia Tree Sapling=Pousse d'acacia +Aspen Tree=Tremble +Aspen Wood Planks=Planche de tremble +Aspen Tree Leaves=Feuilles de tremble +Aspen Tree Sapling=Pousse de tremble +Coal Ore=Minerai de charbon +Coal Block=Bloc de charbon +Iron Ore=Bloc de fer +Steel Block=Bloc d'acier +Copper Ore=Minerai de cuivre +Copper Block=Bloc de cuivre +Tin Ore=Minerai d'étain +Tin Block=Bloc d'étain +Bronze Block=Bloc de bronze +Mese Ore=Minerai de Mese +Mese Block=Bloc de Mese +Gold Ore=Minerai d'or +Gold Block=Bloc d'or +Diamond Ore=Minerai de diamant +Diamond Block=Bloc de diamant +Cactus=Cactus +Large Cactus Seedling=Grand plan de cactus +Papyrus=Papyrus +Dry Shrub=Arbuste sec +Jungle Grass=Herbe de la jungle +Grass=Herbe +Savanna Grass=Herbe de la savane +Fern=Fougère +Marram Grass=Ammophile +Bush Stem=Tige de buisson +Bush Leaves=Feuilles de buisson +Bush Sapling=Pousse de buisson +Blueberry Bush Leaves with Berries=Buisson de myrtille avec des myrtilles +Blueberry Bush Leaves=Feuilles de buisson à myrtilles +Blueberry Bush Sapling=Pousse de buisson à myrtilles +Acacia Bush Stem=Tige de buisson d'acacia +Acacia Bush Leaves=Feuilles de buisson d'acacia +Acacia Bush Sapling=Pousses de buisson d'acacia +Pine Bush Stem=Tige de buisson de pin +Pine Bush Needles=Aiguilles de buisson de pin +Pine Bush Sapling=Pousse de buisson de pin +Kelp=Varech +Green Coral=Corail vert +Pink Coral=Corail rose +Cyan Coral=Corail cyan +Brown Coral=Corail marron +Orange Coral=Corail orange +Coral Skeleton=Squelette de corail +Water Source=Source d'eau +Flowing Water=Écoulement d'eau +River Water Source=Source d'eau de rivière +Flowing River Water=Écoulement d'eau de rivière +Lava Source=Source de lave +Flowing Lava=Écoulement de lave +Empty Bookshelf=Bibliothèque vide +Bookshelf (@1 written, @2 empty books)=Bibliothèque (@1 écrits, @2 livres vides) +Bookshelf=Bibliothèque +Text too long=Texte trop longue +"@1"=« @1 » +Wooden Sign=Panneau en bois +Steel Sign=Panneau en acier +Wooden Ladder=Échelle en bois +Steel Ladder=Échelle en acier +Apple Wood Fence=Barrière de bois de pommier +Acacia Wood Fence=Barrière de bois d'acacia +Jungle Wood Fence=Barrière de bois de la jungle +Pine Wood Fence=Barrière de bois de pin +Aspen Wood Fence=Barrière de bois de tremble +Apple Wood Fence Rail=Clôture de bois de pommier +Acacia Wood Fence Rail=Clôture de bois d'acacia +Jungle Wood Fence Rail=Clôture de bois de la jungle +Pine Wood Fence Rail=Clôture de bois de pin +Aspen Wood Fence Rail=Clôture de bois de tremble +Glass=Verre +Obsidian Glass=Verre d'obsidienne +Brick Block=Bloc de brique +Mese Lamp=Lampe de Mese +Apple Wood Mese Post Light=Réverbère de Mese en bois de pommier +Acacia Wood Mese Post Light=Réverbère de Mese en bois d'acacia +Jungle Wood Mese Post Light=Réverbère de Mese en bois de la jungle +Pine Wood Mese Post Light=Réverbère de Mese en bois de pin +Aspen Wood Mese Post Light=Réverbère de Mese en bois de tremble +Cloud=Nuage +Wooden Pickaxe=Pioche en bois +Stone Pickaxe=Pioche en pierre +Bronze Pickaxe=Pioche en bronze +Steel Pickaxe=Pioche en acier +Mese Pickaxe=Pioche de Mese +Diamond Pickaxe=Pioche en diamant +Wooden Shovel=Pelle en bois +Stone Shovel=Pelle en pierre +Bronze Shovel=Pelle en bronze +Steel Shovel=Pelle en acier +Mese Shovel=Pelle en Mese +Diamond Shovel=Pelle en diamant +Wooden Axe=Hache en bois +Stone Axe=Hache en pierre +Bronze Axe=Hache en bronze +Steel Axe=Hache en acier +Mese Axe=Hache en Mese +Diamond Axe=Hache en diamant +Wooden Sword=Epée en bois +Stone Sword=Épée en pierre +Bronze Sword=Épée en bronze +Steel Sword=Épée en acier +Mese Sword=Épée en Mese +Diamond Sword=Épée en diamant +Torch=Torche +@1 will intersect protection on growth.=@1 chevauchera la zone protégée avec la croissance. + + +##### not used anymore ##### + +Dirt with Dry Grass=Terre avec de l'herbe sèche +Dry Dirt=Terre sèche +Dry Dirt with Dry Grass=Terre sèche avec de l'herbe sèche +Dry Grass=Herbe sèche +Mese Post Light=Réverbère de Mese diff --git a/mods/default/locale/default.id.tr b/mods/default/locale/default.id.tr new file mode 100644 index 00000000..fbeec327 --- /dev/null +++ b/mods/default/locale/default.id.tr @@ -0,0 +1,220 @@ +# textdomain: default +Locked Chest=Peti Terkunci +Locked Chest (owned by @1)=Peti Terkunci (milik @1) +You do not own this chest.=Anda bukan pemilik peti ini. +a locked chest=peti terkunci +Chest=Peti +Write= +Read= +Title:=Judul: +Contents:=Isi: +Save=Simpan +by @1=oleh @1 +Page @1 of @2=Halaman @1 dari @2 +The book you were writing to mysteriously disappeared.= +"@1" by @2="@1" oleh @2 +Blueberries=Blueberry +Book=Buku +Book with Text=Buku Tertulis +Bronze Ingot=Perunggu Batangan +Clay Brick=Bata +Clay Lump=Bongkahan Tanah Liat +Coal Lump=Bongkahan Batu Bara +Copper Ingot=Tembaga Batangan +Copper Lump=Bongkahan Tembaga +Diamond=Berlian +Flint=Batu Api +Gold Ingot=Emas Batangan +Gold Lump=Bongkahan Emas +Iron Lump=Bongkahan Besi +Mese Crystal=Kristal Mese +Mese Crystal Fragment=Pecahan Kristal Mese +Obsidian Shard=Pecahan Obsidian +Paper=Kertas +Steel Ingot=Baja Batangan +Stick=Tongkat +Tin Ingot=Timah Batangan +Tin Lump=Bongkahan Timah +Furnace is empty=Tungku kosong +100% (output full)=100% (keluaran penuh) +@1%=@1% +Not cookable=Tidak dapat dimasak +Empty=Kosong +Furnace active=Tungku nyala +Furnace inactive=Tungku mati +(Item: @1; Fuel: @2)=(Barang: @1; Bahan Bakar: @2) +Furnace=Tungku +Stone=Batu +Cobblestone=Bongkahan Batu +Stone Brick=Tembok Batu +Stone Block=Balok Batu +Mossy Cobblestone=Bongkahan Batu Berlumut +Desert Stone=Batu Gurun +Desert Cobblestone=Bongkahan Batu Gurun +Desert Stone Brick=Tembok Batu Gurun +Desert Stone Block=Balok Batu Gurun +Sandstone=Batu Pasir +Sandstone Brick=Tembok Batu Pasir +Sandstone Block=Balok Batu Pasir +Desert Sandstone=Batu Pasir Gurun +Desert Sandstone Brick=Tembok Batu Pasir Gurun +Desert Sandstone Block=Balok Batu Pasir Gurun +Silver Sandstone=Batu Pasir Perak +Silver Sandstone Brick=Tembok Batu Pasir Perak +Silver Sandstone Block=Balok Batu Pasir Perak +Obsidian=Obsidian +Obsidian Brick=Tembok Obsidian +Obsidian Block=Balok Obsidian +Dirt=Tanah +Dirt with Grass=Tanah Berumput +Dirt with Grass and Footsteps=Tanah Berumput dengan Jejak Kaki +Dirt with Savanna Grass=Tanah Berumput Sabana +Dirt with Snow=Tanah Bersalju +Dirt with Rainforest Litter=Tanah Berserasah Hutan Hujan +Dirt with Coniferous Litter=Tanah Berserasah Hutan Konifer +Savanna Dirt=Tanah Sabana +Savanna Dirt with Savanna Grass=Tanah Sabana Berumput Sabana +Permafrost=Ibun Abadi +Permafrost with Stones=Ibun Abadi Berbatu +Permafrost with Moss=Ibun Abadi Berlumut +Sand=Pasir +Desert Sand=Pasir Gurun +Silver Sand=Pasir Perak +Gravel=Kerikil +Clay=Tanah Liat +Snow=Salju +Snow Block=Balok Salju +Ice=Es +Cave Ice=Gua Es +Apple Tree=Pohon Apel +Apple Wood Planks=Papan Kayu Pohon Apel +Apple Tree Sapling=Anak Pohon Apel +Apple Tree Leaves=Daun Pohon Apel +Apple=Apel +Apple Marker=Penanda Apel +Jungle Tree=Pohon Hutan Rimba +Jungle Wood Planks=Papan Kayu Pohon Rimba +Jungle Tree Leaves=Daun Pohon Rimba +Jungle Tree Sapling=Anak Pohon Rimba +Emergent Jungle Tree Sapling=Anak Pohon Rimba Bertumbuh +Pine Tree=Pohon Pinus +Pine Wood Planks=Papan Kayu Pinus +Pine Needles=Daun Pinus +Pine Tree Sapling=Anak Pohon Pinus +Acacia Tree=Pohon Akasia +Acacia Wood Planks=Papan Kayu Akasia +Acacia Tree Leaves=Daun Akasia +Acacia Tree Sapling=Anak Pohon Akasia +Aspen Tree=Pohon Aspen +Aspen Wood Planks=Papan Kayu Aspen +Aspen Tree Leaves=Daun Aspen +Aspen Tree Sapling=Anak Pohon Aspen +Coal Ore=Bijih Batu Bara +Coal Block=Balok Batu Bara +Iron Ore=Bijih Besi +Steel Block=Balok Baja +Copper Ore=Bijih Tembaga +Copper Block=Balok Tembaga +Tin Ore=Bijih Timah +Tin Block=Balok Timah +Bronze Block=Balok Perunggu +Mese Ore=Bijih Mese +Mese Block=Balok Mese +Gold Ore=Bijih Emas +Gold Block=Balok Emas +Diamond Ore=Bijih Berlian +Diamond Block=Balok Berlian +Cactus=Kaktus +Large Cactus Seedling=Bibit Kaktus Besar +Papyrus=Papirus +Dry Shrub=Semak Kering +Jungle Grass=Rumput Rimba +Grass=Rumput +Savanna Grass=Rumput Sabana +Fern=Pakis +Marram Grass=Rumput Maram +Bush Stem=Batang Semak +Bush Leaves=Daun Semak +Bush Sapling=Anak Semak +Blueberry Bush Leaves with Berries=Daun Semak Blueberry Berbuah +Blueberry Bush Leaves=Daun Semak Blueberry +Blueberry Bush Sapling=Anak Semak Blueberry +Acacia Bush Stem=Batang Semak Akasia +Acacia Bush Leaves=Daun Semak Akasia +Acacia Bush Sapling=Bibit Semak Akasia +Pine Bush Stem=Batang Semak Pinus +Pine Bush Needles=Daun Semak Pinus +Pine Bush Sapling=Bibit Semak Pinus +Kelp=Kelp +Green Coral=Koral Hijau +Pink Coral=Koral Jambon +Cyan Coral=Koral Sian +Brown Coral=Koral Cokelat +Orange Coral=Koral Oranye +Coral Skeleton=Kerangka Koral +Water Source=Mata Air +Flowing Water=Aliran Air +River Water Source=Mata Air Sungai +Flowing River Water=Aliran Air Sungai +Lava Source=Sumber Lava +Flowing Lava=Aliran Lava +Empty Bookshelf=Rak Buku Kosong +Bookshelf (@1 written, @2 empty books)=Rak Buku (@1 buku tertulis, @2 buku kosong) +Bookshelf=Rak Buku +Text too long=Teks terlalu panjang +"@1"="@1" +Wooden Sign=Penanda Kayu +Steel Sign=Penanda Baja +Wooden Ladder=Tangga Kayu +Steel Ladder=Tangga Baja +Apple Wood Fence=Pagar Kayu Apel +Acacia Wood Fence=Pagar Akasia +Jungle Wood Fence=Pagar Kayu Rimba +Pine Wood Fence=Pagar Pinus +Aspen Wood Fence=Pagar Aspen +Apple Wood Fence Rail=Rel Pagar Kayu Apel +Acacia Wood Fence Rail=Rel Pagar Akasia +Jungle Wood Fence Rail=Rel Pagar Kayu Rimba +Pine Wood Fence Rail=Rel Pagar Pinus +Aspen Wood Fence Rail=Rel Pagar Aspen +Glass=Kaca +Obsidian Glass=Kaca Obsidian +Brick Block=Balok Bata +Mese Lamp=Lampu Mese +Apple Wood Mese Post Light= +Acacia Wood Mese Post Light= +Jungle Wood Mese Post Light= +Pine Wood Mese Post Light= +Aspen Wood Mese Post Light= +Cloud=Awan +Wooden Pickaxe=Gancu Kayu +Stone Pickaxe=Gancu Batu +Bronze Pickaxe=Gancu Perunggu +Steel Pickaxe=Gancu Baja +Mese Pickaxe=Gancu Mese +Diamond Pickaxe=Gancu Berlian +Wooden Shovel=Sekop Kayu +Stone Shovel=Sekop Batu +Bronze Shovel=Sekop Perunggu +Steel Shovel=Sekop Baja +Mese Shovel=Sekop Mese +Diamond Shovel=Sekop Berlian +Wooden Axe=Kapak Kayu +Stone Axe=Kapak Batu +Bronze Axe=Kapak Perunggu +Steel Axe=Kapak Baja +Mese Axe=Kapak Mese +Diamond Axe=Kapak Berlian +Wooden Sword=Pedang Kayu +Stone Sword=Pedang Batu +Bronze Sword=Pedang Perunggu +Steel Sword=Pedang Baja +Mese Sword=Pedang Mese +Diamond Sword=Pedang Berlian +Torch=Obor +@1 will intersect protection on growth.=@1 akan memotong perlindungan ketika tumbuh. + + +##### not used anymore ##### + +Mese Post Light=Lampu Taman Mese diff --git a/mods/default/locale/default.it.tr b/mods/default/locale/default.it.tr new file mode 100644 index 00000000..39406659 --- /dev/null +++ b/mods/default/locale/default.it.tr @@ -0,0 +1,224 @@ +# textdomain: default +Locked Chest=Baule chiuso a chiave +Locked Chest (owned by @1)=Baule chiuso a chiave (di proprietà di @1) +You do not own this chest.=Questo baule non ti appartiene. +a locked chest=un baule chiuso a chiave +Chest=Baule +Write= +Read= +Title:= +Contents:= +Save= +by @1= +Page @1 of @2= +The book you were writing to mysteriously disappeared.= +"@1" by @2="@1" di @2 +Blueberries=Mirtilli +Book=Libro +Book with Text=Libro con testo +Bronze Ingot=Lingotto di bronzo +Clay Brick=Mattone d'argilla +Clay Lump=Grumo d'argilla +Coal Lump=Grumo di carbone +Copper Ingot=Lingotto di rame +Copper Lump=Grumo di rame +Diamond=Diamante +Flint=Selce +Gold Ingot=Lingotto d'oro +Gold Lump=Grumo d'oro +Iron Lump=Grumo di ferro +Mese Crystal=Cristallo di mese +Mese Crystal Fragment=Frammento di cristallo di mese +Obsidian Shard=Scheggia d'ossidiana +Paper=Carta +Steel Ingot=Lingotto d'acciaio +Stick=Bastone +Tin Ingot=Lingotto di stagno +Tin Lump=Grumo di stagno +Furnace is empty=La fornace è vuota +100% (output full)=100% (uscita piena) +@1%=@1% +Not cookable=Non cucinabile +Empty=Vuota +Furnace active=Fornace attiva +Furnace inactive=Fornace inattiva +(Item: @1; Fuel: @2)=(Oggetto: @1; Combustibile: @2) +Furnace=Fornace +Stone=Pietra +Cobblestone=Ciottoli +Stone Brick=Mattone di pietra +Stone Block=Blocco di pietra +Mossy Cobblestone=Ciottoli muschiosi +Desert Stone=Pietra del deserto +Desert Cobblestone=Ciottoli del deserto +Desert Stone Brick=Mattone di pietra del deserto +Desert Stone Block=Blocco di pietra del deserto +Sandstone=Arenaria +Sandstone Brick=Mattone d'arenaria +Sandstone Block=Blocco d'arenaria +Desert Sandstone=Arenaria del deserto +Desert Sandstone Brick=Mattone d'arenaria del deserto +Desert Sandstone Block=Blocco d'arenaria del deserto +Silver Sandstone=Arenaria argentata +Silver Sandstone Brick=Mattone d'arenaria argentata +Silver Sandstone Block=Blocco d'arenaria argentata +Obsidian=Ossidiana +Obsidian Brick=Mattone d'ossidiana +Obsidian Block=Blocco d'ossidiana +Dirt=Terra +Dirt with Grass=Terra con erba +Dirt with Grass and Footsteps=Terra con erba e impronte +Dirt with Savanna Grass= +Dirt with Snow=Terra con neve +Dirt with Rainforest Litter=Terra con detriti della foresta pluviale +Dirt with Coniferous Litter=Terra con detriti di conifera +Savanna Dirt= +Savanna Dirt with Savanna Grass= +Permafrost=Permafrost +Permafrost with Stones=Permafrost con pietra +Permafrost with Moss=Permafrost con muschio +Sand=Sabbia +Desert Sand=Sabbia del deserto +Silver Sand=Sabbia argentata +Gravel=Ghiaia +Clay=Argilla +Snow=Neve +Snow Block=Blocco di neve +Ice=Ghiaccio +Cave Ice=Ghiaccio di caverna +Apple Tree=Melo +Apple Wood Planks=Assi di melo +Apple Tree Sapling=Alberello di melo +Apple Tree Leaves=Foglie di melo +Apple=Mela +Apple Marker=Marcatore mela +Jungle Tree=Albero della giungla +Jungle Wood Planks=Assi di legno della giungla +Jungle Tree Leaves=Foglie di albero della giungla +Jungle Tree Sapling=Alberello della giungla +Emergent Jungle Tree Sapling=Alberello della giungla emergente +Pine Tree=Pino +Pine Wood Planks=Assi di legno di pino +Pine Needles=Aghi di pino +Pine Tree Sapling=Alberello di pino +Acacia Tree=Acacia +Acacia Wood Planks=Assi di legno d'acacia +Acacia Tree Leaves=Foglie d'acacia +Acacia Tree Sapling=Alberello d'acacia +Aspen Tree=Pioppo +Aspen Wood Planks=Assi di legno di pioppo +Aspen Tree Leaves=Foglie di pioppo +Aspen Tree Sapling=Alberello di pioppo +Coal Ore=Minerale di carbone +Coal Block=Blocco di carbone +Iron Ore=Minerale di ferro +Steel Block=Blocco d'acciaio +Copper Ore=Minerale di rame +Copper Block=Blocco di rame +Tin Ore=Minerale di stagno +Tin Block=Blocco di stagno +Bronze Block=Blocco di bronzo +Mese Ore=Minerale di mese +Mese Block=Blocco di mese +Gold Ore=Minerale d'oro +Gold Block=Blocco d'oro +Diamond Ore=Minerale di diamante +Diamond Block=Blocco di diamante +Cactus=Cactus +Large Cactus Seedling=Piantina di cactus grande +Papyrus=Papiro +Dry Shrub=Arbusto secco +Jungle Grass=Erba della giungla +Grass=Erba +Savanna Grass= +Fern=Felce +Marram Grass=Ammofila arenaria +Bush Stem=Fusto di cespuglio +Bush Leaves=Foglie di cespuglio +Bush Sapling=Alberello di cespuglio +Blueberry Bush Leaves with Berries=Foglie di cespuglio di mirtilli con bacche +Blueberry Bush Leaves=Foglie di cespuglio di mirtilli +Blueberry Bush Sapling=Alberello di cespuglio di mirtilli +Acacia Bush Stem=Fusto di cespuglio d'acacia +Acacia Bush Leaves=Foglie di cespuglio d'acacia +Acacia Bush Sapling=Alberello di cespuglio d'acacia +Pine Bush Stem=Fusto di cespuglio di pino +Pine Bush Needles=Aghi di cespuglio di pino +Pine Bush Sapling=Alberello di cespuglio di pino +Kelp=Alga +Green Coral=Corallo verde +Pink Coral=Corallo rosa +Cyan Coral=Corallo ciano +Brown Coral=Corallo marrone +Orange Coral=Corallo arancione +Coral Skeleton=Scheletro di corallo +Water Source=Fonte d'acqua +Flowing Water=Acqua corrente +River Water Source=Fonte d'acqua di fiume +Flowing River Water=Acqua corrente di fiume +Lava Source=Fonte di lava +Flowing Lava=Lava corrente +Empty Bookshelf=Libreria vuota +Bookshelf (@1 written, @2 empty books)=Libreria (@1 scritti, @2 vuoti) +Bookshelf=Libreria +Text too long=Testo troppo lungo +"@1"= +Wooden Sign=Cartello di legno +Steel Sign=Cartello d'acciaio +Wooden Ladder=Scala a pioli di legno +Steel Ladder=Scala a pioli d'acciaio +Apple Wood Fence=Recinzione di legno di melo +Acacia Wood Fence=Recinzione di legno d'acacia +Jungle Wood Fence=Recinzione di legno della giungla +Pine Wood Fence=Recinzione di legno di pino +Aspen Wood Fence=Recinzione di legno di pioppo +Apple Wood Fence Rail=Ringhiera della recinzione di legno di melo +Acacia Wood Fence Rail=Ringhiera della recinzione di legno d'acacia +Jungle Wood Fence Rail=Ringhiera della recinzione di legno della giungla +Pine Wood Fence Rail=Ringhiera della recinzione di legno di pino +Aspen Wood Fence Rail=Ringhiera della recinzione di legno di pioppo +Glass=Vetro +Obsidian Glass=Vetro d'ossidiana +Brick Block=Blocco di mattone +Mese Lamp=Lampada di mese +Apple Wood Mese Post Light= +Acacia Wood Mese Post Light= +Jungle Wood Mese Post Light= +Pine Wood Mese Post Light= +Aspen Wood Mese Post Light= +Cloud=Nuvola +Wooden Pickaxe=Piccone di legno +Stone Pickaxe=Piccone di pietra +Bronze Pickaxe=Piccone di bronzo +Steel Pickaxe=Piccone d'acciaio +Mese Pickaxe=Piccone di mese +Diamond Pickaxe=Piccone di diamante +Wooden Shovel=Pala di legno +Stone Shovel=Pala di pietra +Bronze Shovel=Pala di bronzo +Steel Shovel=Pala d'acciaio +Mese Shovel=Pala di mese +Diamond Shovel=Pala di diamante +Wooden Axe=Ascia di legno +Stone Axe=Ascia di pietra +Bronze Axe=Ascia di bronzo +Steel Axe=Ascia d'acciaio +Mese Axe=Ascia di mese +Diamond Axe=Ascia di diamante +Wooden Sword=Spada di legno +Stone Sword=Spada di pietra +Bronze Sword=Spada di bronzo +Steel Sword=Spada d'acciaio +Mese Sword=Spada di mese +Diamond Sword=Spada di diamante +Torch=Torcia +@1 will intersect protection on growth.=@1 crescendo attraverserà la protezione. + + +##### not used anymore ##### + +Dirt with Dry Grass=Terra con erba secca +Dry Dirt=Terra asciutta +Dry Dirt with Dry Grass=Terra asciutta con erba secca +Dry Grass=Erba secca +Mese Post Light=Lampioncino di mese diff --git a/mods/default/locale/default.ja.tr b/mods/default/locale/default.ja.tr new file mode 100644 index 00000000..e6249d93 --- /dev/null +++ b/mods/default/locale/default.ja.tr @@ -0,0 +1,215 @@ +# textdomain: default +Locked Chest=鍵のかかったチェスト +Locked Chest (owned by @1)=鍵のかかったチェスト(@1所有) +You do not own this chest.=あなたはこのチェストの所有者ではありません。 +a locked chest=ロックされたチェスト +Chest=チェスト +Write= +Read= +Title:=題名 +Contents:=内容 +Save=保存 +by @1=@1著 +Page @1 of @2=@1 / @2 ページ +The book you were writing to mysteriously disappeared.= +"@1" by @2=@2著「@1」 +Blueberries=ブルーベリー +Book=本 +Book with Text=テキストが書かれた本 +Bronze Ingot=青銅インゴット +Clay Brick=粘土レンガ +Clay Lump=粘土の塊 +Coal Lump=石炭 +Copper Ingot=銅インゴット +Copper Lump=銅の塊 +Diamond=ダイヤモンド +Flint=火打ち石 +Gold Ingot=金インゴット +Gold Lump=金の塊 +Iron Lump=鉄の塊 +Mese Crystal=メセクリスタル +Mese Crystal Fragment=メセクリスタルの破片 +Obsidian Shard=黒曜石の破片 +Paper=紙 +Steel Ingot=鉄インゴット +Stick=棒 +Tin Ingot=スズインゴット +Tin Lump=スズの塊 +Furnace is empty=かまどは空です +100% (output full)=100%(フル出力) +@1%=@1% +Not cookable=調理できません +Empty=空 +Furnace active=かまどは燃えてます +Furnace inactive=かまどは消えています +(Item: @1; Fuel: @2)=(アイテム: @1; 燃料: @2) +Furnace=かまど +Stone=石 +Cobblestone=丸石 +Stone Brick=石レンガ +Stone Block=石ブロック +Mossy Cobblestone=苔むした丸石 +Desert Stone=砂漠の石 +Desert Cobblestone=砂漠の丸石 +Desert Stone Brick=砂漠の石レンガ +Desert Stone Block=砂漠の石ブロック +Sandstone=砂岩 +Sandstone Brick=砂岩レンガ +Sandstone Block=砂岩ブロック +Desert Sandstone=砂漠の砂岩 +Desert Sandstone Brick=砂漠の砂岩レンガ +Desert Sandstone Block=砂漠の砂岩ブロック +Silver Sandstone=銀の砂岩 +Silver Sandstone Brick=銀の砂岩レンガ +Silver Sandstone Block=銀の砂岩ブロック +Obsidian=黒曜石 +Obsidian Brick=黒曜石レンガ +Obsidian Block=黒曜石ブロック +Dirt=土 +Dirt with Grass=草のついた土 +Dirt with Grass and Footsteps=足あとと草のついた土 +Dirt with Savanna Grass=サバンナの草のついた土 +Dirt with Snow=雪のついた土 +Dirt with Rainforest Litter=熱帯雨林のよごれた土 +Dirt with Coniferous Litter=針葉樹のよごれた土 +Savanna Dirt=サバンナの土 +Savanna Dirt with Savanna Grass=サバンナの草のついたサバンナの土 +Permafrost=永久凍土 +Permafrost with Stones=石のついた永久凍土 +Permafrost with Moss=苔のついた永久凍土 +Sand=砂 +Desert Sand=砂漠の砂 +Silver Sand=銀の砂 +Gravel=砂利 +Clay=粘土 +Snow=雪 +Snow Block=雪ブロック +Ice=氷 +Cave Ice=洞窟の氷 +Apple Tree=リンゴの木 +Apple Wood Planks=リンゴの板材 +Apple Tree Sapling=リンゴの苗木 +Apple Tree Leaves=リンゴの葉 +Apple=リンゴ +Apple Marker=リンゴのマーカー +Jungle Tree=ジャングルの木 +Jungle Wood Planks=ジャングルの板材 +Jungle Tree Leaves=ジャングルの木の葉 +Jungle Tree Sapling=ジャングルの木の苗木 +Emergent Jungle Tree Sapling=新芽のジャングルの木の苗木 +Pine Tree=マツの木 +Pine Wood Planks=マツの板材 +Pine Needles=マツの葉 +Pine Tree Sapling=マツの苗木 +Acacia Tree=アカシアの木 +Acacia Wood Planks=アカシアの板材 +Acacia Tree Leaves=アカシアの葉 +Acacia Tree Sapling=アカシアの苗木 +Aspen Tree=ポプラの木 +Aspen Wood Planks=ポプラの板材 +Aspen Tree Leaves=ポプラの葉 +Aspen Tree Sapling=ポプラの苗木 +Coal Ore=石炭鉱石 +Coal Block=石炭ブロック +Iron Ore=鉄の鉱石 +Steel Block=鉄ブロック +Copper Ore=銅の鉱石 +Copper Block=銅ブロック +Tin Ore=スズの鉱石 +Tin Block=スズブロック +Bronze Block=青銅ブロック +Mese Ore=メセ鉱石 +Mese Block=メセブロック +Gold Ore=金の鉱石 +Gold Block=金ブロック +Diamond Ore=ダイヤモンドの鉱石 +Diamond Block=ダイヤモンドブロック +Cactus=サボテン +Large Cactus Seedling=大きなサボテンの苗 +Papyrus=パピルス +Dry Shrub=枯れた低木 +Jungle Grass=ジャングルの草 +Grass=草 +Savanna Grass=サバンナの草 +Fern=シダ +Marram Grass=マラムの草 +Bush Stem=低木の幹 +Bush Leaves=低木の葉 +Bush Sapling=低木の苗木 +Blueberry Bush Leaves with Berries=ブルーベリーの低木と実 +Blueberry Bush Leaves=ブルーベリーの低木の葉 +Blueberry Bush Sapling=ブルーベリーの低木の苗木 +Acacia Bush Stem=アカシアの低木の幹 +Acacia Bush Leaves=アカシアの低木の葉 +Acacia Bush Sapling=アカシアの低木の苗木 +Pine Bush Stem=マツの低木の幹 +Pine Bush Needles=マツの低木の葉 +Pine Bush Sapling=マツの低木の苗木 +Kelp=コンブ +Green Coral=緑色のサンゴ +Pink Coral=桃色のサンゴ +Cyan Coral=青緑色のサンゴ +Brown Coral=茶色のサンゴ +Orange Coral=橙色のサンゴ +Coral Skeleton=サンゴのしがい +Water Source=水源 +Flowing Water=水流 +River Water Source=川の水源 +Flowing River Water=川の水流 +Lava Source=溶岩 +Flowing Lava=流れる溶岩 +Empty Bookshelf=空の本棚 +Bookshelf (@1 written, @2 empty books)=本棚(記述済み @1 冊, 未記述 @2 冊) +Bookshelf=本棚 +Text too long=テキストが長すぎます +"@1"=「@1」 +Wooden Sign=木の看板 +Steel Sign=鉄の看板 +Wooden Ladder=木のはしご +Steel Ladder=鉄のはしご +Apple Wood Fence=リンゴのフェンス +Acacia Wood Fence=アカシアのフェンス +Jungle Wood Fence=ジャングルのフェンス +Pine Wood Fence=マツのフェンス +Aspen Wood Fence=ポプラのフェンス +Apple Wood Fence Rail=リンゴのフェンスレール +Acacia Wood Fence Rail=アカシアのフェンスレール +Jungle Wood Fence Rail=ジャングルのフェンスレール +Pine Wood Fence Rail=マツのフェンスレール +Aspen Wood Fence Rail=ポプラのフェンスレール +Glass=ガラス +Obsidian Glass=黒曜石のガラス +Brick Block=レンガブロック +Mese Lamp=メセの塊 +Apple Wood Mese Post Light=リンゴのメセ灯柱 +Acacia Wood Mese Post Light=アカシアのメセ灯柱 +Jungle Wood Mese Post Light=ジャングルのメセ灯柱 +Pine Wood Mese Post Light=マツのメセ灯柱 +Aspen Wood Mese Post Light=ポプラのメセ灯柱 +Cloud=雲 +Wooden Pickaxe=木のつるはし +Stone Pickaxe=石のつるはし +Bronze Pickaxe=青銅のつるはし +Steel Pickaxe=鉄のつるはし +Mese Pickaxe=メセのつるはし +Diamond Pickaxe=ダイヤモンドのつるはし +Wooden Shovel=木のシャベル +Stone Shovel=石のシャベル +Bronze Shovel=青銅のシャベル +Steel Shovel=鉄のシャベル +Mese Shovel=メセのシャベル +Diamond Shovel=ダイヤモンドのシャベル +Wooden Axe=木の斧 +Stone Axe=石の斧 +Bronze Axe=青銅の斧 +Steel Axe=鉄の斧 +Mese Axe=メセの斧 +Diamond Axe=ダイヤモンドの斧 +Wooden Sword=木の剣 +Stone Sword=石の剣 +Bronze Sword=青銅の剣 +Steel Sword=鉄の剣 +Mese Sword=メセの剣 +Diamond Sword=ダイヤモンドの剣 +Torch=松明 +@1 will intersect protection on growth.=@1は成長するとき保護と交差します。 diff --git a/mods/default/locale/default.jbo.tr b/mods/default/locale/default.jbo.tr new file mode 100644 index 00000000..5ae97224 --- /dev/null +++ b/mods/default/locale/default.jbo.tr @@ -0,0 +1,215 @@ +# textdomain: default +Locked Chest=lo selstela gairvau +Locked Chest (owned by @1)=.i ti selstela gairvau po la'o zo'i.@1.zo'i +You do not own this chest.=.i do na ponse lo ti gairvau +a locked chest=lo selstela gairvau +Chest=lo gairvau +Write=ciska +Read=tcidu +Title:=cmene +Contents:=se cukta +Save=rejgau +by @1=la'o zo'i.@1.zo'i te cukta +Page @1 of @2=meirmoi fe li @1 li @2 +The book you were writing to mysteriously disappeared.=lo cukta poi do ciska ke'a cu cizra canci +"@1" by @2=lo cukta be la'o gy.@1.gy. bei la'o zo'i.@2.zo'i +Blueberries=lo blajba +Book=lo cukta +Book with Text=lo cukta joi selci'a +Bronze Ingot=lo ransu manfybli +Clay Brick=lo kitybli +Clay Lump=lo kliti bakfu +Coal Lump=lo kolme bakfu +Copper Ingot=lo tunka manfybli +Copper Lump=lo tunka bakfu +Diamond=lo tabjme +Flint=lo fagyro'i +Gold Ingot=lo solji manfybli +Gold Lump=lo solji bakfu +Iron Lump=lo tirse bakfu +Mese Crystal=lo za'e krilrmese +Mese Crystal Fragment=lo za'e krilrmese spisa +Obsidian Shard=lo je'erma'ablaci spisa +Paper=lo pelji +Steel Ingot=lo gasta manfybli +Stick=lo grana +Tin Ingot=lo tinci manfybli +Tin Lump=lo tinci bakfu +Furnace is empty=.i lo toknu cu kunti +100% (output full)=100 ce'i to lo se zbasu cu culno toi +@1%=@1 ce'i +Not cookable=na kakne le ka se jukpa +Empty=ti kunti +Furnace active=.i lo toknu cu tolcando +Furnace inactive=.i lo toknu cu cando +(Item: @1; Fuel: @2)=to jukpa @1 @2 +Furnace=lo toknu +Stone=lo rokci +Cobblestone=lo lolro'iboi +Stone Brick=lo morna rokci +Stone Block=lo rokci bliku +Mossy Cobblestone=lo clika lolro'iboi +Desert Stone=lo cantu'a rokci +Desert Cobblestone=lo cantu'a lolro'iboi +Desert Stone Brick=lo morna ke cantu'a rokci +Desert Stone Block=lo cantu'a rokci bliku +Sandstone=lo canro'i +Sandstone Brick=lo morna canro'i +Sandstone Block=lo canro'i bliku +Desert Sandstone=lo cantu'a canro'i +Desert Sandstone Brick=lo morna ke cantu'a canro'i +Desert Sandstone Block=lo cantu'a canro'i bliku +Silver Sandstone=lo rijyska canro'i +Silver Sandstone Brick=lo morna ke rijyska canro'i +Silver Sandstone Block=lo rijyska canro'i bliku +Obsidian=lo je'erma'ablaci +Obsidian Brick=lo morna je'erma'ablaci +Obsidian Block=lo je'erma'ablaci bliku +Dirt=lo dertu +Dirt with Grass=lo dertu joi srasu +Dirt with Grass and Footsteps=lo dertu joi srasu jebo stapa bo prina +Dirt with Savanna Grass=lo dertu joi sudytu'a bo srasu +Dirt with Snow=lo dertu joi snime +Dirt with Rainforest Litter=lo dertu joi glatimdemricfoi bo festi +Dirt with Coniferous Litter=lo dertu joi ckunu bo festi +Savanna Dirt=lo sudytu'a dertu +Savanna Dirt with Savanna Grass=lo sudysu'a bo dertu joi sudytu'a bo srasu +Permafrost=lo vi'orbisloi +Permafrost with Stones=lo vi'orbisloi joi rokci +Permafrost with Moss=lo vi'orbisloi joi clika +Sand=lo canre +Desert Sand=lo cantu'a canre +Silver Sand=lo rijyska canre +Gravel=lo cmaro'i +Clay=lo kliti +Snow=lo snime +Snow Block=lo snime bliku +Ice=lo bisli +Cave Ice=lo kevzda bisli +Apple Tree=lo plisytricu ricystani +Apple Wood Planks=lo plisymudri tanbo +Apple Tree Sapling=lo plisytricu ciftricu +Apple Tree Leaves=lo plisytricu pezli +Apple=lo plise +Apple Marker=lo plise barna +Jungle Tree=lo glatimdemricfoi ricystani +Jungle Wood Planks=lo glatimdemricfoi mudri tanbo +Jungle Tree Leaves=lo glatimdemricfoi pezli +Jungle Tree Sapling=lo glatimdemricfoi ciftricu +Emergent Jungle Tree Sapling=lo barda ke glatimdemricfoi ciftricu +Pine Tree=lo ckunu ricystani +Pine Wood Planks=lo ku'urmudri tanbo +Pine Needles=lo ckunu jezpezli +Pine Tree Sapling=lo ckunu ciftricu +Acacia Tree=lo atkaci,ia ricystani +Acacia Wood Planks=lo atkaci,ia mudri tanbo +Acacia Tree Leaves=lo atkaci,ia pezli +Acacia Tree Sapling=lo atkaci,ia ciftricu +Aspen Tree=lo ricrpopulu ricystani +Aspen Wood Planks=lo mudrpopulu tanbo +Aspen Tree Leaves=lo ricrpopulu pezli +Aspen Tree Sapling=lo ricrpopulu ciftricu +Coal Ore=lo kolme kunra +Coal Block=lo kolme bliku +Iron Ore=lo tirse kunra +Steel Block=lo gasta bliku +Copper Ore=lo tunka kunra +Copper Block=lo tunka bliku +Tin Ore=lo tinci kunra +Tin Block=lo tinci bliku +Bronze Block=lo ransu bliku +Mese Ore=lo za'e kunrmese +Mese Block=lo za'e blikrmese +Gold Ore=lo solji kunra +Gold Block=lo solji bliku +Diamond Ore=lo tabjme kunra +Diamond Block=lo tabjme bliku +Cactus=lo jesyspa +Large Cactus Seedling=lo barda ke jesyspa tsiju +Papyrus=lo misryplespa +Dry Shrub=lo sudga dzitricu +Jungle Grass=lo glatimdemricfoi srasu +Grass=lo srasu +Savanna Grass=lo sudytu'a srasu +Fern=lo filcina +Marram Grass=lo xaskoi srasu +Bush Stem=lo dzitricu stani +Bush Leaves=lo dzitricu pezli +Bush Sapling=lo dzitricu ciftricu +Blueberry Bush Leaves with Berries=lo ke blajba dzitricu pezli ke'e joi jbari +Blueberry Bush Leaves=lo blajba dzitricu pezli +Blueberry Bush Sapling=lo blajba dzitrcu ciftricu +Acacia Bush Stem=lo atkaci,ia dzitricu stani +Acacia Bush Leaves=lo atkaci,ia dzitricu pezli +Acacia Bush Sapling=lo atkaci,ia dzitricu ciftricu +Pine Bush Stem=lo ckunu dzitricu stani +Pine Bush Needles=lo ckunu dzitricu jezpezli +Pine Bush Sapling=lo ckunu dzitricu ciftricu +Kelp=lo vraike +Green Coral=lo crino pevypanje +Pink Coral=lo xunblabi pevypanje +Cyan Coral=lo cicna pevypanje +Brown Coral=lo bunre pevypanje +Orange Coral=lo narju pevypanje +Coral Skeleton=lo pevypanje greku +Water Source=lo djacu velflecu +Flowing Water=lo flecu djacu +River Water Source=lo rirxe djacu velflecu +Flowing River Water=lo flecu ke rirxe djacu +Lava Source=lo likro'i velflecu +Flowing Lava=lo flecu likro'i +Empty Bookshelf=.i ti kunti ckukajna +Bookshelf (@1 written, @2 empty books)=.i ti ckukajna to @1 cukta joi selci'a .ije @2 kunti cukta toi +Bookshelf=lo ckukajna +Text too long=.i lo lerpoi cu dukse lo ka clani +"@1"=zoi sy.@1.sy. +Wooden Sign=lo mudri sinxa +Steel Sign=lo gasta sinxa +Wooden Ladder=lo mudri rajyserti +Steel Ladder=lo gasta rajyserti +Apple Wood Fence=lo plisymudri garbi'u +Acacia Wood Fence=lo atkaci,ia mudri garbi'u +Jungle Wood Fence=lo glatimdemricfoi mudri garbi'u +Pine Wood Fence=lo ku'urmudri garbi'u +Aspen Wood Fence=lo mudrpopulu garbi'u +Apple Wood Fence Rail=lo plisymudri garbi'u garna +Acacia Wood Fence Rail=lo atkaci,ia mudri garbi'u garna +Jungle Wood Fence Rail=lo glatimdemricfoi mudri garbi'u garna +Pine Wood Fence Rail=lo ku'urmudri garbi'u garna +Aspen Wood Fence Rail=lo mudrpopulu garbi'u garna +Glass=lo blaci +Obsidian Glass=lo je'erma'ablaci blaci +Brick Block=lo kitybli bliku +Mese Lamp=lo za'e gusrmese +Apple Wood Mese Post Light=lo plisymudri ke kamju za'e gusrmese +Acacia Wood Mese Post Light=lo atkaci,ia mudri ke kamju za'e gusrmese +Jungle Wood Mese Post Light=lo glatimdemricfoi mudri ke kamju za'e gusrmese +Pine Wood Mese Post Light=lo ku'urmudri ke kamju za'e gusrmese +Aspen Wood Mese Post Light=lo mudrpopulu ke kamju za'e gusrmese +Cloud=lo dilnu +Wooden Pickaxe=lo mudri velkakpymru +Stone Pickaxe=lo rokci velkakpymru +Bronze Pickaxe=lo ransu velkakpymru +Steel Pickaxe=lo gasta velkakpymru +Mese Pickaxe=lo za'e kunrmese velkakpymru +Diamond Pickaxe=lo tabjme velkakpymru +Wooden Shovel=lo mudri canpa +Stone Shovel=lo rokci canpa +Bronze Shovel=lo ransu canpa +Steel Shovel=lo gasta canpa +Mese Shovel=lo za'e kunrmese canpa +Diamond Shovel=lo tabjme canpa +Wooden Axe=lo mudri ka'amru +Stone Axe=lo rokci ka'amru +Bronze Axe=lo ransu ka'amru +Steel Axe=lo gasta ka'amru +Mese Axe=lo za'e kunrmese ka'amru +Diamond Axe=lo tabjme ka'amru +Wooden Sword=lo mudri cladakyxa'i +Stone Sword=lo rokci cladakyxa'i +Bronze Sword=lo ransu cladakyxa'i +Steel Sword=lo gasta cladakyxa'i +Mese Sword=lo za'e kunrmese cladakyxa'i +Diamond Sword=lo tabjme cladakyxa'i +Torch=lo fagytergu'i +@1 will intersect protection on growth.=.i @1 cu ba kruca lo bandu ca lo nu banro diff --git a/mods/default/locale/default.ms.tr b/mods/default/locale/default.ms.tr new file mode 100644 index 00000000..35d66d20 --- /dev/null +++ b/mods/default/locale/default.ms.tr @@ -0,0 +1,224 @@ +# textdomain: default +Locked Chest=Peti Berkunci +Locked Chest (owned by @1)=Peti Berkunci (milik @1) +You do not own this chest.=Ini bukan peti milik anda. +a locked chest=peti berkunci +Chest=Peti +Write= +Read= +Title:=Tajuk: +Contents:=Kandungan: +Save=Simpan +by @1=oleh @1 +Page @1 of @2=Ms. @1 / @2 +The book you were writing to mysteriously disappeared.= +"@1" by @2="@1" oleh @2 +Blueberries=Beri Biru +Book=Buku +Book with Text=Buku Bertulisan +Bronze Ingot=Jongkong Gangsa +Clay Brick=Bata Tanah Liat +Clay Lump=Longgokan Tanah Liat +Coal Lump=Longgokan Batu Arang +Copper Ingot=Jongkong Tembaga +Copper Lump=Longgokan Tembaga +Diamond=Berlian +Flint=Batu Api +Gold Ingot=Jongkong Emas +Gold Lump=Longgokan Emas +Iron Lump=Longgokan Besi +Mese Crystal=Kristal Mese +Mese Crystal Fragment=Serpihan Mese +Obsidian Shard=Serpihan Obsidia +Paper=Kertas +Steel Ingot=Jongkong Keluli +Stick=Serpihan Kayu +Tin Ingot=Jongkong Timah +Tin Lump=Longgokan Timah +Furnace is empty=Relau masih kosong +100% (output full)=100% (keluaran penuh) +@1%=@1% +Not cookable=Tidak boleh dimasak +Empty=Kosong +Furnace active=Relau aktif +Furnace inactive=Relau tidak aktif +(Item: @1; Fuel: @2)=(Item: @1; Bahan api: @2) +Furnace=Relau +Stone=Batu +Cobblestone=Batu Buntar +Stone Brick=Bata Batu +Stone Block=Bongkah Batu +Mossy Cobblestone=Batu Buntar Berlumut +Desert Stone=Batu Gurun +Desert Cobblestone=Batu Buntar Gurun +Desert Stone Brick=Bata Batu Gurun +Desert Stone Block=Bongkah Batu Gurun +Sandstone=Batu Pasir +Sandstone Brick=Bata Batu Pasir +Sandstone Block=Bongkah Batu Pasir +Desert Sandstone=Batu Pasir Gurun +Desert Sandstone Brick=Bata Batu Pasir Gurun +Desert Sandstone Block=Bongkah Batu Pasir Gurun +Silver Sandstone=Batu Pasir Perak +Silver Sandstone Brick=Bata Batu Pasir Perak +Silver Sandstone Block=Bongkah Batu Pasir Perak +Obsidian=Obsidia +Obsidian Brick=Bata Obsidia +Obsidian Block=Bongkah Obsidia +Dirt=Tanah +Dirt with Grass=Tanah Berumput +Dirt with Grass and Footsteps=Tanah Berumput dan Tapak Kaki +Dirt with Savanna Grass= +Dirt with Snow=Tanah Bersalji +Dirt with Rainforest Litter=Tanah Bersarap Hutan Hujan +Dirt with Coniferous Litter=Tanah Bersarap Hutan Konifer +Savanna Dirt= +Savanna Dirt with Savanna Grass= +Permafrost=Ibun Abadi +Permafrost with Stones=Ibun Abadi Berbatu +Permafrost with Moss=Ibun Abadi Berlumut +Sand=Pasir +Desert Sand=Pasir Gurun +Silver Sand=Pasir Perak +Gravel=Kelikir +Clay=Tanah Liat +Snow=Salji +Snow Block=Bongkah Salji +Ice=Ais +Cave Ice=Ais Gua +Apple Tree=Kayu Pokok Epal +Apple Wood Planks=Papan Kayu Epal +Apple Tree Sapling=Anak Pokok Epal +Apple Tree Leaves=Daun Pokok Epal +Apple=Epal +Apple Marker=Penanda Epal +Jungle Tree=Kayu Pokok Hutan +Jungle Wood Planks=Papan Kayu Hutan +Jungle Tree Leaves=Daun Pokok Hutan +Jungle Tree Sapling=Anak Pokok Hutan +Emergent Jungle Tree Sapling=Anak Pokok Hutan Kembang +Pine Tree=Kayu Pokok Pain +Pine Wood Planks=Papan Kayu Pain +Pine Needles=Daun Pokok Pain +Pine Tree Sapling=Anak Pokok Pain +Acacia Tree=Kayu Pokok Akasia +Acacia Wood Planks=Papan Kayu Akasia +Acacia Tree Leaves=Daun Pokok Akasia +Acacia Tree Sapling=Anak Pokok Akasia +Aspen Tree=Kayu Pokok Aspen +Aspen Wood Planks=Papan Kayu Aspen +Aspen Tree Leaves=Daun Pokok Aspen +Aspen Tree Sapling=Anak Pokok Aspen +Coal Ore=Bijih Batu Arang +Coal Block=Bongkah Batu Arang +Iron Ore=Bijih Besi +Steel Block=Bongkah Keluli +Copper Ore=Bijih Tembaga +Copper Block=Bongkah Tembaga +Tin Ore=Bijih Timah +Tin Block=Bongkah Timah +Bronze Block=Bongkah Gangsa +Mese Ore=Bijih Mese +Mese Block=Bongkah Mese +Gold Ore=Bijih Emas +Gold Block=Bongkah Emas +Diamond Ore=Bijih Intan +Diamond Block=Bongkah Intan +Cactus=Kaktus +Large Cactus Seedling=Benih Kaktus Besar +Papyrus=Papirus +Dry Shrub=Pokok Renek Kering +Jungle Grass=Rumput Hutan +Grass=Rumput +Savanna Grass= +Fern=Paku Pakis +Marram Grass=Rumput Maram +Bush Stem=Batang Belukar +Bush Leaves=Daun Belukar +Bush Sapling=Anak Belukar +Blueberry Bush Leaves with Berries=Daun Belukar Beri Biru Berberi +Blueberry Bush Leaves=Daun Belukar Beri Biru +Blueberry Bush Sapling=Anak Belukar Beri Biru +Acacia Bush Stem=Batang Belukar Akasia +Acacia Bush Leaves=Daun Belukar Akasia +Acacia Bush Sapling=Anak Belukar Akasia +Pine Bush Stem=Batang Belukar Pain +Pine Bush Needles=Daun Belukar Pain +Pine Bush Sapling=Anak Belukar Pain +Kelp=Kelpa +Green Coral=Batu Karang Hijau +Pink Coral=Batu Karang Merah Jambu +Cyan Coral=Batu Karang Biru Kehijauan +Brown Coral=Batu Karang Perang +Orange Coral=Batu Karang Jingga +Coral Skeleton= Rangka Karang +Water Source=Sumber Air +Flowing Water=Air Mengalir +River Water Source=Sumber Air Sungai +Flowing River Water=Air Sungai Mengalir +Lava Source=Sumber Lava +Flowing Lava=Lava Mengalir +Empty Bookshelf=Rak Buku Kosong +Bookshelf (@1 written, @2 empty books)=Rak Buku (@1 buku bertulis, @2 buku kosong) +Bookshelf=Rak Buku +Text too long=Tulisan terlalu panjang +"@1"="@1" +Wooden Sign=Papan Tanda Kayu +Steel Sign=Papan Tanda Keluli +Wooden Ladder=Tangga Panjat Kayu +Steel Ladder=Tangga Panjat Keluli +Apple Wood Fence=Pagar Kayu Epal +Acacia Wood Fence=Pagar Kayu Akasia +Jungle Wood Fence=Pagar Kayu Hutan +Pine Wood Fence=Pagar Kayu Pain +Aspen Wood Fence=Pagar Kayu Aspen +Apple Wood Fence Rail=Pagar Rel Kayu Epal +Acacia Wood Fence Rail=Pagar Rel Kayu Akasia +Jungle Wood Fence Rail=Pagar Rel Kayu Hutan +Pine Wood Fence Rail=Pagar Rel Kayu Pain +Aspen Wood Fence Rail=Pagar Rel Kayu Aspen +Glass=Kaca +Obsidian Glass=Kaca Obsidia +Brick Block=Bongkah Bata +Mese Lamp=Lampu Mese +Apple Wood Mese Post Light= +Acacia Wood Mese Post Light= +Jungle Wood Mese Post Light= +Pine Wood Mese Post Light= +Aspen Wood Mese Post Light= +Cloud=Awan +Wooden Pickaxe=Beliung Kayu +Stone Pickaxe=Beliung Batu +Bronze Pickaxe=Beliung Gangsa +Steel Pickaxe=Beliung Keluli +Mese Pickaxe=Beliung Mese +Diamond Pickaxe=Beliung Intan +Wooden Shovel=Penyodok Kayu +Stone Shovel=Penyodok Batu +Bronze Shovel=Penyodok Gangsa +Steel Shovel=Penyodok Keluli +Mese Shovel=Penyodok Mese +Diamond Shovel=Penyodok Intan +Wooden Axe=Kapak Kayu +Stone Axe=Kapak Batu +Bronze Axe=Kapak Gangsa +Steel Axe=Kapak Keluli +Mese Axe=Kapak Mese +Diamond Axe=Kapak Intan +Wooden Sword=Pedang Kayu +Stone Sword=Pedang Batu +Bronze Sword=Pedang Gangsa +Steel Sword=Pedang Keluli +Mese Sword=Pedang Mese +Diamond Sword=Pedang Intan +Torch=Obor +@1 will intersect protection on growth.=@1 akan masuk kawasan perlindungan lain apabila ia tumbuh. + + +##### not used anymore ##### + +Dirt with Dry Grass=Tanah Berumput Kering +Dry Dirt=Tanah Kering +Dry Dirt with Dry Grass=Tanah Kering Berumput Kering +Dry Grass=Rumput Kering +Mese Post Light=Lampu Tiang Mese diff --git a/mods/default/locale/default.pl.tr b/mods/default/locale/default.pl.tr new file mode 100644 index 00000000..dd08b841 --- /dev/null +++ b/mods/default/locale/default.pl.tr @@ -0,0 +1,215 @@ +# textdomain: default +Locked Chest=Zablokowana skrzynia +Locked Chest (owned by @1)=Zablokowana skrzynia (właściciel: @1) +You do not own this chest.=Nie jesteś właścicielem tej skrzyni. +a locked chest=zablokowana skrzynia +Chest=Skrzynia +Write=Zapis +Read=Odczyt +Title:=Tytuł: +Contents:=Zawartość: +Save=Zapisz +by @1=autor: @1 +Page @1 of @2=Strona @1 z @2 +The book you were writing to mysteriously disappeared.= +"@1" by @2="@1" przez @2 +Blueberries=Jagody +Book=Książka +Book with Text=Zapisana książka +Bronze Ingot=Sztabka brązu +Clay Brick=Gliniana cegła +Clay Lump=Glina +Coal Lump=Węgiel +Copper Ingot=Sztabka miedzi +Copper Lump=Bryłka miedzi +Diamond=Diament +Flint=Krzemień +Gold Ingot=Sztabka złota +Gold Lump=Bryłka złota +Iron Lump=Bryłka żelaza +Mese Crystal=Kryształ Mese +Mese Crystal Fragment=Fragment kryształu Mese +Obsidian Shard=Odłamek obsydianu +Paper=Papier +Steel Ingot=Sztabka stali +Stick=Patyk +Tin Ingot=Sztabka cyny +Tin Lump=Bryłka cyny +Furnace is empty=Piec jest pusty +100% (output full)=100% (zapełnione) +@1%=@1% +Not cookable=Nie nadaje się do przepalania +Empty=Puste +Furnace active=Piec aktywny +Furnace inactive=Piec nieaktywny +(Item: @1; Fuel: @2)=(Przedmiot: @1; Paliwo: @2) +Furnace=Piec +Stone=Kamień +Cobblestone=Bruk +Stone Brick=Kamienne cegły +Stone Block=Blok kamienia +Mossy Cobblestone=Bruk z mchem +Desert Stone=Pustynny kamień +Desert Cobblestone=Pustynny bruk +Desert Stone Brick=Pustynne kamienne cegły +Desert Stone Block=Blok pustynnego kamienia +Sandstone=Piaskowiec +Sandstone Brick=Cegły z piaskowca +Sandstone Block=Blok piaskowca +Desert Sandstone=Pustynny piaskowiec +Desert Sandstone Brick=Cegły z pustynnego piaskowca +Desert Sandstone Block=Blok pustynnego piaskowca +Silver Sandstone=Srebrny piaskowiec +Silver Sandstone Brick=Cegły z srebrnego piaskowca +Silver Sandstone Block=Blok srebrnego piaskowca +Obsidian=Obsydian +Obsidian Brick=Obsydianowe cegły +Obsidian Block=Blok obsydianu +Dirt=Ziemia +Dirt with Grass=Ziemia z trawą +Dirt with Grass and Footsteps=Ziemia z trawą i śladami +Dirt with Savanna Grass=Ziemia z sawannową trawą +Dirt with Snow=Ziemia ze śniegiem +Dirt with Rainforest Litter=Ziemia ze ściółką lasu deszczowego +Dirt with Coniferous Litter=Ziemia ze ściółką lasu iglastego +Savanna Dirt=Sawannowa ziemia +Savanna Dirt with Savanna Grass=Sawannowa ziemia z sawannową trawą +Permafrost=Zmarzlina +Permafrost with Stones=Zmarzlina z kamieniami +Permafrost with Moss=Zmarzlina z mchem +Sand=Piasek +Desert Sand=Pustynny piasek +Silver Sand=Srebrny piasek +Gravel=Żwir +Clay=Glina +Snow=Śnieg +Snow Block=Blok śniegu +Ice=Lód +Cave Ice=Jaskiniowy lód +Apple Tree=Jabłkowe drewno +Apple Wood Planks=Deski z drzewa jabłkowego +Apple Tree Sapling=Sadzonka drzewa jabłkowego +Apple Tree Leaves=Liście drzewa jabłkowego +Apple=Jabłko +Apple Marker=Znacznik jabłka +Jungle Tree=Dżunglowe drewno +Jungle Wood Planks=Deski z dżunglowego drzewa +Jungle Tree Leaves=Liście dżunglowego drzewa +Jungle Tree Sapling=Sadzonka dżunglowego drzewa +Emergent Jungle Tree Sapling=Wyłaniająca się sadzonka dżunglowego drzewa +Pine Tree=Sosnowe drewno +Pine Wood Planks=Deski z sosnowego drzewa +Pine Needles=Sosnowe igły +Pine Tree Sapling=Sadzonka sosnowego drzewa +Acacia Tree=Akacjowe drewno +Acacia Wood Planks=Deski z akacjowego drzewa +Acacia Tree Leaves=Liście akacjowego drzewa +Acacia Tree Sapling=Sadzonka akacjowego drzewa +Aspen Tree=Brzozowe drzewo +Aspen Wood Planks=Deski z brzozowego drzewa +Aspen Tree Leaves=Liście brzozowego drzewa +Aspen Tree Sapling=Sadzonka brzozowego drzewa +Coal Ore=Ruda węgla +Coal Block=Blok węgla +Iron Ore=Ruda żelaza +Steel Block=Blok stali +Copper Ore=Ruda miedzi +Copper Block=Blok miedzi +Tin Ore=Ruda cyny +Tin Block=Blok cyny +Bronze Block=Blok brązu +Mese Ore=Ruda Mese +Mese Block=Blok Mese +Gold Ore=Ruda złota +Gold Block=Blok złota +Diamond Ore=Ruda diamentu +Diamond Block=Blok diamentu +Cactus=Kaktus +Large Cactus Seedling=Sadzonka dużego kaktusa +Papyrus=Papirus +Dry Shrub=Uschnięty krzak +Jungle Grass=Dżunglowa trawa +Grass=Trawa +Savanna Grass=Sawannowa trawa +Fern=Paproć +Marram Grass=Trzcinnik leśny +Bush Stem=Korzeń krzaku +Bush Leaves=Liście krzaku +Bush Sapling=Sadzonka krzaku +Blueberry Bush Leaves with Berries=Liście jagodowego krzaku z jagodami +Blueberry Bush Leaves=Liście jagodowego krzaku +Blueberry Bush Sapling=Sadzonka jagodowego krzaku +Acacia Bush Stem=Korzeń akacjowego krzaku +Acacia Bush Leaves=Liście akacjowego krzaku +Acacia Bush Sapling=Sadzonka akacjowego krzaku +Pine Bush Stem=Korzeń sosnowego krzaku +Pine Bush Needles=Igły sosnowego krzaku +Pine Bush Sapling=Sadzonka sosnowego krzaku +Kelp=Wodorost +Green Coral=Zielony koralowiec +Pink Coral=Różowy koralowiec +Cyan Coral=Cyjanowy koralowiec +Brown Coral=Brązowy koralowiec +Orange Coral=Pomarańczowy koralowiec +Coral Skeleton=Szkielet koralowca +Water Source=Źródło wody +Flowing Water=Płynąca woda +River Water Source=Źródło wody rzecznej +Flowing River Water=Płynąca woda rzeczna +Lava Source=Źródło lawy +Flowing Lava=Płynąca lawa +Empty Bookshelf=Pusta półka na książki +Bookshelf (@1 written, @2 empty books)=Półka na książki (@1 zapisanych, @2 pustych książek) +Bookshelf=Półka na książki +Text too long=Tekst jest zbyt długi +"@1"="@1" +Wooden Sign=Drewniana tabliczka +Steel Sign=Stalowa tabliczka +Wooden Ladder=Drewniana drabina +Steel Ladder=Stalowa drabina +Apple Wood Fence=Płot z jabłkowego drzewa +Acacia Wood Fence=Płot z akacjowego drzewa +Jungle Wood Fence=Płot z dżunglowego drzewa +Pine Wood Fence=Płot z sosnowego drzewa +Aspen Wood Fence=Płot z brzozowego drzewa +Apple Wood Fence Rail=Szyna ogrodzeniowa z jabłkowego drzewa +Acacia Wood Fence Rail=Szyna ogrodzeniowa z akacjowego drzewa +Jungle Wood Fence Rail=Szyna ogrodzeniowa z dżunglowego drzewa +Pine Wood Fence Rail=Szyna ogrodzeniowa z sosnowego drzewa +Aspen Wood Fence Rail=Szyna ogrodzeniowa z brzozowego drzewa +Glass=Szkło +Obsidian Glass=Obsydianowe szkło +Brick Block=Blok cegieł +Mese Lamp=Lampa Mese +Apple Wood Mese Post Light=Lampa Mese z obramowaniem z jabłkowego drzewa +Acacia Wood Mese Post Light=Lampa Mese z obramowaniem z akacjowego drzewa +Jungle Wood Mese Post Light=Lampa Mese z obramowaniem z dżunglowego drzewa +Pine Wood Mese Post Light=Lampa Mese z obramowaniem z sosnowego drzewa +Aspen Wood Mese Post Light=Lampa Mese z obramowaniem z brzozowego drzewa +Cloud=Chmura +Wooden Pickaxe=Drewniany kilof +Stone Pickaxe=Kamienny kilof +Bronze Pickaxe=Brązowy kilof +Steel Pickaxe=Stalowy kilof +Mese Pickaxe=Mesowy kilof +Diamond Pickaxe=Diamentowy kilof +Wooden Shovel=Drewniana łopata +Stone Shovel=Kamienna łopata +Bronze Shovel=Brązowa łopata +Steel Shovel=Stalowa łopata +Mese Shovel=Mesowa łopata +Diamond Shovel=Diamentowa łopata +Wooden Axe=Drewniana siekiera +Stone Axe=Kamienna siekiera +Bronze Axe=Brązowa siekiera +Steel Axe=Stalowa siekiera +Mese Axe=Mesowa siekiera +Diamond Axe=Diamentowa siekiera +Wooden Sword=Drewniany miecz +Stone Sword=Kamienny miecz +Bronze Sword=Brązowy miecz +Steel Sword=Stalowy miecz +Mese Sword=Mesowy miecz +Diamond Sword=Diamentowy miecz +Torch=Pochodnia +@1 will intersect protection on growth.=@1 będzie kolidować z ochroną terenu podczas rośnięcia. diff --git a/mods/default/locale/default.pt_BR.tr b/mods/default/locale/default.pt_BR.tr new file mode 100644 index 00000000..124e1fa0 --- /dev/null +++ b/mods/default/locale/default.pt_BR.tr @@ -0,0 +1,215 @@ +# textdomain: default +Locked Chest=Baú Trancado +Locked Chest (owned by @1)=Baú Trancado (pertence a @1) +You do not own this chest.=Você não é dono deste baú. +a locked chest=um baú trancado +Chest=Baú +Write= +Read= +Title:=Título: +Contents:=Conteúdo: +Save=Salvar +by @1=por @1 +Page @1 of @2=Página @1 de @2 +The book you were writing to mysteriously disappeared.= +"@1" by @2="@1" por @2 +Blueberries=Mirtilo +Book=Livro +Book with Text=Livro com Texto +Bronze Ingot=Lingote de Bronze +Clay Brick=Tijolo de Argila +Clay Lump=Pedaço de Argila +Coal Lump=Pedaço de Carvão +Copper Ingot=Lingote de Cobre +Copper Lump=Pedaço de Cobre +Diamond=Diamante +Flint=Sílex (Flint) +Gold Ingot=Lingote de Ouro +Gold Lump=Pedaço de Ouro +Iron Lump=Pedaço de Ferro +Mese Crystal=Cristal de Mese +Mese Crystal Fragment=Fragmento de Cristal de Mese +Obsidian Shard=Caco de Obsidian +Paper=Papel +Steel Ingot=Lingote de Aço +Stick=Graveto +Tin Ingot=Lingote de Estanho +Tin Lump=Pedaço de Estanho +Furnace is empty=A fornalha está vazia +100% (output full)=100% (saída cheia) +@1%=@1% +Not cookable=Não pode cozinhar +Empty=Vazio +Furnace active=Fornalha ativa +Furnace inactive=Fornalha inativa +(Item: @1; Fuel: @2)=(Item: @1; Combustível: @2) +Furnace=Fornalha +Stone=Pedra +Cobblestone=Pedregulho +Stone Brick=Tijolo de Pedra +Stone Block=Bloco de Pedra +Mossy Cobblestone=Pedregulho Musgoso +Desert Stone=Pedra do Deserto +Desert Cobblestone=Pedregulho do Deserto +Desert Stone Brick=Tijolo de Pedra do Deserto +Desert Stone Block=Bloco de Pedra do Deserto +Sandstone=Arenito +Sandstone Brick=Tijolo de Arenito +Sandstone Block=Bloco de Arenito +Desert Sandstone=Bloco de Arenito do Deserto +Desert Sandstone Brick=Tijolo de Arenito do Deserto +Desert Sandstone Block=Bloco de Arenito do Deserto +Silver Sandstone=Arenito Prateado +Silver Sandstone Brick=Tijolo de Arenito Prateado +Silver Sandstone Block=Bloco de Arenito Prateado +Obsidian=Obsidiana +Obsidian Brick=Tijolo de Obsidiana +Obsidian Block=Bloco de Obsidiana +Dirt=Terra +Dirt with Grass=Terra com Grama +Dirt with Grass and Footsteps=Terra com Grama e Pegadas +Dirt with Savanna Grass=Terra com Grama da Savana +Dirt with Snow=Terra com Neve +Dirt with Rainforest Litter=Terra com Serrapilheira Tropical +Dirt with Coniferous Litter=Terra com Serrapilheira +Savanna Dirt=Terra da Savana +Savanna Dirt with Savanna Grass=Terra da Savana com Grama da Savana +Permafrost=Terra Congelada +Permafrost with Stones=Terra Congelada com Pedras +Permafrost with Moss=Terra Congelada com Musgo +Sand=Areia +Desert Sand=Areia do Deserto +Silver Sand=Areia Prateada +Gravel=Cascalho +Clay=Argila +Snow=Neve +Snow Block=Bloco de Neve +Ice=Gelo +Cave Ice=Caverna de Gelo +Apple Tree=Macieira +Apple Wood Planks=Tábuas de Macieira +Apple Tree Sapling=Muda de Macieira +Apple Tree Leaves=Folhas de Macieira +Apple=Maçã +Apple Marker=Marcador de Maçã +Jungle Tree=Árvore da Selva +Jungle Wood Planks=Tábuas de Árvore da Selva +Jungle Tree Leaves=Folhas de Árvore da Selva +Jungle Tree Sapling=Muda de Árvore da Selva +Emergent Jungle Tree Sapling=Muda Crescida de Árvore da Selva +Pine Tree=Pinheiro +Pine Wood Planks=Tábuas de Pinheiro +Pine Needles=Agulhas de Pinheiro +Pine Tree Sapling=Muda de Pinheiro +Acacia Tree=Acácia +Acacia Wood Planks=Tábuas de Acácia +Acacia Tree Leaves=Folhas de Acácia +Acacia Tree Sapling=Mudas de Acácia +Aspen Tree=Álamo +Aspen Wood Planks=Tábuas de Álamo +Aspen Tree Leaves=Folhas de Álamo +Aspen Tree Sapling=Muda de Álamo +Coal Ore=Minério de Carvão +Coal Block=Bloco de Carvão +Iron Ore=Minério de Ferro +Steel Block=Bloco de Aço +Copper Ore=Minério de Cobre +Copper Block=Bloco de Cobre +Tin Ore=Minério de Estanho +Tin Block=Bloco de Estanho +Bronze Block=Bloco de Bronze +Mese Ore=Minério de Mese +Mese Block=Bloco de Mese +Gold Ore=Minério de Ouro +Gold Block=Bloco de Ouro +Diamond Ore=Minério de Diamante +Diamond Block=Bloco de Diamante +Cactus=Cacto +Large Cactus Seedling=Grande Muda de Cacto +Papyrus=Papiro +Dry Shrub=Arbusto Seco +Jungle Grass=Grama da Selva +Grass=Grama +Savanna Grass=Grama da Savana +Fern=Samambaia +Marram Grass=Grama de Feno +Bush Stem=Caule de Arbusto +Bush Leaves=Folhas de Arbusto +Bush Sapling=Muda de Arbusto +Blueberry Bush Leaves with Berries=Folhas de Arbusto de Mirtilo com Bagas +Blueberry Bush Leaves=Folhas de Arbusto de Mirtilo +Blueberry Bush Sapling=Muda de Arbusto de Mirtilo +Acacia Bush Stem=Caule de Arbusto de Acácia +Acacia Bush Leaves=Folhas de Arbusto de Acácia +Acacia Bush Sapling=Muda de Arbusto de Acácia +Pine Bush Stem=Caule de Arbusto de Pinheiro +Pine Bush Needles=Agulha de Arbusto de Pinheiro +Pine Bush Sapling=Muda de Arbusto de Pinheiro +Kelp=Alga +Green Coral=Coral Verde +Pink Coral=Coral Rosa +Cyan Coral=Coral Ciano +Brown Coral=Coral Marrom +Orange Coral=Coral Laranja +Coral Skeleton=Esqueleto de Coral +Water Source=Fonte de Água +Flowing Water=Água Corrente +River Water Source=Fonte de Água do Rio +Flowing River Water=Água Corrente do Rio +Lava Source=Fonte de Lava +Flowing Lava=Lava Corrente +Empty Bookshelf=Estante de Livros Vazia +Bookshelf (@1 written, @2 empty books)=Estante de Livros (@1 livros escritos, @2 livros em branco) +Bookshelf=Estante de Livros +Text too long=Texto muito longo +"@1"="@1" +Wooden Sign=Placa de Madeira +Steel Sign=Placa de Aço +Wooden Ladder=Escada de Madeira +Steel Ladder=Escada de Aço +Apple Wood Fence=Cerca de Macieira +Acacia Wood Fence=Cerca de Acácia +Jungle Wood Fence=Cerca de Madeira da Selva +Pine Wood Fence=Cerca de Pinheiro +Aspen Wood Fence=Cerca de Álamo +Apple Wood Fence Rail=Trilho de Cerca de Macieira +Acacia Wood Fence Rail=Trilho de Cerca de Acácia +Jungle Wood Fence Rail=Trilho de Cerca de Madeira da Selva +Pine Wood Fence Rail=Trilho de Cerca de Pinheiro +Aspen Wood Fence Rail=Trilho de Cerca de Álamo +Glass=Vidro +Obsidian Glass=Vidro de Obsidiana +Brick Block=Bloco de Tijolos +Mese Lamp=Lâmpada de Mese +Apple Wood Mese Post Light=Poste de Lâmpada de Mese de Macieira +Acacia Wood Mese Post Light=Poste de Lâmpada de Mese de Acácia +Jungle Wood Mese Post Light=Poste de Lâmpada de Mese de Madeira da Selva +Pine Wood Mese Post Light=Poste de Lâmpada de Mese de Pinheiro +Aspen Wood Mese Post Light=Poste de Lâmpada de Mese de Aspen +Cloud=Nuvem +Wooden Pickaxe=Picareta de Madeira +Stone Pickaxe=Picareta de Pedra +Bronze Pickaxe=Picareta de Bronze +Steel Pickaxe=Picareta de Aço +Mese Pickaxe=Picareta de Mese +Diamond Pickaxe=Picareta de Diamante +Wooden Shovel=Pá de Madeira +Stone Shovel=Pá de Pedra +Bronze Shovel=Pá de Bronze +Steel Shovel=Pá de Aço +Mese Shovel=Pá de Mese +Diamond Shovel=Pá de Diamante +Wooden Axe=Machado de Madeira +Stone Axe=Machado de Pedra +Bronze Axe=Machado de Bronze +Steel Axe=Machado de Aço +Mese Axe=Machado de Mese +Diamond Axe=Machado de Diamante +Wooden Sword=Espada de Madeira +Stone Sword=Espada de Pedra +Bronze Sword=Espada de Bronze +Steel Sword=Espada de Aço +Mese Sword=Espada de Mese +Diamond Sword=Espada de Diamante +Torch=Tocha +@1 will intersect protection on growth.=@1 cruzará a proteção no crescimento. diff --git a/mods/default/locale/default.ru.tr b/mods/default/locale/default.ru.tr new file mode 100644 index 00000000..d6d5ac3f --- /dev/null +++ b/mods/default/locale/default.ru.tr @@ -0,0 +1,224 @@ +# textdomain: default +Locked Chest=Заблокированный Сундук +Locked Chest (owned by @1)=Заблокированный Сундук (владелец: @1) +You do not own this chest.=Вы не владелец этого сундука. +a locked chest=заблокированный сундук +Chest=Сундук +Write=Писать +Read=Читать +Title:=Заголовок: +Contents:=Содержимое: +Save=Сохранить +by @1=@1 +Page @1 of @2=Страница @1 из @2 +The book you were writing to mysteriously disappeared.=Книга, в которую вы писали, загадочно исчезла. +"@1" by @2="@1" @2 +Blueberries=Черника +Book=Книга +Book with Text=Книга с Текстом +Bronze Ingot=Бронзовый Слиток +Clay Brick=Глиняный Кирпич +Clay Lump=Ком Глины +Coal Lump=Кусок Угля +Copper Ingot=Медный Слиток +Copper Lump=Кусок Меди +Diamond=Алмаз +Flint=Кремень +Gold Ingot=Золотой Слиток +Gold Lump=Кусок Золота +Iron Lump=Кусок Железа +Mese Crystal=Кристалл Месе +Mese Crystal Fragment=Осколок Кристалла Месе +Obsidian Shard=Обсидиановый Осколок +Paper=Бумага +Steel Ingot=Железный Слиток +Stick=Палка +Tin Ingot=Оловянный Слиток +Tin Lump=Кусок Олова +Furnace is empty=Печь пуста +100% (output full)=100% (полное приготовление) +@1%=@1% +Not cookable=Не может быть приготовлено +Empty=Пустое +Furnace active=Печь зажжена +Furnace inactive=Печь не зажжена +(Item: @1; Fuel: @2)=(Предмет: @1; Топливо: @2) +Furnace=Печь +Stone=Камень +Cobblestone=Булыжник +Stone Brick=Каменный Кирпич +Stone Block=Каменный Блок +Mossy Cobblestone=Мшистый Булыжник +Desert Stone=Пустынный Камень +Desert Cobblestone=Пустынный Булыжник +Desert Stone Brick=Пустынный Каменный Кирпич +Desert Stone Block=Пустынный Каменный Блок +Sandstone=Песчаник +Sandstone Brick=Песчаниковый Кирпич +Sandstone Block=Песчаниковый Блок +Desert Sandstone=Пустынный Песчаник +Desert Sandstone Brick=Пустынный Песчаниковый Кирпич +Desert Sandstone Block=Пустынный Песчаниковый Блок +Silver Sandstone=Серебряный Песчаник +Silver Sandstone Brick=Серебряный Песчаниковый Кирпич +Silver Sandstone Block=Серебряный Песчаниковый Блок +Obsidian=Обсидиан +Obsidian Brick=Обсидиановый Кирпич +Obsidian Block=Обсидиановый Блок +Dirt=Земля +Dirt with Grass=Земля с Травой +Dirt with Grass and Footsteps=Земля с Травой и Следами +Dirt with Savanna Grass=Земля с Саванной Травой +Dirt with Snow=Земля Со Снегом +Dirt with Rainforest Litter=Земля с Тропической Подстилкой +Dirt with Coniferous Litter=Земля с Сосновой Подстилкой +Savanna Dirt=Саванная Земля +Savanna Dirt with Savanna Grass=Саванная Земля с Травой +Permafrost=Замороженная Почва +Permafrost with Stones=Замороженная Почва с Камнями +Permafrost with Moss=Замороженная Почва с Мхом +Sand=Песок +Desert Sand=Пустынный Песок +Silver Sand=Серебряный Песок +Gravel=Гравий +Clay=Глиняный Блок +Snow=Снег +Snow Block=Снежный Блок +Ice=Лёд +Cave Ice=Пещерный Лёд +Apple Tree=Ствол Яблони +Apple Wood Planks=Яблоневые Доски +Apple Tree Sapling=Саженец Яблони +Apple Tree Leaves=Яблоневая Листва +Apple=Яблоко +Apple Marker=Яблочная Метка +Jungle Tree=Ствол Тропического Дерева +Jungle Wood Planks=Доски из Тропического Дерева +Jungle Tree Leaves=Листва Тропического Дерева +Jungle Tree Sapling=Саженец Тропического Дерева +Emergent Jungle Tree Sapling=Выросший Саженец Тропического Дерева +Pine Tree=Сосновый Ствол +Pine Wood Planks=Сосновые Доски +Pine Needles=Сосновая Хвоя +Pine Tree Sapling=Саженец Сосны +Acacia Tree=Ствол Акации +Acacia Wood Planks=Доски Акации +Acacia Tree Leaves=Листва Акации +Acacia Tree Sapling=Саженец Акации +Aspen Tree=Ствол Осины +Aspen Wood Planks=Осиновые Доски +Aspen Tree Leaves=Осиновая Листва +Aspen Tree Sapling=Саженец Осины +Coal Ore=Уголь +Coal Block=Угольный Блок +Iron Ore=Железная Руда +Steel Block=Стальной Блок +Copper Ore=Медная Руда +Copper Block=Медный Блок +Tin Ore=Оловянная Руда +Tin Block=Оловянный Блок +Bronze Block=Бронзовый Блок +Mese Ore=Месевая Руда +Mese Block=Месевый Блок +Gold Ore=Золотая Руда +Gold Block=Золотой Блок +Diamond Ore=Алмаз +Diamond Block=Алмазный Блок +Cactus=Кактус +Large Cactus Seedling=Саженец Кактуса +Papyrus=Папирус +Dry Shrub=Сухой Куст +Jungle Grass=Тропическая Трава +Grass=Трава +Savanna Grass=Саванная Трава +Fern=Папоротник +Marram Grass=Песколюб +Bush Stem=Стебли Куста +Bush Leaves=Листья Куста +Bush Sapling=Саженец Куста +Blueberry Bush Leaves with Berries=Куст Черники с Ягодами +Blueberry Bush Leaves=Куст Черники +Blueberry Bush Sapling=Саженец Куста Черники +Acacia Bush Stem=Стебли Куста Акации +Acacia Bush Leaves=Листья Куста Акации +Acacia Bush Sapling=Саженец Куста Акации +Pine Bush Stem=Стебли Хвойного Куста +Pine Bush Needles=Хвоя Куста +Pine Bush Sapling=Саженец Хвойного Куста +Kelp=Ламинария +Green Coral=Зеленый Коралл +Pink Coral=Розовый Коралл +Cyan Coral=Голубой Коралл +Brown Coral=Коричневый Коралл +Orange Coral=Оранжевый Коралл +Coral Skeleton=Коралловый Остов +Water Source=Водный Источник +Flowing Water=Текущая Вода +River Water Source=Речной Водный Источник +Flowing River Water=Текущая Речная Вода +Lava Source=Лавовый Источник +Flowing Lava=Текущая Лава +Empty Bookshelf=Пустая Книжная Полка +Bookshelf (@1 written, @2 empty books)=Книжная Полка (@1 написано, @2 чистые книги) +Bookshelf=Книжная Полка +Text too long=Текст слишком длинный +"@1"="@1" +Wooden Sign=Деревянная Табличка +Steel Sign=Стальная Табличка +Wooden Ladder=Деревянная Лестница +Steel Ladder=Стальная Лестница +Apple Wood Fence=Яблоневый Деревянный Забор +Acacia Wood Fence=Деревянный Забор Из Акации +Jungle Wood Fence=Деревянный Забор Из Тропического Дерева +Pine Wood Fence=Сосновый Деревянный Забор +Aspen Wood Fence=Осиновый Деревянный Забор +Apple Wood Fence Rail=Яблоневый Деревянный Реечный Забор +Acacia Wood Fence Rail=Деревянный Реечный Забор Из Акации +Jungle Wood Fence Rail=Деревянный Реечный Забор Из Тропического Дерева +Pine Wood Fence Rail=Сосновый Деревянный Реечный Забор +Aspen Wood Fence Rail=Осиновый Деревянный Реечный Забор +Glass=Стекло +Obsidian Glass=Обсидиановое Стекло +Brick Block=Кирпичный Блок +Mese Lamp=Месе Лампа +Apple Wood Mese Post Light=Столбовой Месе светильник из Яблони +Acacia Wood Mese Post Light=Столбовой Месе светильник из Акации +Jungle Wood Mese Post Light=Столбовой Месе светильник из Тропического дерева +Pine Wood Mese Post Light=Столбовой Месе светильник из Сосны +Aspen Wood Mese Post Light=Столбовой Месе светильник из Осины +Cloud=Облако +Wooden Pickaxe=Деревянная Кирка +Stone Pickaxe=Каменная Кирка +Bronze Pickaxe=Бронзовая Кирка +Steel Pickaxe=Стальная Кирка +Mese Pickaxe=Месе Кирка +Diamond Pickaxe=Алмазная Кирка +Wooden Shovel=Деревянная Лопата +Stone Shovel=Каменная Лопата +Bronze Shovel=Бронзовая Лопата +Steel Shovel=Стальная Лопата +Mese Shovel=Месе Лопата +Diamond Shovel=Алмазная Лопата +Wooden Axe=Деревянный Топор +Stone Axe=Каменный Топор +Bronze Axe=Бронзовый Топор +Steel Axe=Стальной Топор +Mese Axe=Месе Топор +Diamond Axe=Алмазный Топор +Wooden Sword=Деревянный Меч +Stone Sword=Каменный Меч +Bronze Sword=Бронзовый Меч +Steel Sword=Стальной Меч +Mese Sword=Месе Меч +Diamond Sword=Алмазный Меч +Torch=Факел +@1 will intersect protection on growth.=@1 пересечёт защиту по росту. + + +##### not used anymore ##### + +Dirt with Dry Grass=Земля с Сухой Травой +Dry Dirt=Сухая Земля +Dry Dirt with Dry Grass=Сухая Земля с Сухой Травой +Dry Grass=Сухая Трава +Mese Post Light=Столб с Месе Фонарем diff --git a/mods/default/locale/default.sk.tr b/mods/default/locale/default.sk.tr new file mode 100644 index 00000000..337ebcfb --- /dev/null +++ b/mods/default/locale/default.sk.tr @@ -0,0 +1,220 @@ +# textdomain: default +Locked Chest=Uzamknutá truhlica +Locked Chest (owned by @1)=Uzamknutá truhlica (Vlastník - @1) +You do not own this chest.=Túto truhlicu nevlastníš. +a locked chest=zamknutá truhlica +Chest=Truhlica +Write= +Read= +Title:=Názov: +Contents:=Obsah: +Save=Uložiť +by @1=od @1 +Page @1 of @2=Strana @1 z @2 +The book you were writing to mysteriously disappeared.= +"@1" by @2=„@1“ z @2 +Blueberries=Čučoriedky +Book=Kniha +Book with Text=Kniha s textom +Bronze Ingot=Bronzový ingot +Clay Brick=Nepálená tehla +Clay Lump=Hruda ílu +Coal Lump=Hruda uhlia +Copper Ingot=Medený ingot +Copper Lump=Hruda medi +Diamond=Diamant +Flint=Kresací kamienok +Gold Ingot=Zlatý ingot +Gold Lump=Hruda zlata +Iron Lump=Hruda železa +Mese Crystal=Mese Krištáľ +Mese Crystal Fragment=Fragment Mese krištáľu +Obsidian Shard=Úlomok obsidiánu +Paper=Papier +Steel Ingot=Oceľový ingot +Stick=Palica +Tin Ingot=Cínový ingot +Tin Lump=Hruda cínu +Furnace is empty=Pec je prázdna +100% (output full)=100% (Výstup je plný) +@1%=@1% +Not cookable=Nie je variteľné +Empty=Prázdne +Furnace active=Pec je aktívna +Furnace inactive=Pec je neaktívna +(Item: @1; Fuel: @2)=(Vec: @1; Palivo: @2) +Furnace=Pec +Stone=Kameň +Cobblestone=Dlažbový kameň +Stone Brick=Tehla z kameňa +Stone Block=Blok kameňa +Mossy Cobblestone=Dlažbový kameň obrastený machom +Desert Stone=Púštny kameň +Desert Cobblestone=Púštny dlažbový kameň +Desert Stone Brick=Tehla z púštneho kameňa +Desert Stone Block=Blok púštneho kameňa +Sandstone=Pieskovec +Sandstone Brick=Tehla z pieskovca +Sandstone Block=Blok pieskovca +Desert Sandstone=Púštny pieskovec +Desert Sandstone Brick=Tehla z púštneho pieskovca +Desert Sandstone Block=Blok púštneho pieskovca +Silver Sandstone=Strieborný pieskovec +Silver Sandstone Brick=Tehla zo strieborného pieskovca +Silver Sandstone Block=Blok strieborného pieskovca +Obsidian=Obsidián +Obsidian Brick=Tehla z obsidiánu +Obsidian Block=Blok obsidiánu +Dirt=Hlina +Dirt with Grass=Hlina s trávou +Dirt with Grass and Footsteps=Hlina s trávou a stopami +Dirt with Savanna Grass=Hlina s trávou zo savany +Dirt with Snow=Hlina so snehom +Dirt with Rainforest Litter=Hlina s povrchom dažďového pralesa +Dirt with Coniferous Litter=Hlina s ihličnatým povrchom +Savanna Dirt=Hlina zo savany +Savanna Dirt with Savanna Grass=Hlina zo savany s trávou +Permafrost=Permafrost +Permafrost with Stones=Permafrost s kameňmi +Permafrost with Moss=Permafrost s machom +Sand=Piesok +Desert Sand=Púštny piesok +Silver Sand=Strieborný piesok +Gravel=Štrk +Clay=Íl +Snow=Sneh +Snow Block=Blok snehu +Ice=Ľad +Cave Ice=Jaskynný ľad +Apple Tree=Jabloň +Apple Wood Planks=Drevené dosky z jablone +Apple Tree Sapling=Stromček jablone +Apple Tree Leaves=Listy z jablone +Apple=Jablko +Apple Marker=Jablková značka +Jungle Tree=Ďungľový strom +Jungle Wood Planks=Drevené dosky z džungľového stromu +Jungle Tree Leaves=Listy z džungľového stromu +Jungle Tree Sapling=Džungľový stromček +Emergent Jungle Tree Sapling=Vznikajúci džungľový stromček +Pine Tree=Borovica +Pine Wood Planks=Drevené dosky z borovice +Pine Needles=Ihličie z borovice +Pine Tree Sapling=Borovicový stromček +Acacia Tree=Akácia +Acacia Wood Planks=Drevené dosky z akácie +Acacia Tree Leaves=Listy z akácie +Acacia Tree Sapling=Stromček akácie +Aspen Tree=Osika +Aspen Wood Planks=Drevené dosky z osiky +Aspen Tree Leaves=Listy z osiky +Aspen Tree Sapling=Stromček osiky +Coal Ore=Uhoľná ruda +Coal Block=Blok uhlia +Iron Ore=Železná ruda +Steel Block=Blok ocele +Copper Ore=Medená ruda +Copper Block=Blok medi +Tin Ore=Cínová ruda +Tin Block=Blok cínu +Bronze Block=Blok bronzu +Mese Ore=Mese Ruda +Mese Block=Blok Mese +Gold Ore=Zlatá ruda +Gold Block=Blok zlata +Diamond Ore=Diamantová ruda +Diamond Block=Blok diamantu +Cactus=Kaktus +Large Cactus Seedling=Vaľká sadenica kaktusu +Papyrus=Papyrus +Dry Shrub=Suchý ker +Jungle Grass=Džungľová tráva +Grass=Tráva +Savanna Grass=Tráva zo savany +Fern=Papraď +Marram Grass=Pobrežná tráva +Bush Stem=Stonka z kríka +Bush Leaves=Listy z kríka +Bush Sapling=Sadenica kríka +Blueberry Bush Leaves with Berries=Čučoriedkové listy s čučoriedkami +Blueberry Bush Leaves=Čučoriedkové listy +Blueberry Bush Sapling=Sadenica čučoriedky +Acacia Bush Stem=Stonka z kríka akácie +Acacia Bush Leaves=Listy z kríka akácie +Acacia Bush Sapling=Sadenica kríka akácie +Pine Bush Stem=Stonka kríka borovice +Pine Bush Needles=Ihličie kríka borovice +Pine Bush Sapling=Sadenica kríka borovice +Kelp=Riasa +Green Coral=Zelený koral +Pink Coral=Ružový koral +Cyan Coral=Tyrkysový koral +Brown Coral=Hnedý koral +Orange Coral=Oranžový koral +Coral Skeleton=Koralová kostra +Water Source=Zdroj vody +Flowing Water=Tečúca voda +River Water Source=Zdroj riečnej voda +Flowing River Water=Tečúca riečna voda +Lava Source=Zdroj lávy +Flowing Lava=Tečúca láva +Empty Bookshelf=Prázdna knižnica +Bookshelf (@1 written, @2 empty books)=Knižnica (@1 popísané, @2 prázdne knihy) +Bookshelf=Knižnica +Text too long=Text je príliš dlhý +"@1"=„@1“ +Wooden Sign=Drevená tabuľka +Steel Sign=Oceľová tabuľka +Wooden Ladder=Drevený rebrík +Steel Ladder=Oceľový rebrík +Apple Wood Fence=Drevený plot z jablone +Acacia Wood Fence=Drevený plot z akácie +Jungle Wood Fence=Drevený plot z džungľového dreva +Pine Wood Fence=Drevený plot z borovice +Aspen Wood Fence=Drevený plot z osiky +Apple Wood Fence Rail=Drevené zábradlie z jablone +Acacia Wood Fence Rail=Drevené zábradlie z akácie +Jungle Wood Fence Rail=Drevené zábradlie z džungľového dreva +Pine Wood Fence Rail=Drevené zábradlie z borovice +Aspen Wood Fence Rail=Drevené zábradlie z osiky +Glass=Sklo +Obsidian Glass=Obsidiánové sklo +Brick Block=Blok z tehál +Mese Lamp=Mese lampa +Apple Wood Mese Post Light= +Acacia Wood Mese Post Light= +Jungle Wood Mese Post Light= +Pine Wood Mese Post Light= +Aspen Wood Mese Post Light= +Cloud=Oblak +Wooden Pickaxe=Drevený krompáč +Stone Pickaxe=Kamenný krompáč +Bronze Pickaxe=Bronzový krompáč +Steel Pickaxe=Oceľový krompáč +Mese Pickaxe=Mese krompáč +Diamond Pickaxe=Diamantový krompáč +Wooden Shovel=Drevená lopata +Stone Shovel=Kamenná lopata +Bronze Shovel=Bronzová lopata +Steel Shovel=Oceľová lopata +Mese Shovel=Mese lopata +Diamond Shovel=Diamantová lopata +Wooden Axe=Drevená sekera +Stone Axe=Kamenná sekera +Bronze Axe=Bronzová sekera +Steel Axe=Oceľová sekera +Mese Axe=Mese sekera +Diamond Axe=Diamantová sekera +Wooden Sword=Drevený meč +Stone Sword=Kamenný meč +Bronze Sword=Bronzový meč +Steel Sword=Oceľový meč +Mese Sword=Mese meč +Diamond Sword=Diamantový meč +Torch=Fakľa +@1 will intersect protection on growth.=@1 prekročí pri raste chránenú zónu. + + +##### not used anymore ##### + +Mese Post Light=Mese stĺpová lampa diff --git a/mods/default/locale/default.sv.tr b/mods/default/locale/default.sv.tr new file mode 100644 index 00000000..90df6c3c --- /dev/null +++ b/mods/default/locale/default.sv.tr @@ -0,0 +1,215 @@ +# textdomain: default +Locked Chest=Låst kista +Locked Chest (owned by @1)=Låst kista (Ägd av @1) +You do not own this chest.=Du äger inte denna kista. +a locked chest=en låst kista +Chest=Kista +Write=Skriva +Read=Läs +Title:=Titel: +Contents:=Innehåll: +Save=Spara +by @1=av @1 +Page @1 of @2=Sida @1 av @2 +The book you were writing to mysteriously disappeared.= +"@1" by @2="@1" av @2 +Blueberries=Blåbär +Book=Bok +Book with Text=Bok med text +Bronze Ingot=Bronstacka +Clay Brick=Tegelsten +Clay Lump=Lerklump +Coal Lump=Kolklump +Copper Ingot=Koppartacka +Copper Lump=Kopparklump +Diamond=Diamant +Flint=Flinta +Gold Ingot=Guldtacka +Gold Lump=Guldklump +Iron Lump=Järnklump +Mese Crystal=Mesekristall +Mese Crystal Fragment=Mesekristallfragment +Obsidian Shard=Obsidianskärva +Paper=Papper +Steel Ingot=Ståltacka +Stick=Pinne +Tin Ingot=Tenntacka +Tin Lump=Tennklump +Furnace is empty=Ugnen är tom +100% (output full)=100% (utgången full) +@1%=@1% +Not cookable=Inte kokbar +Empty=Tom +Furnace active=Ugn aktiv +Furnace inactive=Ugn inaktiv +(Item: @1; Fuel: @2)=(Sak: @1; Bränsle: @2) +Furnace=Ugn +Stone=Sten +Cobblestone=Kullersten +Stone Brick=Stentegel +Stone Block=Stenblock +Mossy Cobblestone=Mossig kullersten +Desert Stone=Ökensten +Desert Cobblestone=Ökenkullersten +Desert Stone Brick=Ökenstenstegel +Desert Stone Block=Ökenstensblock +Sandstone=Sandsten +Sandstone Brick=Sandstenstegel +Sandstone Block=Sandstensblock +Desert Sandstone=Ökensandsten +Desert Sandstone Brick=Ökensandstenstegel +Desert Sandstone Block=Ökensandstensblock +Silver Sandstone=Silversandsten +Silver Sandstone Brick=Silversandstenstegel +Silver Sandstone Block=Silversandstensblock +Obsidian=Obsidian +Obsidian Brick=Obsidiantegel +Obsidian Block=Obsidianblock +Dirt=Jord +Dirt with Grass=Jord med gräs +Dirt with Grass and Footsteps=Jord med gräs och fotsteg +Dirt with Savanna Grass=Jord med savanngräs +Dirt with Snow=Jord med snö +Dirt with Rainforest Litter=Jord med regnskogströ +Dirt with Coniferous Litter=Jord med barrträd +Savanna Dirt=Savannjord +Savanna Dirt with Savanna Grass=Savannjord med savanngräs +Permafrost=Permafrost +Permafrost with Stones=Permafrost med sten +Permafrost with Moss=Permafrost med mossa +Sand=Sand +Desert Sand=Ökensand +Silver Sand=Silversand +Gravel=Grus +Clay=Lera +Snow=Snö +Snow Block=Snöblock +Ice=Is +Cave Ice=Grottis +Apple Tree=Äppleträd +Apple Wood Planks=Äppleträdplankor +Apple Tree Sapling=Äppleplanta +Apple Tree Leaves=Äpplelöv +Apple=Äpple +Apple Marker=Äpplemarkör +Jungle Tree=Djungelträd +Jungle Wood Planks=Djungelplankor +Jungle Tree Leaves=Djungellöv +Jungle Tree Sapling=Djungelplanta +Emergent Jungle Tree Sapling=Nybliven djungelplanta +Pine Tree=Tall +Pine Wood Planks=Tallplankor +Pine Needles=Granbarr +Pine Tree Sapling=Tallplanta +Acacia Tree=Akaciaträd +Acacia Wood Planks=Akaciaplankor +Acacia Tree Leaves=Akacialöv +Acacia Tree Sapling=Akaciaplanta +Aspen Tree=Asp +Aspen Wood Planks=Aspplankor +Aspen Tree Leaves=Asplöv +Aspen Tree Sapling=Aspplanta +Coal Ore=Kolmalm +Coal Block=Kolblock +Iron Ore=Järnmalm +Steel Block=Stålblock +Copper Ore=Kopparmalm +Copper Block=Kopparblock +Tin Ore=Tennmalm +Tin Block=Tennblock +Bronze Block=Bronsblock +Mese Ore=Mesemalm +Mese Block=Meseblock +Gold Ore=Guldmalm +Gold Block=Guldblock +Diamond Ore=Diamantmalm +Diamond Block=Diamantblock +Cactus=Kaktus +Large Cactus Seedling=Stor kaktusplanta +Papyrus=Papyrus +Dry Shrub=Torr buske +Jungle Grass=Djungelgräs +Grass=Gräs +Savanna Grass=Savanngräs +Fern=Ormbunke +Marram Grass=Marramgräs +Bush Stem=Buskstam +Bush Leaves=Busklöv +Bush Sapling=Buskplanta +Blueberry Bush Leaves with Berries=Blåbärsbuske med bär +Blueberry Bush Leaves=Blåbärsbuske +Blueberry Bush Sapling=Blåbärsbuskplanta +Acacia Bush Stem=Akaciabuskstam +Acacia Bush Leaves=Akaciabuske +Acacia Bush Sapling=Akaciabuskplanta +Pine Bush Stem=Tallbuskestam +Pine Bush Needles=Tallgranbarr +Pine Bush Sapling=Tallbuskplanta +Kelp=Brunalg +Green Coral=Grön korall +Pink Coral=Rosa korall +Cyan Coral=Cyan korall +Brown Coral=Brun korall +Orange Coral=Orange korall +Coral Skeleton=Korallskelett +Water Source=Vattenkälla +Flowing Water=Flytande vatten +River Water Source=Flodvattenkälla +Flowing River Water=Flytande flodvatten +Lava Source=Lavakälla +Flowing Lava=Flytande lava +Empty Bookshelf=Tom bokhylla +Bookshelf (@1 written, @2 empty books)=Bokhylla (@1 skriva, @2 tomma böcker) +Bookshelf=Bokhylla +Text too long=Texten är för lång +"@1"="@1" +Wooden Sign=Träskylt +Steel Sign=Stålskylt +Wooden Ladder=Trästege +Steel Ladder=Stålstege +Apple Wood Fence=Äppleträstaket +Acacia Wood Fence=Akaciastaket +Jungle Wood Fence=Djungelstaket +Pine Wood Fence=Tallstaket +Aspen Wood Fence=Aspträdstaket +Apple Wood Fence Rail=Äppleträstaketsräls +Acacia Wood Fence Rail=Akaciastaketsräls +Jungle Wood Fence Rail=Djungelstaketsräls +Pine Wood Fence Rail=Tallstaketsräls +Aspen Wood Fence Rail=Aspstaketsräls +Glass=Glas +Obsidian Glass=Obsidianglas +Brick Block=Tegelstensblock +Mese Lamp=Meselampa +Apple Wood Mese Post Light=Äppleträ-meselykta +Acacia Wood Mese Post Light=Acacia-meselykta +Jungle Wood Mese Post Light=Djungel-meselykta +Pine Wood Mese Post Light=Tall-meselykta +Aspen Wood Mese Post Light=Aspträ-meselykta +Cloud=Moln +Wooden Pickaxe=Trähacka +Stone Pickaxe=Stenhacka +Bronze Pickaxe=Bronshacka +Steel Pickaxe=Stålhacka +Mese Pickaxe=Mesehacka +Diamond Pickaxe=Diamanthacka +Wooden Shovel=Träspade +Stone Shovel=Stenspade +Bronze Shovel=Bronsspade +Steel Shovel=Stålspade +Mese Shovel=Mesespade +Diamond Shovel=Diamantspade +Wooden Axe=Träyxa +Stone Axe=Stenyxa +Bronze Axe=Bronsyxa +Steel Axe=Stålyxa +Mese Axe=Meseyxa +Diamond Axe=Diamantyxa +Wooden Sword=Träsvärd +Stone Sword=Stensvärd +Bronze Sword=Bronssvärd +Steel Sword=Stålsvärd +Mese Sword=Mesesvärd +Diamond Sword=Diamantsvärd +Torch=Fackla +@1 will intersect protection on growth.=@1 kommer korsa skyddet mot tillväxt. diff --git a/mods/default/locale/default.uk.tr b/mods/default/locale/default.uk.tr new file mode 100644 index 00000000..c3263522 --- /dev/null +++ b/mods/default/locale/default.uk.tr @@ -0,0 +1,215 @@ +# textdomain: default +Locked Chest=Заблокована Скриня +Locked Chest (owned by @1)=Заблокована Скриня (власник: @1) +You do not own this chest.=Ви не власник цієї скрині. +a locked chest=заблокована скриня +Chest=Скриня +Write=Писати +Read=Читати +Title:=Заголовок: +Contents:=Вміст: +Save=Зберегти +by @1=@1 +Page @1 of @2=Сторінка @1 з @2 +The book you were writing to mysteriously disappeared.= +"@1" by @2="@1" @2 +Blueberries=Чорниці +Book=Книга +Book with Text=Книга З Текстом +Bronze Ingot=Бронзовий Злиток +Clay Brick=Глиняна Цегла +Clay Lump=Шматок Глини +Coal Lump=Шматок Вугілля +Copper Ingot=Мідний Злиток +Copper Lump=Шматок Меді +Diamond=Алмаз +Flint=Кремінь +Gold Ingot=Золотий Злиток +Gold Lump=Шматок Золота +Iron Lump=Шматок Заліза +Mese Crystal=Кристал Месе +Mese Crystal Fragment=Уламок Кристалу Месе +Obsidian Shard=Обсидіановий Уламок +Paper=Папір +Steel Ingot=Залізний Злиток +Stick=Палка +Tin Ingot=Шматок Олова +Tin Lump=Уламок Олова +Furnace is empty=Пічка Порожня +100% (output full)=100% (повне приготування) +@1%=@1% +Not cookable=Не може бути приготовлено +Empty=Порожньо +Furnace active=Піч запалена +Furnace inactive=Піч не запалена +(Item: @1; Fuel: @2)=(Предмет: @1; Паливо: @2) +Furnace=Піч +Stone=Камінь +Cobblestone=Кругляк +Stone Brick=Кам'яна Цегла +Stone Block=Кам'яний Блок +Mossy Cobblestone=Моховий Кругляк +Desert Stone=Пустельний Камінь +Desert Cobblestone=Пустельний Камінь +Desert Stone Brick=Пустельна Кам'яна Цегла +Desert Stone Block=Пустельний Кам'яний Блок +Sandstone=Піщаник +Sandstone Brick=Цегла З Піщанику +Sandstone Block=Блок З Піщанику +Desert Sandstone=Пустельний Піщаник +Desert Sandstone Brick=Пустельна Цегла З Піщанику +Desert Sandstone Block=Пустельний Блок З Піщанику +Silver Sandstone=Срібний Піщаник +Silver Sandstone Brick=Цегла Із Срібного Піщанику +Silver Sandstone Block=Блок Із Срібного Піщанику +Obsidian=Обсидіан +Obsidian Brick=Обсидіанова Цегла +Obsidian Block=Обсидіановий Блок +Dirt=Земля +Dirt with Grass=Земля З Травою +Dirt with Grass and Footsteps=Земля З Травою Та Слідами +Dirt with Savanna Grass=Земля Із Саванною Травою +Dirt with Snow=Земля Зі Снігом +Dirt with Rainforest Litter=Земля Із Тропічною Підстилкою +Dirt with Coniferous Litter=Земля Із Сосновою Підстилкою +Savanna Dirt=Саваннова Земля +Savanna Dirt with Savanna Grass=Саваннова Земля Із Травою +Permafrost=Заморожений Ґрунт +Permafrost with Stones=Заморожений Ґрунт Із Камінням +Permafrost with Moss=Заморожений Ґрунт Із Мохом +Sand=Пісок +Desert Sand=Пустельний Пісок +Silver Sand=Срібний Пісок +Gravel=Гравій +Clay=Глиняний Блок +Snow=Сніг +Snow Block=Сніговий Блок +Ice=Лід +Cave Ice=Печерний Лід +Apple Tree=Стовбур Яблуні +Apple Wood Planks=Яблуневі Дошки +Apple Tree Sapling=Саджанець Яблуні +Apple Tree Leaves=Яблуневе Листя +Apple=Яблуко +Apple Marker=Яблучна Мітка +Jungle Tree=Стовбур Тропічного Дерева +Jungle Wood Planks=Дошки З Тропічного Дерева +Jungle Tree Leaves=Листя Тропічного Дерева +Jungle Tree Sapling=Саджанець Тропічного Дерева +Emergent Jungle Tree Sapling=Саджанець Тропічного Дерева, Що Виріс +Pine Tree=Сосновий Стовбур +Pine Wood Planks=Соснові Дошки +Pine Needles=Соснова Хвоя +Pine Tree Sapling=Саджанець Сосни +Acacia Tree=Стовбур Акації +Acacia Wood Planks=Дошки Акації +Acacia Tree Leaves=Листя Акації +Acacia Tree Sapling=Саджанець Акації +Aspen Tree=Стовбур Осики +Aspen Wood Planks=Осикові Дошки +Aspen Tree Leaves=Осикове Листя +Aspen Tree Sapling=Саджанець Осики +Coal Ore=Поклади Вугілля +Coal Block=Вугільний Блок +Iron Ore=Залізна Руда +Steel Block=Сталевий Блок +Copper Ore=Мідна Руда +Copper Block=Мідний Блок +Tin Ore=Олов'яна Руда +Tin Block=Олов'яний Блок +Bronze Block=Бронзовий Блок +Mese Ore=Месева Руда +Mese Block=Месевий Блок +Gold Ore=Золота Руда +Gold Block=Золотий Блок +Diamond Ore=Поклади Алмазу +Diamond Block=Алмазний Блок +Cactus=Кактус +Large Cactus Seedling=Саджанець Кактуса +Papyrus=Папірус +Dry Shrub=Сухий Кущ +Jungle Grass=Тропічна Трава +Grass=Трава +Savanna Grass=Саваннова Трава +Fern=Папороть +Marram Grass=Пісколюб +Bush Stem=Стебла Куща +Bush Leaves=Листя Куща +Bush Sapling=Саджанець Куща +Blueberry Bush Leaves with Berries=Кущ Чорниці З Ягодами +Blueberry Bush Leaves=Кущ Чорниці +Blueberry Bush Sapling=Саджанець Куща Чорниці +Acacia Bush Stem=Стебла Куща Акації +Acacia Bush Leaves=Листя Куща Акації +Acacia Bush Sapling=Саджанець Куща Акації +Pine Bush Stem=Стебла Хвойного Куща +Pine Bush Needles=Хвоя Куща +Pine Bush Sapling=Саджанець Хвойного Куща +Kelp=Ламінарія +Green Coral=Зелений Корал +Pink Coral=Рожевий Корал +Cyan Coral=Блакитний Корал +Brown Coral=Коричневий Корал +Orange Coral=Помаранчевий Корал +Coral Skeleton=Кораловий Остов +Water Source=Водне Джерело +Flowing Water=Проточна Вода +River Water Source=Річкове Водне Джерело +Flowing River Water=Проточна Річна Вода +Lava Source=Лавове Джерело +Flowing Lava=Проточна Лава +Empty Bookshelf=Порожня Книжкова Полиця +Bookshelf (@1 written, @2 empty books)=Книжкова Полиця (@1 книг з записами, @2 чисті книги) +Bookshelf=Книжкова Полиця +Text too long=Текст надто довгий +"@1"="@1" +Wooden Sign=Дерев'яна Табличка +Steel Sign=Сталева Табличка +Wooden Ladder=Дерев'яна Драбина +Steel Ladder=Сталеві Сходи +Apple Wood Fence=Яблуневий Дерев'яний Паркан +Acacia Wood Fence=Дерев'яний Паркан З Акації +Jungle Wood Fence=Дерев'яний Паркан З Тропічного Дерева +Pine Wood Fence=Сосновий Дерев'яний Паркан +Aspen Wood Fence=Осиковий Дерев'яний Паркан +Apple Wood Fence Rail=Яблуневий Дерев'яний Рейковий Паркан +Acacia Wood Fence Rail=Дерев'яний Рейковий Паркан З Акації +Jungle Wood Fence Rail=Дерев'яний Рейковий Паркан З Тропічного Дерева +Pine Wood Fence Rail=Сосновий Дерев'яний Рейковий Паркан +Aspen Wood Fence Rail=Осиковий Дерев'яний Рейковий Паркан +Glass=Скло +Obsidian Glass=Обсидіанове Скло +Brick Block=Цегляний Блок +Mese Lamp=Месе Лампа +Apple Wood Mese Post Light=Стовповий Месе Світильник З Яблуні +Acacia Wood Mese Post Light=Стовповий Месе Світильник З Акації +Jungle Wood Mese Post Light=Стовповий Месе Світильник Із Тропічного Дерева +Pine Wood Mese Post Light=Стовповий Месе Світильник Із Сосни +Aspen Wood Mese Post Light=Стовповий Месе Світильник З Осики +Cloud=Хмара +Wooden Pickaxe=Дерев'яна Кірка +Stone Pickaxe=Кам'яна Кірка +Bronze Pickaxe=Бронзова Кірка +Steel Pickaxe=Сталева Кірка +Mese Pickaxe=Месе Кірка +Diamond Pickaxe=Алмазна Кірка +Wooden Shovel=Дерев'янна Лопата +Stone Shovel=Кам'яна Лопата +Bronze Shovel=Бронзова Лопата +Steel Shovel=Сталева Лопата +Mese Shovel=Месе Лопата +Diamond Shovel=Алмазна Лопата +Wooden Axe=Дерев'яна Сокира +Stone Axe=Кам'яна Сокира +Bronze Axe=Бронзова Сокира +Steel Axe=Сталева Сокира +Mese Axe=Месе Сокира +Diamond Axe=Алмазна Сокира +Wooden Sword=Дерев'яний Меч +Stone Sword=Кам'яний Меч +Bronze Sword=Бронзовий Меч +Steel Sword=Сталевий Меч +Mese Sword=Месе Меч +Diamond Sword=Алмазний Меч +Torch=Факел +@1 will intersect protection on growth.=@1 перетне захист за зростанням. diff --git a/mods/default/locale/default.zh_CN.tr b/mods/default/locale/default.zh_CN.tr new file mode 100644 index 00000000..e4ef9463 --- /dev/null +++ b/mods/default/locale/default.zh_CN.tr @@ -0,0 +1,221 @@ +# textdomain: default +Locked Chest=已上锁的箱子 +Locked Chest (owned by @1)=已上锁的箱子(属于@1) +You do not own this chest.=这个箱子不属于你所有。 +a locked chest=一个已上锁的箱子 +Chest=箱子 +Write= +Read= +Title:=标题: +Contents:=内容: +Save=保存 +by @1=由@1 +Page @1 of @2=第@1页,共@2页。 +The book you were writing to mysteriously disappeared.= +"@1" by @2="@1" by @2 +Blueberries=蓝莓 +Book=书 +Book with Text=带文字的书 +Bronze Ingot=青铜锭 +Clay Brick=粘土砖 +Clay Lump=粘土块 +Coal Lump=煤块 +Copper Ingot=铜锭 +Copper Lump=铜块 +Diamond=钻石 +Flint=燧石 +Gold Ingot=金锭 +Gold Lump=金块 +Iron Lump=铁块 +Mese Crystal=黄石晶体 +Mese Crystal Fragment=黄石晶体碎片 +Obsidian Shard=黑曜石碎片 +Paper=纸 +Steel Ingot=铁锭 +Stick=棒 +Tin Ingot=锡锭 +Tin Lump=锡块 +Furnace is empty=熔炉是空的 +100% (output full)=100%(输出已满) +@1%=@1% +Not cookable=不可烹饪 +Empty=空 +Furnace active=熔炉正在运转 +Furnace inactive=熔炉未使用 +(Item: @1; Fuel: @2)=(项目:@1;燃料:@2) +Furnace=熔炉 +Stone=石 +Cobblestone=鹅卵石 +Stone Brick=石砖 +Stone Block=石方块 +Mossy Cobblestone=苔藓覆盖的鹅卵石 +Desert Stone=沙漠石 +Desert Cobblestone=沙漠鹅卵石 +Desert Stone Brick=沙漠鹅卵石砖 +Desert Stone Block=沙漠鹅卵石方块 +Sandstone=砂岩 +Sandstone Brick=砂岩砖 +Sandstone Block=砂岩方块 +Desert Sandstone=沙漠砂岩 +Desert Sandstone Brick=沙漠砂岩砖 +Desert Sandstone Block=沙漠砂岩方块 +Silver Sandstone=银砂岩 +Silver Sandstone Brick=银砂岩砖 +Silver Sandstone Block=银砂岩方块 +Obsidian=黑曜石 +Obsidian Brick=黑曜石砖 +Obsidian Block=黑曜石方块 +Dirt=土方块 +Dirt with Grass=草方块 +Dirt with Grass and Footsteps=带有脚印的草方块 +Dirt with Savanna Grass=草原草方块 +Dirt with Snow=雪土方块 +Dirt with Rainforest Litter=雨林凋落物土 +Dirt with Coniferous Litter=针叶林凋落物土 +Savanna Dirt=草原土 +Savanna Dirt with Savanna Grass=草原草方块 +Permafrost=多年冻土 +Permafrost with Stones=带石头的多年冻土 +Permafrost with Moss=生苔的多年冻土 +Sand=沙 +Desert Sand=沙漠沙 +Silver Sand=银沙 +Gravel=沙砾 +Clay=粘土 +Snow=雪 +Snow Block=雪方块 +Ice=冰 +Cave Ice=洞穴冰 +Apple Tree=苹果树 +Apple Wood Planks=苹果树木板 +Apple Tree Sapling=苹果树苗 +Apple Tree Leaves=苹果树叶 +Apple=苹果 +Apple Marker=苹果标记 +Jungle Tree=丛林树 +Jungle Wood Planks=丛林树木板 +Jungle Tree Leaves=丛林树叶 +Jungle Tree Sapling=丛林树苗 +Emergent Jungle Tree Sapling=露生层丛林树苗 +Pine Tree=松树 +Pine Wood Planks=松树木板 +Pine Needles=松针 +Pine Tree Sapling=松树树苗 +Acacia Tree=相思树 +Acacia Wood Planks=相思树木板 +Acacia Tree Leaves=相思树叶 +Acacia Tree Sapling=相思树树苗 +Aspen Tree=白杨树 +Aspen Wood Planks=白杨树木板 +Aspen Tree Leaves=白杨树叶 +Aspen Tree Sapling=白杨树树苗 +Coal Ore=煤炭矿石 +Coal Block=煤炭方块 +Iron Ore=铁矿石 +Steel Block=钢方块 +Copper Ore=铜矿石 +Copper Block=铜方块 +Tin Ore=锡矿石 +Tin Block=锡方块 +Bronze Block=青铜方块 +Mese Ore=黄石矿石 +Mese Block=黄石方块 +Gold Ore=金矿石 +Gold Block=金方块 +Diamond Ore=钻石矿石 +Diamond Block=钻石方块 +Cactus=仙人掌 +Large Cactus Seedling=大仙人掌苗 +Papyrus=莎草纸 +Dry Shrub=干灌木 +Jungle Grass=丛林草 +Grass=草 +Savanna Grass=草原草 +Fern=蕨 +Marram Grass=滨草 +Bush Stem=灌木 +Bush Leaves=灌木叶 +Bush Sapling=灌木苗 +Blueberry Bush Leaves with Berries=长蓝莓的蓝莓灌木叶 +Blueberry Bush Leaves=蓝莓灌木叶 +Blueberry Bush Sapling=蓝莓灌木苗 +Acacia Bush Stem=相思灌木 +Acacia Bush Leaves=相思灌木叶 +Acacia Bush Sapling=相思灌木苗 +Pine Bush Stem=松树灌木 +Pine Bush Needles=松树灌木针 +Pine Bush Sapling=松树灌木苗 +Kelp=海带 +Green Coral=绿珊瑚 +Pink Coral=淡红珊瑚 +Cyan Coral=青珊瑚 +Brown Coral=棕珊瑚 +Orange Coral=橙珊瑚 +Coral Skeleton=珊瑚骨架 +Water Source=水方块 +Flowing Water=流动的水 +River Water Source=河水方块 +Flowing River Water=流动的河水 +Lava Source=岩浆方块 +Flowing Lava=流动的岩浆 +Empty Bookshelf=空书架 +Bookshelf (@1 written, @2 empty books)=书架(@1本有字的书,@2本空书) +Bookshelf=书架 +Text too long=文字太长 +"@1"="@1" +Wooden Sign=木牌 +Steel Sign=铁牌 +Wooden Ladder=木梯子 +Steel Ladder=铁梯子 +Apple Wood Fence=苹果木栅栏 +Acacia Wood Fence=相思木栅栏 +Jungle Wood Fence=丛林木栅栏 +Pine Wood Fence=松木栅栏 +Aspen Wood Fence=白杨木栅栏 +Apple Wood Fence Rail=苹果木栏杆 +Acacia Wood Fence Rail=相思木栏杆 +Jungle Wood Fence Rail=丛林木栏杆 +Pine Wood Fence Rail=松木栏杆 +Aspen Wood Fence Rail=白杨木栏杆 +Glass=玻璃 +Obsidian Glass=黑曜石玻璃 +Brick Block=砖方块 +Mese Lamp=黄石灯 +Apple Wood Mese Post Light=苹果木黄石灯柱 +Acacia Wood Mese Post Light=金合欢木黄石灯柱 +Jungle Wood Mese Post Light=丛林木黄石灯柱 +Pine Wood Mese Post Light=松木黄石灯柱 +Aspen Wood Mese Post Light=白杨木黄石灯柱 +Cloud=云 +Wooden Pickaxe=木镐 +Stone Pickaxe=石镐 +Bronze Pickaxe=青铜镐 +Steel Pickaxe=铁镐 +Mese Pickaxe=黄石镐 +Diamond Pickaxe=钻石镐 +Wooden Shovel=木铲 +Stone Shovel=石铲 +Bronze Shovel=青铜铲 +Steel Shovel=铁铲 +Mese Shovel=黄石铲 +Diamond Shovel=钻石铲 +Wooden Axe=木斧 +Stone Axe=石斧 +Bronze Axe=青铜斧 +Steel Axe=铁斧 +Mese Axe=黄石斧 +Diamond Axe=钻石斧 +Wooden Sword=木剑 +Stone Sword=石剑 +Bronze Sword=青铜剑 +Steel Sword=铁剑 +Mese Sword=黄石剑 +Diamond Sword=钻石剑 +Torch=火把 +@1 will intersect protection on growth.=@1生长时将与保护区域相交。 + + +##### not used anymore ##### + +Dirt with Dry Grass=干草土方块 +Dry Grass=干草 diff --git a/mods/default/locale/default.zh_TW.tr b/mods/default/locale/default.zh_TW.tr new file mode 100644 index 00000000..8fcbd60b --- /dev/null +++ b/mods/default/locale/default.zh_TW.tr @@ -0,0 +1,221 @@ +# textdomain: default +Locked Chest=已上鎖的箱子 +Locked Chest (owned by @1)=已上鎖的箱子(屬於@1所有) +You do not own this chest.=這個箱子不屬於你所有。 +a locked chest=一個已上鎖的箱子 +Chest=箱子 +Write= +Read= +Title:=標題: +Contents:=內容: +Save=保存 +by @1=由@1 +Page @1 of @2=第@1頁,共@2頁。 +The book you were writing to mysteriously disappeared.= +"@1" by @2="@1" by @2 +Blueberries=藍莓 +Book=書 +Book with Text=帶文字的書 +Bronze Ingot=青銅錠 +Clay Brick=粘土磚 +Clay Lump=粘土塊 +Coal Lump=煤塊 +Copper Ingot=銅錠 +Copper Lump=銅塊 +Diamond=鑽石 +Flint=燧石 +Gold Ingot=金錠 +Gold Lump=金塊 +Iron Lump=鐵塊 +Mese Crystal=黃石晶體 +Mese Crystal Fragment=黃石晶體碎片 +Obsidian Shard=黑曜石碎片 +Paper=紙 +Steel Ingot=鐵錠 +Stick=棒 +Tin Ingot=錫錠 +Tin Lump=錫塊 +Furnace is empty=熔爐是空的 +100% (output full)=100%(輸出已滿) +@1%=@1% +Not cookable=不可烹飪 +Empty=空 +Furnace active=熔爐正在運轉 +Furnace inactive=熔爐未使用 +(Item: @1; Fuel: @2)=(項目:@1;燃料:@2) +Furnace=熔爐 +Stone=石 +Cobblestone=鵝卵石 +Stone Brick=石磚 +Stone Block=石方塊 +Mossy Cobblestone=苔蘚覆蓋的鵝卵石 +Desert Stone=沙漠石 +Desert Cobblestone=沙漠鵝卵石 +Desert Stone Brick=沙漠鵝卵石磚 +Desert Stone Block=沙漠鵝卵石方塊 +Sandstone=砂岩 +Sandstone Brick=砂岩磚 +Sandstone Block=砂岩方塊 +Desert Sandstone=沙漠砂岩 +Desert Sandstone Brick=沙漠砂岩磚 +Desert Sandstone Block=沙漠砂岩方塊 +Silver Sandstone=銀砂岩 +Silver Sandstone Brick=銀砂岩磚 +Silver Sandstone Block=銀砂岩方塊 +Obsidian=黑曜石 +Obsidian Brick=黑曜石磚 +Obsidian Block=黑曜石方塊 +Dirt=土方塊 +Dirt with Grass=草方塊 +Dirt with Grass and Footsteps=草方塊及腳印 +Dirt with Savanna Grass=草原草方塊 +Dirt with Snow=雪土方塊 +Dirt with Rainforest Litter=雨林腐土 +Dirt with Coniferous Litter=針葉林腐土 +Savanna Dirt=草原土 +Savanna Dirt with Savanna Grass=草原草方塊(草原土) +Permafrost=多年凍土 +Permafrost with Stones=帶石頭的多年凍土 +Permafrost with Moss=生苔的多年凍土 +Sand=沙 +Desert Sand=沙漠沙 +Silver Sand=銀沙 +Gravel=沙礫 +Clay=粘土 +Snow=雪 +Snow Block=雪方塊 +Ice=冰 +Cave Ice=洞穴冰 +Apple Tree=蘋果樹 +Apple Wood Planks=蘋果樹木板 +Apple Tree Sapling=蘋果樹苗 +Apple Tree Leaves=蘋果樹葉 +Apple=蘋果 +Apple Marker=蘋果標記 +Jungle Tree=叢林樹 +Jungle Wood Planks=叢林樹木板 +Jungle Tree Leaves=叢林樹葉 +Jungle Tree Sapling=叢林樹苗 +Emergent Jungle Tree Sapling=應急叢林樹苗 +Pine Tree=松樹 +Pine Wood Planks=松樹木板 +Pine Needles=松針 +Pine Tree Sapling=松樹樹苗 +Acacia Tree=相思樹 +Acacia Wood Planks=相思樹木板 +Acacia Tree Leaves=相思樹葉 +Acacia Tree Sapling=相思樹樹苗 +Aspen Tree=白楊樹 +Aspen Wood Planks=白楊樹木板 +Aspen Tree Leaves=白楊樹葉 +Aspen Tree Sapling=白楊樹樹苗 +Coal Ore=煤炭礦石 +Coal Block=煤炭方塊 +Iron Ore=鐵礦石 +Steel Block=鋼方塊 +Copper Ore=銅礦石 +Copper Block=銅方塊 +Tin Ore=錫礦石 +Tin Block=錫方塊 +Bronze Block=青銅方塊 +Mese Ore=黃石礦石 +Mese Block=黃石方塊 +Gold Ore=金礦石 +Gold Block=金方塊 +Diamond Ore=鑽石礦石 +Diamond Block=鑽石方塊 +Cactus=仙人掌 +Large Cactus Seedling=大仙人掌苗 +Papyrus=莎草紙 +Dry Shrub=幹灌木 +Jungle Grass=叢林草 +Grass=草 +Savanna Grass= +Fern=蕨 +Marram Grass=濱草 +Bush Stem=灌木 +Bush Leaves=灌木葉 +Bush Sapling=灌木苗 +Blueberry Bush Leaves with Berries=藍莓灌木葉與漿果 +Blueberry Bush Leaves=藍莓灌木葉 +Blueberry Bush Sapling=藍莓灌木苗 +Acacia Bush Stem=相思灌木 +Acacia Bush Leaves=相思灌木葉 +Acacia Bush Sapling=相思灌木苗 +Pine Bush Stem=松樹灌木 +Pine Bush Needles=松樹灌木針 +Pine Bush Sapling=松樹灌木苗 +Kelp=海帶 +Green Coral=綠珊瑚 +Pink Coral=淡紅珊瑚 +Cyan Coral=青珊瑚 +Brown Coral=棕珊瑚 +Orange Coral=橙珊瑚 +Coral Skeleton=珊瑚骨架 +Water Source=水方塊 +Flowing Water=流動的水 +River Water Source=河水方塊 +Flowing River Water=流動的河水 +Lava Source=岩漿方塊 +Flowing Lava=流動的岩漿 +Empty Bookshelf=空書架 +Bookshelf (@1 written, @2 empty books)=書架(@1本有字的書,@2本空書) +Bookshelf=書架 +Text too long=文字太長 +"@1"="@1" +Wooden Sign=木牌 +Steel Sign=鐵牌 +Wooden Ladder=木梯子 +Steel Ladder=鐵梯子 +Apple Wood Fence=蘋果木柵欄 +Acacia Wood Fence=相思木柵欄 +Jungle Wood Fence=叢林木柵欄 +Pine Wood Fence=松木柵欄 +Aspen Wood Fence=白楊木柵欄 +Apple Wood Fence Rail=蘋果木欄杆 +Acacia Wood Fence Rail=相思木欄杆 +Jungle Wood Fence Rail=叢林木欄杆 +Pine Wood Fence Rail=松木欄杆 +Aspen Wood Fence Rail=白楊木欄杆 +Glass=玻璃 +Obsidian Glass=黑曜石玻璃 +Brick Block=磚方塊 +Mese Lamp=黃石燈 +Apple Wood Mese Post Light=蘋果木黃石燈柱 +Acacia Wood Mese Post Light=金合歡木黃石燈柱 +Jungle Wood Mese Post Light=叢林木黃石燈柱 +Pine Wood Mese Post Light=松木黃石燈柱 +Aspen Wood Mese Post Light=白楊木黃石燈柱 +Cloud=雲 +Wooden Pickaxe=木鎬 +Stone Pickaxe=石鎬 +Bronze Pickaxe=青銅鎬 +Steel Pickaxe=鐵鎬 +Mese Pickaxe=黃石鎬 +Diamond Pickaxe=鑽石鎬 +Wooden Shovel=木鏟 +Stone Shovel=石鏟 +Bronze Shovel=青銅鏟 +Steel Shovel=鐵鏟 +Mese Shovel=黃石鏟 +Diamond Shovel=鑽石鏟 +Wooden Axe=木斧 +Stone Axe=石斧 +Bronze Axe=青銅斧 +Steel Axe=鐵斧 +Mese Axe=黃石斧 +Diamond Axe=鑽石斧 +Wooden Sword=木劍 +Stone Sword=石劍 +Bronze Sword=青銅劍 +Steel Sword=鐵劍 +Mese Sword=黃石劍 +Diamond Sword=鑽石劍 +Torch=火把 +@1 will intersect protection on growth.=@1將與增長的保護相交。 + + +##### not used anymore ##### + +Dirt with Dry Grass=乾草土方塊 +Dry Grass=乾草 diff --git a/mods/default/locale/template.txt b/mods/default/locale/template.txt new file mode 100644 index 00000000..815c29c5 --- /dev/null +++ b/mods/default/locale/template.txt @@ -0,0 +1,215 @@ +# textdomain: default +Locked Chest= +Locked Chest (owned by @1)= +You do not own this chest.= +a locked chest= +Chest= +Write= +Read= +Title:= +Contents:= +Save= +by @1= +Page @1 of @2= +The book you were writing to mysteriously disappeared.= +"@1" by @2= +Blueberries= +Book= +Book with Text= +Bronze Ingot= +Clay Brick= +Clay Lump= +Coal Lump= +Copper Ingot= +Copper Lump= +Diamond= +Flint= +Gold Ingot= +Gold Lump= +Iron Lump= +Mese Crystal= +Mese Crystal Fragment= +Obsidian Shard= +Paper= +Steel Ingot= +Stick= +Tin Ingot= +Tin Lump= +Furnace is empty= +100% (output full)= +@1%= +Not cookable= +Empty= +Furnace active= +Furnace inactive= +(Item: @1; Fuel: @2)= +Furnace= +Stone= +Cobblestone= +Stone Brick= +Stone Block= +Mossy Cobblestone= +Desert Stone= +Desert Cobblestone= +Desert Stone Brick= +Desert Stone Block= +Sandstone= +Sandstone Brick= +Sandstone Block= +Desert Sandstone= +Desert Sandstone Brick= +Desert Sandstone Block= +Silver Sandstone= +Silver Sandstone Brick= +Silver Sandstone Block= +Obsidian= +Obsidian Brick= +Obsidian Block= +Dirt= +Dirt with Grass= +Dirt with Grass and Footsteps= +Dirt with Savanna Grass= +Dirt with Snow= +Dirt with Rainforest Litter= +Dirt with Coniferous Litter= +Savanna Dirt= +Savanna Dirt with Savanna Grass= +Permafrost= +Permafrost with Stones= +Permafrost with Moss= +Sand= +Desert Sand= +Silver Sand= +Gravel= +Clay= +Snow= +Snow Block= +Ice= +Cave Ice= +Apple Tree= +Apple Wood Planks= +Apple Tree Sapling= +Apple Tree Leaves= +Apple= +Apple Marker= +Jungle Tree= +Jungle Wood Planks= +Jungle Tree Leaves= +Jungle Tree Sapling= +Emergent Jungle Tree Sapling= +Pine Tree= +Pine Wood Planks= +Pine Needles= +Pine Tree Sapling= +Acacia Tree= +Acacia Wood Planks= +Acacia Tree Leaves= +Acacia Tree Sapling= +Aspen Tree= +Aspen Wood Planks= +Aspen Tree Leaves= +Aspen Tree Sapling= +Coal Ore= +Coal Block= +Iron Ore= +Steel Block= +Copper Ore= +Copper Block= +Tin Ore= +Tin Block= +Bronze Block= +Mese Ore= +Mese Block= +Gold Ore= +Gold Block= +Diamond Ore= +Diamond Block= +Cactus= +Large Cactus Seedling= +Papyrus= +Dry Shrub= +Jungle Grass= +Grass= +Savanna Grass= +Fern= +Marram Grass= +Bush Stem= +Bush Leaves= +Bush Sapling= +Blueberry Bush Leaves with Berries= +Blueberry Bush Leaves= +Blueberry Bush Sapling= +Acacia Bush Stem= +Acacia Bush Leaves= +Acacia Bush Sapling= +Pine Bush Stem= +Pine Bush Needles= +Pine Bush Sapling= +Kelp= +Green Coral= +Pink Coral= +Cyan Coral= +Brown Coral= +Orange Coral= +Coral Skeleton= +Water Source= +Flowing Water= +River Water Source= +Flowing River Water= +Lava Source= +Flowing Lava= +Empty Bookshelf= +Bookshelf (@1 written, @2 empty books)= +Bookshelf= +Text too long= +"@1"= +Wooden Sign= +Steel Sign= +Wooden Ladder= +Steel Ladder= +Apple Wood Fence= +Acacia Wood Fence= +Jungle Wood Fence= +Pine Wood Fence= +Aspen Wood Fence= +Apple Wood Fence Rail= +Acacia Wood Fence Rail= +Jungle Wood Fence Rail= +Pine Wood Fence Rail= +Aspen Wood Fence Rail= +Glass= +Obsidian Glass= +Brick Block= +Mese Lamp= +Apple Wood Mese Post Light= +Acacia Wood Mese Post Light= +Jungle Wood Mese Post Light= +Pine Wood Mese Post Light= +Aspen Wood Mese Post Light= +Cloud= +Wooden Pickaxe= +Stone Pickaxe= +Bronze Pickaxe= +Steel Pickaxe= +Mese Pickaxe= +Diamond Pickaxe= +Wooden Shovel= +Stone Shovel= +Bronze Shovel= +Steel Shovel= +Mese Shovel= +Diamond Shovel= +Wooden Axe= +Stone Axe= +Bronze Axe= +Steel Axe= +Mese Axe= +Diamond Axe= +Wooden Sword= +Stone Sword= +Bronze Sword= +Steel Sword= +Mese Sword= +Diamond Sword= +Torch= +@1 will intersect protection on growth.= diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua new file mode 100644 index 00000000..f1cf3647 --- /dev/null +++ b/mods/default/mapgen.lua @@ -0,0 +1,2492 @@ +-- +-- Aliases for map generators +-- + +-- All mapgens + +minetest.register_alias("mapgen_stone", "default:stone") +minetest.register_alias("mapgen_water_source", "default:water_source") +minetest.register_alias("mapgen_river_water_source", "default:river_water_source") + +-- Additional aliases needed for mapgen v6 + +minetest.register_alias("mapgen_lava_source", "default:lava_source") +minetest.register_alias("mapgen_dirt", "default:dirt") +minetest.register_alias("mapgen_dirt_with_grass", "default:dirt_with_grass") +minetest.register_alias("mapgen_sand", "default:sand") +minetest.register_alias("mapgen_gravel", "default:gravel") +minetest.register_alias("mapgen_desert_stone", "default:desert_stone") +minetest.register_alias("mapgen_desert_sand", "default:desert_sand") +minetest.register_alias("mapgen_dirt_with_snow", "default:dirt_with_snow") +minetest.register_alias("mapgen_snowblock", "default:snowblock") +minetest.register_alias("mapgen_snow", "default:snow") +minetest.register_alias("mapgen_ice", "default:ice") + +minetest.register_alias("mapgen_tree", "default:tree") +minetest.register_alias("mapgen_leaves", "default:leaves") +minetest.register_alias("mapgen_apple", "default:apple") +minetest.register_alias("mapgen_jungletree", "default:jungletree") +minetest.register_alias("mapgen_jungleleaves", "default:jungleleaves") +minetest.register_alias("mapgen_junglegrass", "default:junglegrass") +minetest.register_alias("mapgen_pine_tree", "default:pine_tree") +minetest.register_alias("mapgen_pine_needles", "default:pine_needles") + +minetest.register_alias("mapgen_cobble", "default:cobble") +minetest.register_alias("mapgen_stair_cobble", "stairs:stair_cobble") +minetest.register_alias("mapgen_mossycobble", "default:mossycobble") +minetest.register_alias("mapgen_stair_desert_stone", "stairs:stair_desert_stone") + + +-- +-- Register ores +-- + +-- Mgv6 + +function default.register_mgv6_ores() + + -- Blob ore + -- These first to avoid other ores in blobs + + -- Clay + -- This first to avoid clay in sand blobs + + minetest.register_ore({ + ore_type = "blob", + ore = "default:clay", + wherein = {"default:sand"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_max = 0, + y_min = -15, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = -316, + octaves = 1, + persist = 0.0 + }, + }) + + -- Sand + + minetest.register_ore({ + ore_type = "blob", + ore = "default:sand", + wherein = {"default:stone", "default:desert_stone"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_max = 0, + y_min = -31, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = 2316, + octaves = 1, + persist = 0.0 + }, + }) + + -- Dirt + + minetest.register_ore({ + ore_type = "blob", + ore = "default:dirt", + wherein = {"default:stone"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_max = 31000, + y_min = -31, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = 17676, + octaves = 1, + persist = 0.0 + }, + }) + + -- Gravel + + minetest.register_ore({ + ore_type = "blob", + ore = "default:gravel", + wherein = {"default:stone"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_max = 31000, + y_min = -31000, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = 766, + octaves = 1, + persist = 0.0 + }, + }) + + -- Scatter ores + + -- Coal + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_coal", + wherein = "default:stone", + clust_scarcity = 8 * 8 * 8, + clust_num_ores = 9, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_coal", + wherein = "default:stone", + clust_scarcity = 8 * 8 * 8, + clust_num_ores = 8, + clust_size = 3, + y_max = 64, + y_min = -31000, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_coal", + wherein = "default:stone", + clust_scarcity = 24 * 24 * 24, + clust_num_ores = 27, + clust_size = 6, + y_max = 0, + y_min = -31000, + }) + + -- Iron + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_iron", + wherein = "default:stone", + clust_scarcity = 9 * 9 * 9, + clust_num_ores = 12, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_iron", + wherein = "default:stone", + clust_scarcity = 7 * 7 * 7, + clust_num_ores = 5, + clust_size = 3, + y_max = 0, + y_min = -31000, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_iron", + wherein = "default:stone", + clust_scarcity = 24 * 24 * 24, + clust_num_ores = 27, + clust_size = 6, + y_max = -64, + y_min = -31000, + }) + + -- Copper + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_copper", + wherein = "default:stone", + clust_scarcity = 9 * 9 * 9, + clust_num_ores = 5, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_copper", + wherein = "default:stone", + clust_scarcity = 12 * 12 * 12, + clust_num_ores = 4, + clust_size = 3, + y_max = -16, + y_min = -63, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_copper", + wherein = "default:stone", + clust_scarcity = 9 * 9 * 9, + clust_num_ores = 5, + clust_size = 3, + y_max = -64, + y_min = -31000, + }) + + -- Tin + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_tin", + wherein = "default:stone", + clust_scarcity = 10 * 10 * 10, + clust_num_ores = 5, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_tin", + wherein = "default:stone", + clust_scarcity = 13 * 13 * 13, + clust_num_ores = 4, + clust_size = 3, + y_max = -32, + y_min = -127, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_tin", + wherein = "default:stone", + clust_scarcity = 10 * 10 * 10, + clust_num_ores = 5, + clust_size = 3, + y_max = -128, + y_min = -31000, + }) + + -- Gold + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_gold", + wherein = "default:stone", + clust_scarcity = 13 * 13 * 13, + clust_num_ores = 5, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_gold", + wherein = "default:stone", + clust_scarcity = 15 * 15 * 15, + clust_num_ores = 3, + clust_size = 2, + y_max = -64, + y_min = -255, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_gold", + wherein = "default:stone", + clust_scarcity = 13 * 13 * 13, + clust_num_ores = 5, + clust_size = 3, + y_max = -256, + y_min = -31000, + }) + + -- Mese crystal + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_mese", + wherein = "default:stone", + clust_scarcity = 14 * 14 * 14, + clust_num_ores = 5, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_mese", + wherein = "default:stone", + clust_scarcity = 18 * 18 * 18, + clust_num_ores = 3, + clust_size = 2, + y_max = -64, + y_min = -255, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_mese", + wherein = "default:stone", + clust_scarcity = 14 * 14 * 14, + clust_num_ores = 5, + clust_size = 3, + y_max = -256, + y_min = -31000, + }) + + -- Diamond + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_diamond", + wherein = "default:stone", + clust_scarcity = 15 * 15 * 15, + clust_num_ores = 4, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_diamond", + wherein = "default:stone", + clust_scarcity = 17 * 17 * 17, + clust_num_ores = 4, + clust_size = 3, + y_max = -128, + y_min = -255, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_diamond", + wherein = "default:stone", + clust_scarcity = 15 * 15 * 15, + clust_num_ores = 4, + clust_size = 3, + y_max = -256, + y_min = -31000, + }) + + -- Mese block + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:mese", + wherein = "default:stone", + clust_scarcity = 36 * 36 * 36, + clust_num_ores = 3, + clust_size = 2, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:mese", + wherein = "default:stone", + clust_scarcity = 36 * 36 * 36, + clust_num_ores = 3, + clust_size = 2, + y_max = -1024, + y_min = -31000, + }) +end + + +-- All mapgens except mgv6 + +function default.register_ores() + + -- Stratum ores. + -- These obviously first. + + -- Silver sandstone + + minetest.register_ore({ + ore_type = "stratum", + ore = "default:silver_sandstone", + wherein = {"default:stone"}, + clust_scarcity = 1, + y_max = 46, + y_min = 10, + noise_params = { + offset = 28, + scale = 16, + spread = {x = 128, y = 128, z = 128}, + seed = 90122, + octaves = 1, + }, + stratum_thickness = 4, + biomes = {"cold_desert"}, + }) + + minetest.register_ore({ + ore_type = "stratum", + ore = "default:silver_sandstone", + wherein = {"default:stone"}, + clust_scarcity = 1, + y_max = 42, + y_min = 6, + noise_params = { + offset = 24, + scale = 16, + spread = {x = 128, y = 128, z = 128}, + seed = 90122, + octaves = 1, + }, + stratum_thickness = 2, + biomes = {"cold_desert"}, + }) + + -- Desert sandstone + + minetest.register_ore({ + ore_type = "stratum", + ore = "default:desert_sandstone", + wherein = {"default:desert_stone"}, + clust_scarcity = 1, + y_max = 46, + y_min = 10, + noise_params = { + offset = 28, + scale = 16, + spread = {x = 128, y = 128, z = 128}, + seed = 90122, + octaves = 1, + }, + stratum_thickness = 4, + biomes = {"desert"}, + }) + + minetest.register_ore({ + ore_type = "stratum", + ore = "default:desert_sandstone", + wherein = {"default:desert_stone"}, + clust_scarcity = 1, + y_max = 42, + y_min = 6, + noise_params = { + offset = 24, + scale = 16, + spread = {x = 128, y = 128, z = 128}, + seed = 90122, + octaves = 1, + }, + stratum_thickness = 2, + biomes = {"desert"}, + }) + + -- Sandstone + + minetest.register_ore({ + ore_type = "stratum", + ore = "default:sandstone", + wherein = {"default:desert_stone"}, + clust_scarcity = 1, + y_max = 39, + y_min = 3, + noise_params = { + offset = 21, + scale = 16, + spread = {x = 128, y = 128, z = 128}, + seed = 90122, + octaves = 1, + }, + stratum_thickness = 2, + biomes = {"desert"}, + }) + + -- Blob ore. + -- These before scatter ores to avoid other ores in blobs. + + -- Clay + + minetest.register_ore({ + ore_type = "blob", + ore = "default:clay", + wherein = {"default:sand"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_max = 0, + y_min = -15, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = -316, + octaves = 1, + persist = 0.0 + }, + }) + + -- Silver sand + + minetest.register_ore({ + ore_type = "blob", + ore = "default:silver_sand", + wherein = {"default:stone"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_max = 31000, + y_min = -31000, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = 2316, + octaves = 1, + persist = 0.0 + }, + }) + + -- Dirt + + minetest.register_ore({ + ore_type = "blob", + ore = "default:dirt", + wherein = {"default:stone"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_max = 31000, + y_min = -31, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = 17676, + octaves = 1, + persist = 0.0 + }, + -- Only where default:dirt is present as surface material + biomes = {"taiga", "snowy_grassland", "grassland", "coniferous_forest", + "deciduous_forest", "deciduous_forest_shore", "rainforest", + "rainforest_swamp"} + }) + + -- Gravel + + minetest.register_ore({ + ore_type = "blob", + ore = "default:gravel", + wherein = {"default:stone"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_max = 31000, + y_min = -31000, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = 766, + octaves = 1, + persist = 0.0 + }, + }) + + -- Scatter ores + + -- Coal + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_coal", + wherein = "default:stone", + clust_scarcity = 8 * 8 * 8, + clust_num_ores = 9, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_coal", + wherein = "default:stone", + clust_scarcity = 8 * 8 * 8, + clust_num_ores = 8, + clust_size = 3, + y_max = 64, + y_min = -127, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_coal", + wherein = "default:stone", + clust_scarcity = 12 * 12 * 12, + clust_num_ores = 30, + clust_size = 5, + y_max = -128, + y_min = -31000, + }) + + -- Tin + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_tin", + wherein = "default:stone", + clust_scarcity = 10 * 10 * 10, + clust_num_ores = 5, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_tin", + wherein = "default:stone", + clust_scarcity = 13 * 13 * 13, + clust_num_ores = 4, + clust_size = 3, + y_max = -64, + y_min = -127, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_tin", + wherein = "default:stone", + clust_scarcity = 10 * 10 * 10, + clust_num_ores = 5, + clust_size = 3, + y_max = -128, + y_min = -31000, + }) + + -- Copper + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_copper", + wherein = "default:stone", + clust_scarcity = 9 * 9 * 9, + clust_num_ores = 5, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_copper", + wherein = "default:stone", + clust_scarcity = 12 * 12 * 12, + clust_num_ores = 4, + clust_size = 3, + y_max = -64, + y_min = -127, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_copper", + wherein = "default:stone", + clust_scarcity = 9 * 9 * 9, + clust_num_ores = 5, + clust_size = 3, + y_max = -128, + y_min = -31000, + }) + + -- Iron + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_iron", + wherein = "default:stone", + clust_scarcity = 9 * 9 * 9, + clust_num_ores = 12, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_iron", + wherein = "default:stone", + clust_scarcity = 7 * 7 * 7, + clust_num_ores = 5, + clust_size = 3, + y_max = -128, + y_min = -255, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_iron", + wherein = "default:stone", + clust_scarcity = 12 * 12 * 12, + clust_num_ores = 29, + clust_size = 5, + y_max = -256, + y_min = -31000, + }) + + -- Gold + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_gold", + wherein = "default:stone", + clust_scarcity = 13 * 13 * 13, + clust_num_ores = 5, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_gold", + wherein = "default:stone", + clust_scarcity = 15 * 15 * 15, + clust_num_ores = 3, + clust_size = 2, + y_max = -256, + y_min = -511, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_gold", + wherein = "default:stone", + clust_scarcity = 13 * 13 * 13, + clust_num_ores = 5, + clust_size = 3, + y_max = -512, + y_min = -31000, + }) + + -- Mese crystal + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_mese", + wherein = "default:stone", + clust_scarcity = 14 * 14 * 14, + clust_num_ores = 5, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_mese", + wherein = "default:stone", + clust_scarcity = 18 * 18 * 18, + clust_num_ores = 3, + clust_size = 2, + y_max = -512, + y_min = -1023, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_mese", + wherein = "default:stone", + clust_scarcity = 14 * 14 * 14, + clust_num_ores = 5, + clust_size = 3, + y_max = -1024, + y_min = -31000, + }) + + -- Diamond + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_diamond", + wherein = "default:stone", + clust_scarcity = 15 * 15 * 15, + clust_num_ores = 4, + clust_size = 3, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_diamond", + wherein = "default:stone", + clust_scarcity = 17 * 17 * 17, + clust_num_ores = 4, + clust_size = 3, + y_max = -1024, + y_min = -2047, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_diamond", + wherein = "default:stone", + clust_scarcity = 15 * 15 * 15, + clust_num_ores = 4, + clust_size = 3, + y_max = -2048, + y_min = -31000, + }) + + -- Mese block + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:mese_ongen", + wherein = "default:stone", + clust_scarcity = 36 * 36 * 36, + clust_num_ores = 3, + clust_size = 2, + y_max = 31000, + y_min = 1025, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:mese_ongen", + wherein = "default:stone", + clust_scarcity = 36 * 36 * 36, + clust_num_ores = 3, + clust_size = 2, + y_max = -2048, + y_min = -4095, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:mese", + wherein = "default:stone", + clust_scarcity = 28 * 28 * 28, + clust_num_ores = 5, + clust_size = 3, + y_max = -4096, + y_min = -31000, + }) +end + + +-- +-- Register biomes +-- + +-- All mapgens except mgv6 + +function default.register_biomes() + + -- Icesheet + + minetest.register_biome({ + name = "icesheet", + node_dust = "default:snowblock", + node_top = "default:snowblock", + depth_top = 1, + node_filler = "default:snowblock", + depth_filler = 3, + node_stone = "default:cave_ice", + node_water_top = "default:ice", + depth_water_top = 10, + node_river_water = "default:ice", + node_riverbed = "default:gravel", + depth_riverbed = 2, + node_dungeon = "default:ice", + node_dungeon_stair = "stairs:stair_ice", + y_max = 31000, + y_min = -8, + heat_point = 0, + humidity_point = 73, + }) + + minetest.register_biome({ + name = "icesheet_ocean", + node_dust = "default:snowblock", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_water_top = "default:ice", + depth_water_top = 10, + node_cave_liquid = "default:water_source", + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -9, + y_min = -255, + heat_point = 0, + humidity_point = 73, + }) + + minetest.register_biome({ + name = "icesheet_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 0, + humidity_point = 73, + }) + + -- Tundra + + minetest.register_biome({ + name = "tundra_highland", + node_dust = "default:snow", + node_riverbed = "default:gravel", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 31000, + y_min = 47, + heat_point = 0, + humidity_point = 40, + }) + + minetest.register_biome({ + name = "tundra", + node_top = "default:permafrost_with_stones", + depth_top = 1, + node_filler = "default:permafrost", + depth_filler = 1, + node_riverbed = "default:gravel", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + vertical_blend = 4, + y_max = 46, + y_min = 2, + heat_point = 0, + humidity_point = 40, + }) + + minetest.register_biome({ + name = "tundra_beach", + node_top = "default:gravel", + depth_top = 1, + node_filler = "default:gravel", + depth_filler = 2, + node_riverbed = "default:gravel", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + vertical_blend = 1, + y_max = 1, + y_min = -3, + heat_point = 0, + humidity_point = 40, + }) + + minetest.register_biome({ + name = "tundra_ocean", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_riverbed = "default:gravel", + depth_riverbed = 2, + node_cave_liquid = "default:water_source", + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + vertical_blend = 1, + y_max = -4, + y_min = -255, + heat_point = 0, + humidity_point = 40, + }) + + minetest.register_biome({ + name = "tundra_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 0, + humidity_point = 40, + }) + + -- Taiga + + minetest.register_biome({ + name = "taiga", + node_dust = "default:snow", + node_top = "default:dirt_with_snow", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 31000, + y_min = 4, + heat_point = 25, + humidity_point = 70, + }) + + minetest.register_biome({ + name = "taiga_ocean", + node_dust = "default:snow", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_cave_liquid = "default:water_source", + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + vertical_blend = 1, + y_max = 3, + y_min = -255, + heat_point = 25, + humidity_point = 70, + }) + + minetest.register_biome({ + name = "taiga_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 25, + humidity_point = 70, + }) + + -- Snowy grassland + + minetest.register_biome({ + name = "snowy_grassland", + node_dust = "default:snow", + node_top = "default:dirt_with_snow", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 1, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 31000, + y_min = 4, + heat_point = 20, + humidity_point = 35, + }) + + minetest.register_biome({ + name = "snowy_grassland_ocean", + node_dust = "default:snow", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_cave_liquid = "default:water_source", + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + vertical_blend = 1, + y_max = 3, + y_min = -255, + heat_point = 20, + humidity_point = 35, + }) + + minetest.register_biome({ + name = "snowy_grassland_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 20, + humidity_point = 35, + }) + + -- Grassland + + minetest.register_biome({ + name = "grassland", + node_top = "default:dirt_with_grass", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 1, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 31000, + y_min = 6, + heat_point = 50, + humidity_point = 35, + }) + + minetest.register_biome({ + name = "grassland_dunes", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 2, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + vertical_blend = 1, + y_max = 5, + y_min = 4, + heat_point = 50, + humidity_point = 35, + }) + + minetest.register_biome({ + name = "grassland_ocean", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_cave_liquid = "default:water_source", + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 3, + y_min = -255, + heat_point = 50, + humidity_point = 35, + }) + + minetest.register_biome({ + name = "grassland_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 50, + humidity_point = 35, + }) + + -- Coniferous forest + + minetest.register_biome({ + name = "coniferous_forest", + node_top = "default:dirt_with_coniferous_litter", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 31000, + y_min = 6, + heat_point = 45, + humidity_point = 70, + }) + + minetest.register_biome({ + name = "coniferous_forest_dunes", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + vertical_blend = 1, + y_max = 5, + y_min = 4, + heat_point = 45, + humidity_point = 70, + }) + + minetest.register_biome({ + name = "coniferous_forest_ocean", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_cave_liquid = "default:water_source", + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 3, + y_min = -255, + heat_point = 45, + humidity_point = 70, + }) + + minetest.register_biome({ + name = "coniferous_forest_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 45, + humidity_point = 70, + }) + + -- Deciduous forest + + minetest.register_biome({ + name = "deciduous_forest", + node_top = "default:dirt_with_grass", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 31000, + y_min = 1, + heat_point = 60, + humidity_point = 68, + }) + + minetest.register_biome({ + name = "deciduous_forest_shore", + node_top = "default:dirt", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 0, + y_min = -1, + heat_point = 60, + humidity_point = 68, + }) + + minetest.register_biome({ + name = "deciduous_forest_ocean", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_cave_liquid = "default:water_source", + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + vertical_blend = 1, + y_max = -2, + y_min = -255, + heat_point = 60, + humidity_point = 68, + }) + + minetest.register_biome({ + name = "deciduous_forest_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 60, + humidity_point = 68, + }) + + -- Desert + + minetest.register_biome({ + name = "desert", + node_top = "default:desert_sand", + depth_top = 1, + node_filler = "default:desert_sand", + depth_filler = 1, + node_stone = "default:desert_stone", + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:desert_stone", + node_dungeon_stair = "stairs:stair_desert_stone", + y_max = 31000, + y_min = 4, + heat_point = 92, + humidity_point = 16, + }) + + minetest.register_biome({ + name = "desert_ocean", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_stone = "default:desert_stone", + node_riverbed = "default:sand", + depth_riverbed = 2, + node_cave_liquid = "default:water_source", + node_dungeon = "default:desert_stone", + node_dungeon_stair = "stairs:stair_desert_stone", + vertical_blend = 1, + y_max = 3, + y_min = -255, + heat_point = 92, + humidity_point = 16, + }) + + minetest.register_biome({ + name = "desert_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 92, + humidity_point = 16, + }) + + -- Sandstone desert + + minetest.register_biome({ + name = "sandstone_desert", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 1, + node_stone = "default:sandstone", + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:sandstonebrick", + node_dungeon_stair = "stairs:stair_sandstone_block", + y_max = 31000, + y_min = 4, + heat_point = 60, + humidity_point = 0, + }) + + minetest.register_biome({ + name = "sandstone_desert_ocean", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_stone = "default:sandstone", + node_riverbed = "default:sand", + depth_riverbed = 2, + node_cave_liquid = "default:water_source", + node_dungeon = "default:sandstonebrick", + node_dungeon_stair = "stairs:stair_sandstone_block", + y_max = 3, + y_min = -255, + heat_point = 60, + humidity_point = 0, + }) + + minetest.register_biome({ + name = "sandstone_desert_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 60, + humidity_point = 0, + }) + + -- Cold desert + + minetest.register_biome({ + name = "cold_desert", + node_top = "default:silver_sand", + depth_top = 1, + node_filler = "default:silver_sand", + depth_filler = 1, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 31000, + y_min = 4, + heat_point = 40, + humidity_point = 0, + }) + + minetest.register_biome({ + name = "cold_desert_ocean", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_cave_liquid = "default:water_source", + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + vertical_blend = 1, + y_max = 3, + y_min = -255, + heat_point = 40, + humidity_point = 0, + }) + + minetest.register_biome({ + name = "cold_desert_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 40, + humidity_point = 0, + }) + + -- Savanna + + minetest.register_biome({ + name = "savanna", + node_top = "default:dry_dirt_with_dry_grass", + depth_top = 1, + node_filler = "default:dry_dirt", + depth_filler = 1, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 31000, + y_min = 1, + heat_point = 89, + humidity_point = 42, + }) + + minetest.register_biome({ + name = "savanna_shore", + node_top = "default:dry_dirt", + depth_top = 1, + node_filler = "default:dry_dirt", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 0, + y_min = -1, + heat_point = 89, + humidity_point = 42, + }) + + minetest.register_biome({ + name = "savanna_ocean", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_cave_liquid = "default:water_source", + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + vertical_blend = 1, + y_max = -2, + y_min = -255, + heat_point = 89, + humidity_point = 42, + }) + + minetest.register_biome({ + name = "savanna_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 89, + humidity_point = 42, + }) + + -- Rainforest + + minetest.register_biome({ + name = "rainforest", + node_top = "default:dirt_with_rainforest_litter", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 31000, + y_min = 1, + heat_point = 86, + humidity_point = 65, + }) + + minetest.register_biome({ + name = "rainforest_swamp", + node_top = "default:dirt", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = 0, + y_min = -1, + heat_point = 86, + humidity_point = 65, + }) + + minetest.register_biome({ + name = "rainforest_ocean", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_riverbed = "default:sand", + depth_riverbed = 2, + node_cave_liquid = "default:water_source", + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + vertical_blend = 1, + y_max = -2, + y_min = -255, + heat_point = 86, + humidity_point = 65, + }) + + minetest.register_biome({ + name = "rainforest_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 86, + humidity_point = 65, + }) +end + + +-- +-- Register decorations +-- + +-- Mgv6 + +function default.register_mgv6_decorations() + + -- Papyrus + + minetest.register_decoration({ + name = "default:papyrus", + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = -0.3, + scale = 0.7, + spread = {x = 100, y = 100, z = 100}, + seed = 354, + octaves = 3, + persist = 0.7 + }, + y_max = 1, + y_min = 1, + decoration = "default:papyrus", + height = 2, + height_max = 4, + spawn_by = "default:water_source", + num_spawn_by = 1, + }) + + -- Cacti + + minetest.register_decoration({ + name = "default:cactus", + deco_type = "simple", + place_on = {"default:desert_sand"}, + sidelen = 16, + noise_params = { + offset = -0.012, + scale = 0.024, + spread = {x = 100, y = 100, z = 100}, + seed = 230, + octaves = 3, + persist = 0.6 + }, + y_max = 30, + y_min = 1, + decoration = "default:cactus", + height = 3, + height_max = 4, + }) + + -- Long grasses + + for length = 1, 5 do + minetest.register_decoration({ + name = "default:grass_"..length, + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.007, + spread = {x = 100, y = 100, z = 100}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + y_max = 30, + y_min = 1, + decoration = "default:grass_"..length, + }) + end + + -- Dry shrubs + + minetest.register_decoration({ + name = "default:dry_shrub", + deco_type = "simple", + place_on = {"default:desert_sand", "default:dirt_with_snow"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.035, + spread = {x = 100, y = 100, z = 100}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + y_max = 30, + y_min = 1, + decoration = "default:dry_shrub", + param2 = 4, + }) +end + + +-- All mapgens except mgv6 + +local function register_grass_decoration(offset, scale, length) + minetest.register_decoration({ + name = "default:grass_" .. length, + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = offset, + scale = scale, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = {"grassland", "deciduous_forest"}, + y_max = 31000, + y_min = 1, + decoration = "default:grass_" .. length, + }) +end + +local function register_dry_grass_decoration(offset, scale, length) + minetest.register_decoration({ + name = "default:dry_grass_" .. length, + deco_type = "simple", + place_on = {"default:dry_dirt_with_dry_grass"}, + sidelen = 16, + noise_params = { + offset = offset, + scale = scale, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = {"savanna"}, + y_max = 31000, + y_min = 1, + decoration = "default:dry_grass_" .. length, + }) +end + +local function register_fern_decoration(seed, length) + minetest.register_decoration({ + name = "default:fern_" .. length, + deco_type = "simple", + place_on = {"default:dirt_with_coniferous_litter"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.2, + spread = {x = 100, y = 100, z = 100}, + seed = seed, + octaves = 3, + persist = 0.7 + }, + biomes = {"coniferous_forest"}, + y_max = 31000, + y_min = 6, + decoration = "default:fern_" .. length, + }) +end + + +function default.register_decorations() + -- Savanna bare dirt patches. + -- Must come before all savanna decorations that are placed on dry grass. + -- Noise is similar to long dry grass noise, but scale inverted, to appear + -- where long dry grass is least dense and shortest. + + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dry_dirt_with_dry_grass"}, + sidelen = 4, + noise_params = { + offset = -1.5, + scale = -1.5, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 4, + persist = 1.0 + }, + biomes = {"savanna"}, + y_max = 31000, + y_min = 1, + decoration = "default:dry_dirt", + place_offset_y = -1, + flags = "force_placement", + }) + + -- Apple tree and log + + minetest.register_decoration({ + name = "default:apple_tree", + deco_type = "schematic", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0.024, + scale = 0.015, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"deciduous_forest"}, + y_max = 31000, + y_min = 1, + schematic = minetest.get_modpath("default") .. "/schematics/apple_tree.mts", + flags = "place_center_x, place_center_z", + rotation = "random", + }) + + minetest.register_decoration({ + name = "default:apple_log", + deco_type = "schematic", + place_on = {"default:dirt_with_grass"}, + place_offset_y = 1, + sidelen = 16, + noise_params = { + offset = 0.0012, + scale = 0.0007, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"deciduous_forest"}, + y_max = 31000, + y_min = 1, + schematic = minetest.get_modpath("default") .. "/schematics/apple_log.mts", + flags = "place_center_x", + rotation = "random", + spawn_by = "default:dirt_with_grass", + num_spawn_by = 8, + }) + + -- Emergent jungle tree + -- Due to 32 node height, altitude is limited and prescence depends on chunksize + + local chunksize = tonumber(minetest.get_mapgen_setting("chunksize")) + if chunksize >= 5 then + minetest.register_decoration({ + name = "default:emergent_jungle_tree", + deco_type = "schematic", + place_on = {"default:dirt_with_rainforest_litter"}, + sidelen = 80, + noise_params = { + offset = 0.0, + scale = 0.0025, + spread = {x = 250, y = 250, z = 250}, + seed = 2685, + octaves = 3, + persist = 0.7 + }, + biomes = {"rainforest"}, + y_max = 32, + y_min = 1, + schematic = minetest.get_modpath("default") .. + "/schematics/emergent_jungle_tree.mts", + flags = "place_center_x, place_center_z", + rotation = "random", + place_offset_y = -4, + }) + end + + -- Jungle tree and log + + minetest.register_decoration({ + name = "default:jungle_tree", + deco_type = "schematic", + place_on = {"default:dirt_with_rainforest_litter"}, + sidelen = 80, + fill_ratio = 0.1, + biomes = {"rainforest"}, + y_max = 31000, + y_min = 1, + schematic = minetest.get_modpath("default") .. "/schematics/jungle_tree.mts", + flags = "place_center_x, place_center_z", + rotation = "random", + }) + + -- Swamp jungle trees + + minetest.register_decoration({ + name = "default:jungle_tree(swamp)", + deco_type = "schematic", + place_on = {"default:dirt"}, + sidelen = 16, + -- Noise tuned to place swamp trees where papyrus is absent + noise_params = { + offset = 0.0, + scale = -0.1, + spread = {x = 200, y = 200, z = 200}, + seed = 354, + octaves = 1, + persist = 0.5 + }, + biomes = {"rainforest_swamp"}, + y_max = 0, + y_min = -1, + schematic = minetest.get_modpath("default") .. "/schematics/jungle_tree.mts", + flags = "place_center_x, place_center_z", + rotation = "random", + }) + + minetest.register_decoration({ + name = "default:jungle_log", + deco_type = "schematic", + place_on = {"default:dirt_with_rainforest_litter"}, + place_offset_y = 1, + sidelen = 80, + fill_ratio = 0.005, + biomes = {"rainforest"}, + y_max = 31000, + y_min = 1, + schematic = minetest.get_modpath("default") .. "/schematics/jungle_log.mts", + flags = "place_center_x", + rotation = "random", + spawn_by = "default:dirt_with_rainforest_litter", + num_spawn_by = 8, + }) + + -- Taiga and temperate coniferous forest pine tree, small pine tree and log + + minetest.register_decoration({ + name = "default:pine_tree", + deco_type = "schematic", + place_on = {"default:dirt_with_snow", "default:dirt_with_coniferous_litter"}, + sidelen = 16, + noise_params = { + offset = 0.010, + scale = 0.048, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"taiga", "coniferous_forest"}, + y_max = 31000, + y_min = 4, + schematic = minetest.get_modpath("default") .. "/schematics/pine_tree.mts", + flags = "place_center_x, place_center_z", + }) + + minetest.register_decoration({ + name = "default:small_pine_tree", + deco_type = "schematic", + place_on = {"default:dirt_with_snow", "default:dirt_with_coniferous_litter"}, + sidelen = 16, + noise_params = { + offset = 0.010, + scale = -0.048, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"taiga", "coniferous_forest"}, + y_max = 31000, + y_min = 4, + schematic = minetest.get_modpath("default") .. "/schematics/small_pine_tree.mts", + flags = "place_center_x, place_center_z", + }) + + minetest.register_decoration({ + name = "default:pine_log", + deco_type = "schematic", + place_on = {"default:dirt_with_snow", "default:dirt_with_coniferous_litter"}, + place_offset_y = 1, + sidelen = 80, + fill_ratio = 0.0018, + biomes = {"taiga", "coniferous_forest"}, + y_max = 31000, + y_min = 4, + schematic = minetest.get_modpath("default") .. "/schematics/pine_log.mts", + flags = "place_center_x", + rotation = "random", + spawn_by = {"default:dirt_with_snow", "default:dirt_with_coniferous_litter"}, + num_spawn_by = 8, + }) + + -- Acacia tree and log + + minetest.register_decoration({ + name = "default:acacia_tree", + deco_type = "schematic", + place_on = {"default:dry_dirt_with_dry_grass"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.002, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"savanna"}, + y_max = 31000, + y_min = 1, + schematic = minetest.get_modpath("default") .. "/schematics/acacia_tree.mts", + flags = "place_center_x, place_center_z", + rotation = "random", + }) + + minetest.register_decoration({ + name = "default:acacia_log", + deco_type = "schematic", + place_on = {"default:dry_dirt_with_dry_grass"}, + place_offset_y = 1, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.001, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"savanna"}, + y_max = 31000, + y_min = 1, + schematic = minetest.get_modpath("default") .. "/schematics/acacia_log.mts", + flags = "place_center_x", + rotation = "random", + spawn_by = "default:dry_dirt_with_dry_grass", + num_spawn_by = 8, + }) + + -- Aspen tree and log + + minetest.register_decoration({ + name = "default:aspen_tree", + deco_type = "schematic", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0.0, + scale = -0.015, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"deciduous_forest"}, + y_max = 31000, + y_min = 1, + schematic = minetest.get_modpath("default") .. "/schematics/aspen_tree.mts", + flags = "place_center_x, place_center_z", + }) + + minetest.register_decoration({ + name = "default:aspen_log", + deco_type = "schematic", + place_on = {"default:dirt_with_grass"}, + place_offset_y = 1, + sidelen = 16, + noise_params = { + offset = 0.0, + scale = -0.0008, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"deciduous_forest"}, + y_max = 31000, + y_min = 1, + schematic = minetest.get_modpath("default") .. "/schematics/aspen_log.mts", + flags = "place_center_x", + rotation = "random", + spawn_by = "default:dirt_with_grass", + num_spawn_by = 8, + }) + + -- Large cactus + + minetest.register_decoration({ + name = "default:large_cactus", + deco_type = "schematic", + place_on = {"default:desert_sand"}, + sidelen = 16, + noise_params = { + offset = -0.0003, + scale = 0.0009, + spread = {x = 200, y = 200, z = 200}, + seed = 230, + octaves = 3, + persist = 0.6 + }, + biomes = {"desert"}, + y_max = 31000, + y_min = 4, + schematic = minetest.get_modpath("default") .. "/schematics/large_cactus.mts", + flags = "place_center_x, place_center_z", + rotation = "random", + }) + + -- Cactus + + minetest.register_decoration({ + name = "default:cactus", + deco_type = "simple", + place_on = {"default:desert_sand"}, + sidelen = 16, + noise_params = { + offset = -0.0003, + scale = 0.0009, + spread = {x = 200, y = 200, z = 200}, + seed = 230, + octaves = 3, + persist = 0.6 + }, + biomes = {"desert"}, + y_max = 31000, + y_min = 4, + decoration = "default:cactus", + height = 2, + height_max = 5, + }) + + -- Papyrus + + -- Dirt version for rainforest swamp + + minetest.register_decoration({ + name = "default:papyrus_on_dirt", + deco_type = "schematic", + place_on = {"default:dirt"}, + sidelen = 16, + noise_params = { + offset = -0.3, + scale = 0.7, + spread = {x = 200, y = 200, z = 200}, + seed = 354, + octaves = 3, + persist = 0.7 + }, + biomes = {"rainforest_swamp"}, + y_max = 0, + y_min = 0, + schematic = minetest.get_modpath("default") .. "/schematics/papyrus_on_dirt.mts", + }) + + -- Dry dirt version for savanna shore + + minetest.register_decoration({ + name = "default:papyrus_on_dry_dirt", + deco_type = "schematic", + place_on = {"default:dry_dirt"}, + sidelen = 16, + noise_params = { + offset = -0.3, + scale = 0.7, + spread = {x = 200, y = 200, z = 200}, + seed = 354, + octaves = 3, + persist = 0.7 + }, + biomes = {"savanna_shore"}, + y_max = 0, + y_min = 0, + schematic = minetest.get_modpath("default") .. + "/schematics/papyrus_on_dry_dirt.mts", + }) + + -- Bush + + minetest.register_decoration({ + name = "default:bush", + deco_type = "schematic", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = -0.004, + scale = 0.01, + spread = {x = 100, y = 100, z = 100}, + seed = 137, + octaves = 3, + persist = 0.7, + }, + biomes = {"grassland", "deciduous_forest"}, + y_max = 31000, + y_min = 1, + schematic = minetest.get_modpath("default") .. "/schematics/bush.mts", + flags = "place_center_x, place_center_z", + }) + + -- Blueberry bush + + minetest.register_decoration({ + name = "default:blueberry_bush", + deco_type = "schematic", + place_on = {"default:dirt_with_grass", "default:dirt_with_snow"}, + sidelen = 16, + noise_params = { + offset = -0.004, + scale = 0.01, + spread = {x = 100, y = 100, z = 100}, + seed = 697, + octaves = 3, + persist = 0.7, + }, + biomes = {"grassland", "snowy_grassland"}, + y_max = 31000, + y_min = 1, + place_offset_y = 1, + schematic = minetest.get_modpath("default") .. "/schematics/blueberry_bush.mts", + flags = "place_center_x, place_center_z", + }) + + -- Acacia bush + + minetest.register_decoration({ + name = "default:acacia_bush", + deco_type = "schematic", + place_on = {"default:dry_dirt_with_dry_grass"}, + sidelen = 16, + noise_params = { + offset = -0.004, + scale = 0.01, + spread = {x = 100, y = 100, z = 100}, + seed = 90155, + octaves = 3, + persist = 0.7, + }, + biomes = {"savanna"}, + y_max = 31000, + y_min = 1, + schematic = minetest.get_modpath("default") .. "/schematics/acacia_bush.mts", + flags = "place_center_x, place_center_z", + }) + + -- Pine bush + + minetest.register_decoration({ + name = "default:pine_bush", + deco_type = "schematic", + place_on = {"default:dirt_with_snow"}, + sidelen = 16, + noise_params = { + offset = -0.004, + scale = 0.01, + spread = {x = 100, y = 100, z = 100}, + seed = 137, + octaves = 3, + persist = 0.7, + }, + biomes = {"taiga", "snowy_grassland"}, + y_max = 31000, + y_min = 4, + schematic = minetest.get_modpath("default") .. "/schematics/pine_bush.mts", + flags = "place_center_x, place_center_z", + }) + + -- Grasses + + register_grass_decoration(-0.03, 0.09, 5) + register_grass_decoration(-0.015, 0.075, 4) + register_grass_decoration(0, 0.06, 3) + register_grass_decoration(0.015, 0.045, 2) + register_grass_decoration(0.03, 0.03, 1) + + -- Dry grasses + + register_dry_grass_decoration(0.01, 0.05, 5) + register_dry_grass_decoration(0.03, 0.03, 4) + register_dry_grass_decoration(0.05, 0.01, 3) + register_dry_grass_decoration(0.07, -0.01, 2) + register_dry_grass_decoration(0.09, -0.03, 1) + + -- Ferns + + register_fern_decoration(14936, 3) + register_fern_decoration(801, 2) + register_fern_decoration(5, 1) + + -- Junglegrass + + minetest.register_decoration({ + name = "default:junglegrass", + deco_type = "simple", + place_on = {"default:dirt_with_rainforest_litter"}, + sidelen = 80, + fill_ratio = 0.1, + biomes = {"rainforest"}, + y_max = 31000, + y_min = 1, + decoration = "default:junglegrass", + }) + + -- Dry shrub + + minetest.register_decoration({ + name = "default:dry_shrub", + deco_type = "simple", + place_on = {"default:desert_sand", + "default:sand", "default:silver_sand"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.02, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = {"desert", "sandstone_desert", "cold_desert"}, + y_max = 31000, + y_min = 2, + decoration = "default:dry_shrub", + param2 = 4, + }) + + -- Marram grass + + minetest.register_decoration({ + name = "default:marram_grass", + deco_type = "simple", + place_on = {"default:sand"}, + sidelen = 4, + noise_params = { + offset = -0.7, + scale = 4.0, + spread = {x = 16, y = 16, z = 16}, + seed = 513337, + octaves = 1, + persist = 0.0, + flags = "absvalue, eased" + }, + biomes = {"coniferous_forest_dunes", "grassland_dunes"}, + y_max = 6, + y_min = 4, + decoration = { + "default:marram_grass_1", + "default:marram_grass_2", + "default:marram_grass_3", + }, + }) + + -- Tundra moss + + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:permafrost_with_stones"}, + sidelen = 4, + noise_params = { + offset = -0.8, + scale = 2.0, + spread = {x = 100, y = 100, z = 100}, + seed = 53995, + octaves = 3, + persist = 1.0 + }, + biomes = {"tundra"}, + y_max = 50, + y_min = 2, + decoration = "default:permafrost_with_moss", + place_offset_y = -1, + flags = "force_placement", + }) + + -- Tundra patchy snow + + minetest.register_decoration({ + deco_type = "simple", + place_on = { + "default:permafrost_with_moss", + "default:permafrost_with_stones", + "default:stone", + "default:gravel" + }, + sidelen = 4, + noise_params = { + offset = 0, + scale = 1.0, + spread = {x = 100, y = 100, z = 100}, + seed = 172555, + octaves = 3, + persist = 1.0 + }, + biomes = {"tundra", "tundra_beach"}, + y_max = 50, + y_min = 1, + decoration = "default:snow", + }) + + -- Coral reef + + minetest.register_decoration({ + name = "default:corals", + deco_type = "simple", + place_on = {"default:sand"}, + place_offset_y = -1, + sidelen = 4, + noise_params = { + offset = -4, + scale = 4, + spread = {x = 50, y = 50, z = 50}, + seed = 7013, + octaves = 3, + persist = 0.7, + }, + biomes = { + "desert_ocean", + "savanna_ocean", + "rainforest_ocean", + }, + y_max = -2, + y_min = -8, + flags = "force_placement", + decoration = { + "default:coral_green", "default:coral_pink", + "default:coral_cyan", "default:coral_brown", + "default:coral_orange", "default:coral_skeleton", + }, + }) + + -- Kelp + + minetest.register_decoration({ + name = "default:kelp", + deco_type = "simple", + place_on = {"default:sand"}, + place_offset_y = -1, + sidelen = 16, + noise_params = { + offset = -0.04, + scale = 0.1, + spread = {x = 200, y = 200, z = 200}, + seed = 87112, + octaves = 3, + persist = 0.7 + }, + biomes = { + "taiga_ocean", + "snowy_grassland_ocean", + "grassland_ocean", + "coniferous_forest_ocean", + "deciduous_forest_ocean", + "sandstone_desert_ocean", + "cold_desert_ocean"}, + y_max = -5, + y_min = -10, + flags = "force_placement", + decoration = "default:sand_with_kelp", + param2 = 48, + param2_max = 96, + }) +end + + +-- +-- Detect mapgen to select functions +-- + +minetest.clear_registered_biomes() +minetest.clear_registered_ores() +minetest.clear_registered_decorations() + +local mg_name = minetest.get_mapgen_setting("mg_name") + +if mg_name == "v6" then + default.register_mgv6_ores() + default.register_mgv6_decorations() +else + default.register_biomes() + default.register_ores() + default.register_decorations() +end diff --git a/mods/default/mod.conf b/mods/default/mod.conf new file mode 100644 index 00000000..c9e74684 --- /dev/null +++ b/mods/default/mod.conf @@ -0,0 +1,3 @@ +name = default +description = Minetest Game mod: default +optional_depends = player_api diff --git a/mods/default/models/chest_open.obj b/mods/default/models/chest_open.obj new file mode 100644 index 00000000..72ba175a --- /dev/null +++ b/mods/default/models/chest_open.obj @@ -0,0 +1,79 @@ +# Blender v2.78 (sub 0) OBJ File: 'chest-open.blend' +# www.blender.org +o Top_Cube.002_None_Top_Cube.002_None_bottom +v -0.500000 0.408471 0.720970 +v -0.500000 1.115578 0.013863 +v -0.500000 0.894607 -0.207108 +v -0.500000 0.187501 0.499999 +v 0.500000 1.115578 0.013863 +v 0.500000 0.408471 0.720970 +v 0.500000 0.187501 0.499999 +v 0.500000 0.894607 -0.207108 +v -0.500000 0.187500 -0.500000 +v -0.500000 -0.500000 -0.500000 +v -0.500000 -0.500000 0.500000 +v 0.500000 0.187500 -0.500000 +v 0.500000 -0.500000 0.500000 +v 0.500000 -0.500000 -0.500000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 0.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 0.6875 +vt 0.0000 0.6875 +vt 1.0000 1.0000 +vt 0.0000 0.6875 +vt 1.0000 0.6875 +vt 1.0000 0.6875 +vt 1.0000 0.0000 +vt 0.0000 0.0000 +vt 1.0000 0.6875 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 1.0000 0.6875 +vt 1.0000 0.0000 +vt 0.0000 1.0000 +vt 0.0000 0.6875 +vt 0.0000 0.6875 +vt 0.0000 0.0000 +vt 1.0000 0.5000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.5000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vn 0.0000 0.7071 0.7071 +vn -0.0000 -1.0000 -0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 -0.0000 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.0000 1.0000 +vn -0.0000 0.7071 -0.7071 +vn -0.0000 0.0000 -1.0000 +vn -0.0000 -0.7071 -0.7071 +vn -0.0000 1.0000 -0.0000 +g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Top +s off +f 6/1/1 5/2/1 2/3/1 1/4/1 +g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Bottom +f 11/5/2 10/6/2 14/7/2 13/8/2 +g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Right-Left +f 1/9/3 2/10/3 3/11/3 4/12/3 +f 5/13/4 6/1/4 7/14/4 8/15/4 +f 4/12/3 9/16/3 10/17/3 11/18/3 +f 12/19/4 7/14/4 13/8/4 14/20/4 +g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Back +f 6/21/5 1/9/5 4/12/5 7/22/5 +f 7/22/6 4/12/6 11/18/6 13/23/6 +g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Front +f 2/10/7 5/24/7 8/25/7 3/11/7 +f 9/16/8 12/26/8 14/27/8 10/17/8 +g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Inside +f 4/28/9 3/29/9 8/30/9 7/31/9 +f 7/31/10 12/32/10 9/33/10 4/28/10 diff --git a/mods/default/models/torch_ceiling.obj b/mods/default/models/torch_ceiling.obj new file mode 100644 index 00000000..5df8597c --- /dev/null +++ b/mods/default/models/torch_ceiling.obj @@ -0,0 +1,53 @@ +# Blender v2.77 (sub 0) OBJ File: 'torch_ceiling.blend' +# www.blender.org +v -0.062469 -0.047331 0.068152 +v -0.062469 -0.559515 -0.164388 +v -0.062469 0.004344 -0.045667 +v -0.062469 -0.507839 -0.278206 +v 0.062531 -0.047331 0.068152 +v 0.062531 -0.559515 -0.164388 +v 0.062531 0.004344 -0.045667 +v 0.062531 -0.507839 -0.278206 +v 0.353584 0.040000 0.363553 +v 0.353584 -0.397500 0.363553 +v -0.353522 0.040000 -0.343553 +v -0.353522 -0.397500 -0.343553 +v 0.353584 0.040000 -0.343553 +v -0.353522 0.040000 0.363553 +v 0.353584 -0.397500 -0.343553 +v -0.353522 -0.397500 0.363553 +vt 0.5625 0.5000 +vt 0.5625 0.6250 +vt 0.4375 0.6250 +vt 0.4375 0.5000 +vt 0.4375 0.0000 +vt 0.5625 0.0000 +vt 0.5625 0.1250 +vt 0.4375 0.1250 +vt 0.5625 0.6250 +vt 0.4375 0.6250 +vt 0.4375 0.6250 +vt 0.4375 0.0000 +vt 0.5625 0.6250 +vt 0.5625 0.0000 +vt 1.0000 0.5625 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.5625 +vt 0.0000 0.5625 +vt 1.0000 0.5625 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vn 0.0000 0.9105 0.4134 +vn -0.0000 -0.4134 0.9105 +vn -1.0000 0.0000 0.0000 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +f 3/1/1 1/2/1 5/3/1 7/4/1 +f 8/5/1 4/6/1 2/7/1 6/8/1 +f 3/9/2 4/6/2 8/5/2 7/10/2 +f 1/11/3 3/9/3 4/6/3 2/12/3 +f 5/13/2 1/11/2 2/12/2 6/14/2 +f 7/10/3 8/5/3 6/14/3 5/13/3 +f 9/15/4 10/16/4 12/17/4 11/18/4 +f 13/19/5 14/20/5 16/21/5 15/22/5 diff --git a/mods/default/models/torch_floor.obj b/mods/default/models/torch_floor.obj new file mode 100644 index 00000000..dfd25e8f --- /dev/null +++ b/mods/default/models/torch_floor.obj @@ -0,0 +1,43 @@ +# Blender v2.76 (sub 11) OBJ File: 'torch_floor.blend' +# www.blender.org +v 0.062500 0.062500 -0.062500 +v 0.062500 -0.500000 -0.062500 +v 0.062500 0.062500 0.062500 +v 0.062500 -0.500000 0.062500 +v -0.062500 0.062500 -0.062500 +v -0.062500 -0.500000 -0.062500 +v -0.062500 0.062500 0.062500 +v -0.062500 -0.500000 0.062500 +v -0.353553 -0.500000 0.353553 +v -0.353553 0.500000 0.353553 +v 0.353553 -0.500000 -0.353553 +v 0.353553 0.500000 -0.353553 +v -0.353553 -0.500000 -0.353553 +v 0.353553 -0.500000 0.353553 +v -0.353553 0.500000 -0.353553 +v 0.353553 0.500000 0.353553 +vt 0.562500 0.500000 +vt 0.562500 0.625000 +vt 0.437500 0.625000 +vt 0.437500 0.500000 +vt 0.437500 0.000000 +vt 0.562500 0.000000 +vt 0.562500 0.125000 +vt 0.437500 0.125000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn -0.707100 0.000000 -0.707100 +vn -0.707100 -0.000000 0.707100 +f 3/1/1 1/2/1 5/3/1 7/4/1 +f 8/5/1 4/6/1 2/7/1 6/8/1 +f 3/2/2 4/6/2 8/5/2 7/3/2 +f 1/3/3 3/2/3 4/6/3 2/5/3 +f 5/2/2 1/3/2 2/5/2 6/6/2 +f 7/3/3 8/5/3 6/6/3 5/2/3 +f 9/9/4 10/10/4 12/11/4 11/12/4 +f 13/12/5 14/9/5 16/10/5 15/11/5 diff --git a/mods/default/models/torch_wall.obj b/mods/default/models/torch_wall.obj new file mode 100644 index 00000000..6de4b131 --- /dev/null +++ b/mods/default/models/torch_wall.obj @@ -0,0 +1,57 @@ +# Blender v2.76 (sub 11) OBJ File: 'torch_wall.blend' +# www.blender.org +v 0.062469 -0.195248 0.023570 +v 0.062469 -0.476498 -0.463570 +v 0.062469 -0.303502 0.086070 +v 0.062469 -0.584752 -0.401070 +v -0.062531 -0.195248 0.023570 +v -0.062531 -0.476498 -0.463570 +v -0.062531 -0.303502 0.086070 +v -0.062531 -0.584752 -0.401070 +v -0.353584 -0.613553 0.022500 +v -0.353584 -0.613553 0.460000 +v 0.353522 0.093553 0.022500 +v 0.353522 0.093553 0.460000 +v -0.353584 0.093553 0.022500 +v 0.353522 -0.613553 0.022500 +v -0.353584 0.093553 0.460000 +v 0.353522 -0.613553 0.460000 +v 0.353553 0.056811 -0.121957 +v 0.353553 -0.224439 -0.609096 +v -0.353553 -0.555561 0.231596 +v -0.353553 -0.836811 -0.255543 +v -0.353553 0.056811 -0.121957 +v -0.353553 -0.224439 -0.609096 +v 0.353553 -0.555561 0.231596 +v 0.353553 -0.836811 -0.255543 +vt 0.562500 0.500000 +vt 0.562500 0.625000 +vt 0.437500 0.625000 +vt 0.437500 0.500000 +vt 0.437500 0.000000 +vt 0.562500 0.000000 +vt 0.562500 0.125000 +vt 0.437500 0.125000 +vt 0.000000 0.562500 +vt 0.000000 -0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.562500 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn -0.000000 0.500000 0.866000 +vn -0.000000 0.866000 -0.500000 +vn 1.000000 0.000000 0.000000 +vn -0.707100 0.612400 -0.353600 +vn -0.707100 -0.612400 0.353600 +vn -0.707100 0.707100 -0.000000 +vn -0.707100 -0.707100 -0.000000 +f 3/1/1 1/2/1 5/3/1 7/4/1 +f 8/5/1 4/6/1 2/7/1 6/8/1 +f 3/2/2 4/6/2 8/5/2 7/3/2 +f 1/3/3 3/2/3 4/6/3 2/5/3 +f 5/2/2 1/3/2 2/5/2 6/6/2 +f 7/3/3 8/5/3 6/6/3 5/2/3 +f 17/9/4 18/10/4 20/11/4 19/12/4 +f 21/9/5 22/10/5 24/11/5 23/12/5 +f 9/12/6 10/13/6 12/14/6 11/9/6 +f 13/9/7 14/12/7 16/13/7 15/14/7 diff --git a/mods/default/nodes.lua b/mods/default/nodes.lua new file mode 100644 index 00000000..2bbc03bc --- /dev/null +++ b/mods/default/nodes.lua @@ -0,0 +1,2982 @@ +-- mods/default/nodes.lua + +-- support for MT game translation. +local S = default.get_translator + +--[[ Node name convention: + +Although many node names are in combined-word form, the required form for new +node names is words separated by underscores. If both forms are used in written +language (for example pinewood and pine wood) the underscore form should be used. + +--]] + + +--[[ Index: + +Stone +----- +(1. Material 2. Cobble variant 3. Brick variant 4. Modified forms) + +default:stone +default:cobble +default:stonebrick +default:stone_block +default:mossycobble + +default:desert_stone +default:desert_cobble +default:desert_stonebrick +default:desert_stone_block + +default:sandstone +default:sandstonebrick +default:sandstone_block +default:desert_sandstone +default:desert_sandstone_brick +default:desert_sandstone_block +default:silver_sandstone +default:silver_sandstone_brick +default:silver_sandstone_block + +default:obsidian +default:obsidianbrick +default:obsidian_block + +Soft / Non-Stone +---------------- +(1. Material 2. Modified forms) + +default:dirt +default:dirt_with_grass +default:dirt_with_grass_footsteps +default:dirt_with_dry_grass +default:dirt_with_snow +default:dirt_with_rainforest_litter +default:dirt_with_coniferous_litter +default:dry_dirt +default:dry_dirt_with_dry_grass + +default:permafrost +default:permafrost_with_stones +default:permafrost_with_moss + +default:sand +default:desert_sand +default:silver_sand + +default:gravel + +default:clay + +default:snow +default:snowblock +default:ice +default:cave_ice + +Trees +----- +(1. Trunk 2. Fabricated trunk 3. Leaves 4. Sapling 5. Fruits) + +default:tree +default:wood +default:leaves +default:sapling +default:apple + +default:jungletree +default:junglewood +default:jungleleaves +default:junglesapling +default:emergent_jungle_sapling + +default:pine_tree +default:pine_wood +default:pine_needles +default:pine_sapling + +default:acacia_tree +default:acacia_wood +default:acacia_leaves +default:acacia_sapling + +default:aspen_tree +default:aspen_wood +default:aspen_leaves +default:aspen_sapling + +Ores +---- +(1. In stone 2. Blocks) + +default:stone_with_coal +default:coalblock + +default:stone_with_iron +default:steelblock + +default:stone_with_copper +default:copperblock + +default:stone_with_tin +default:tinblock + +default:bronzeblock + +default:stone_with_gold +default:goldblock + +default:stone_with_mese +default:mese + +default:stone_with_diamond +default:diamondblock + +Plantlife +--------- + +default:cactus +default:large_cactus_seedling + +default:papyrus +default:dry_shrub +default:junglegrass + +default:grass_1 +default:grass_2 +default:grass_3 +default:grass_4 +default:grass_5 + +default:dry_grass_1 +default:dry_grass_2 +default:dry_grass_3 +default:dry_grass_4 +default:dry_grass_5 + +default:fern_1 +default:fern_2 +default:fern_3 + +default:marram_grass_1 +default:marram_grass_2 +default:marram_grass_3 + +default:bush_stem +default:bush_leaves +default:bush_sapling +default:acacia_bush_stem +default:acacia_bush_leaves +default:acacia_bush_sapling +default:pine_bush_stem +default:pine_bush_needles +default:pine_bush_sapling +default:blueberry_bush_leaves_with_berries +default:blueberry_bush_leaves +default:blueberry_bush_sapling + +default:sand_with_kelp + +Corals +------ + +default:coral_green +default:coral_pink +default:coral_cyan +default:coral_brown +default:coral_orange +default:coral_skeleton + +Liquids +------- +(1. Source 2. Flowing) + +default:water_source +default:water_flowing + +default:river_water_source +default:river_water_flowing + +default:lava_source +default:lava_flowing + +Tools / "Advanced" crafting / Non-"natural" +------------------------------------------- + +default:bookshelf + +default:sign_wall_wood +default:sign_wall_steel + +default:ladder_wood +default:ladder_steel + +default:fence_wood +default:fence_acacia_wood +default:fence_junglewood +default:fence_pine_wood +default:fence_aspen_wood + +default:fence_rail_wood +default:fence_rail_acacia_wood +default:fence_rail_junglewood +default:fence_rail_pine_wood +default:fence_rail_aspen_wood + +default:glass +default:obsidian_glass + +default:brick + +default:meselamp +default:mese_post_light +default:mese_post_light_acacia_wood +default:mese_post_light_junglewood +default:mese_post_light_pine_wood +default:mese_post_light_aspen_wood + +Misc +---- + +default:cloud + +--]] + +-- Required wrapper to allow customization of default.after_place_leaves +local function after_place_leaves(...) + return default.after_place_leaves(...) +end + +-- Required wrapper to allow customization of default.grow_sapling +local function grow_sapling(...) + return default.grow_sapling(...) +end + +-- +-- Stone +-- + +minetest.register_node("default:stone", { + description = S("Stone"), + tiles = {"default_stone.png"}, + groups = {cracky = 3, stone = 1}, + drop = "default:cobble", + legacy_mineral = true, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:cobble", { + description = S("Cobblestone"), + tiles = {"default_cobble.png"}, + is_ground_content = false, + groups = {cracky = 3, stone = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:stonebrick", { + description = S("Stone Brick"), + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_stone_brick.png"}, + is_ground_content = false, + groups = {cracky = 2, stone = 1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:stone_block", { + description = S("Stone Block"), + tiles = {"default_stone_block.png"}, + is_ground_content = false, + groups = {cracky = 2, stone = 1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:mossystone", { + description = "Mossy Stone", + tiles = {"default_mossystone.png"}, + is_ground_content = false, + groups = {cracky = 3, stone = 1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:mossycobble", { + description = S("Mossy Cobblestone"), + tiles = {"default_mossycobble.png"}, + is_ground_content = false, + groups = {cracky = 3, stone = 1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:mossystonebrick", { + description = "Mossy Stonebrick", + tiles = {"default_mossystone_brick.png"}, + is_ground_content = false, + groups = {cracky = 3, stone = 1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:desert_stone", { + description = S("Desert Stone"), + tiles = {"default_desert_stone.png"}, + groups = {cracky = 3, stone = 1}, + drop = "default:desert_cobble", + legacy_mineral = true, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:desert_cobble", { + description = S("Desert Cobblestone"), + tiles = {"default_desert_cobble.png"}, + is_ground_content = false, + groups = {cracky = 3, stone = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:desert_stonebrick", { + description = S("Desert Stone Brick"), + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_desert_stone_brick.png"}, + is_ground_content = false, + groups = {cracky = 2, stone = 1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:desert_stone_block", { + description = S("Desert Stone Block"), + tiles = {"default_desert_stone_block.png"}, + is_ground_content = false, + groups = {cracky = 2, stone = 1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:sandstone", { + description = S("Sandstone"), + tiles = {"default_sandstone.png"}, + groups = {crumbly = 1, cracky = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:sandstonebrick", { + description = S("Sandstone Brick"), + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_sandstone_brick.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:sandstone_block", { + description = S("Sandstone Block"), + tiles = {"default_sandstone_block.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:desert_sandstone", { + description = S("Desert Sandstone"), + tiles = {"default_desert_sandstone.png"}, + groups = {crumbly = 1, cracky = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:desert_sandstone_brick", { + description = S("Desert Sandstone Brick"), + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_desert_sandstone_brick.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:desert_sandstone_block", { + description = S("Desert Sandstone Block"), + tiles = {"default_desert_sandstone_block.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:silver_sandstone", { + description = S("Silver Sandstone"), + tiles = {"default_silver_sandstone.png"}, + groups = {crumbly = 1, cracky = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:silver_sandstone_brick", { + description = S("Silver Sandstone Brick"), + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_silver_sandstone_brick.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:silver_sandstone_block", { + description = S("Silver Sandstone Block"), + tiles = {"default_silver_sandstone_block.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:obsidian", { + description = S("Obsidian"), + tiles = {"default_obsidian.png"}, + sounds = default.node_sound_stone_defaults(), + groups = {cracky = 1, level = 2}, +}) + +minetest.register_node("default:obsidianbrick", { + description = S("Obsidian Brick"), + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_obsidian_brick.png"}, + is_ground_content = false, + sounds = default.node_sound_stone_defaults(), + groups = {cracky = 1, level = 2}, +}) + +minetest.register_node("default:obsidian_block", { + description = S("Obsidian Block"), + tiles = {"default_obsidian_block.png"}, + is_ground_content = false, + sounds = default.node_sound_stone_defaults(), + groups = {cracky = 1, level = 2}, +}) + +-- +-- Soft / Non-Stone +-- + +minetest.register_node("default:dirt", { + description = S("Dirt"), + tiles = {"default_dirt.png"}, + groups = {crumbly = 3, soil = 1}, + sounds = default.node_sound_dirt_defaults(), + drop = { + max_items = 1, + items = { + {items = {'default:bone', 'default:dirt'},rarity = 30,}, + {items = {'default:dirt'},}, + }, + }, + +}) + +minetest.register_node("default:dirt_with_grass", { + description = S("Dirt with Grass"), + tiles = {"default_grass.png", "default_dirt.png", + {name = "default_dirt.png^default_grass_side.png", + tileable_vertical = false}}, + groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1}, + drop = "default:dirt", + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "default_grass_footstep", gain = 0.25}, + }), +}) + +minetest.register_node("default:dirt_with_grass_footsteps", { + description = S("Dirt with Grass and Footsteps"), + tiles = {"default_grass.png^default_footprint.png", "default_dirt.png", + {name = "default_dirt.png^default_grass_side.png", + tileable_vertical = false}}, + groups = {crumbly = 3, soil = 1, not_in_creative_inventory = 1}, + drop = "default:dirt", + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "default_grass_footstep", gain = 0.25}, + }), +}) + +minetest.register_node("default:dirt_with_dry_grass", { + description = S("Dirt with Savanna Grass"), + tiles = {"default_dry_grass.png", + "default_dirt.png", + {name = "default_dirt.png^default_dry_grass_side.png", + tileable_vertical = false}}, + groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1}, + drop = "default:dirt", + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "default_grass_footstep", gain = 0.4}, + }), +}) + +minetest.register_node("default:dirt_with_snow", { + description = S("Dirt with Snow"), + tiles = {"default_snow.png", "default_dirt.png", + {name = "default_dirt.png^default_snow_side.png", + tileable_vertical = false}}, + groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1, snowy = 1}, + drop = "default:dirt", + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "default_snow_footstep", gain = 0.2}, + }), +}) + +minetest.register_node("default:dirt_with_rainforest_litter", { + description = S("Dirt with Rainforest Litter"), + tiles = { + "default_rainforest_litter.png", + "default_dirt.png", + {name = "default_dirt.png^default_rainforest_litter_side.png", + tileable_vertical = false} + }, + groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1}, + drop = "default:dirt", + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "default_grass_footstep", gain = 0.4}, + }), +}) + +minetest.register_node("default:dirt_with_coniferous_litter", { + description = S("Dirt with Coniferous Litter"), + tiles = { + "default_coniferous_litter.png", + "default_dirt.png", + {name = "default_dirt.png^default_coniferous_litter_side.png", + tileable_vertical = false} + }, + groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1}, + drop = "default:dirt", + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "default_grass_footstep", gain = 0.4}, + }), +}) + +minetest.register_node("default:dry_dirt", { + description = S("Savanna Dirt"), + tiles = {"default_dry_dirt.png"}, + groups = {crumbly = 3, soil = 1}, + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_node("default:dry_dirt_with_dry_grass", { + description = S("Savanna Dirt with Savanna Grass"), + tiles = {"default_dry_grass.png", "default_dry_dirt.png", + {name = "default_dry_dirt.png^default_dry_grass_side.png", + tileable_vertical = false}}, + groups = {crumbly = 3, soil = 1}, + drop = "default:dry_dirt", + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "default_grass_footstep", gain = 0.4}, + }), +}) + +minetest.register_node("default:permafrost", { + description = S("Permafrost"), + tiles = {"default_permafrost.png"}, + groups = {cracky = 3}, + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_node("default:permafrost_with_stones", { + description = S("Permafrost with Stones"), + tiles = {"default_permafrost.png^default_stones.png", + "default_permafrost.png", + "default_permafrost.png^default_stones_side.png"}, + groups = {cracky = 3}, + sounds = default.node_sound_gravel_defaults(), +}) + +minetest.register_node("default:permafrost_with_moss", { + description = S("Permafrost with Moss"), + tiles = {"default_moss.png", "default_permafrost.png", + {name = "default_permafrost.png^default_moss_side.png", + tileable_vertical = false}}, + groups = {cracky = 3}, + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "default_grass_footstep", gain = 0.25}, + }), +}) + +minetest.register_node("default:sand", { + description = S("Sand"), + tiles = {"default_sand.png"}, + groups = {crumbly = 3, falling_node = 1, sand = 1}, + sounds = default.node_sound_sand_defaults(), +}) + +minetest.register_node("default:desert_sand", { + description = S("Desert Sand"), + tiles = {"default_desert_sand.png"}, + groups = {crumbly = 3, falling_node = 1, sand = 1}, + sounds = default.node_sound_sand_defaults(), +}) + +minetest.register_node("default:silver_sand", { + description = S("Silver Sand"), + tiles = {"default_silver_sand.png"}, + groups = {crumbly = 3, falling_node = 1, sand = 1}, + sounds = default.node_sound_sand_defaults(), +}) + + +minetest.register_node("default:gravel", { + description = S("Gravel"), + tiles = {"default_gravel.png"}, + groups = {crumbly = 2, falling_node = 1}, + sounds = default.node_sound_gravel_defaults(), + drop = { + max_items = 1, + items = { + {items = {"default:flint"}, rarity = 16}, + {items = {"default:gravel"}} + } + } +}) + +minetest.register_node("default:clay", { + description = S("Clay"), + tiles = {"default_clay.png"}, + groups = {crumbly = 3}, + drop = "default:clay_lump 4", + sounds = default.node_sound_dirt_defaults(), +}) + + +minetest.register_node("default:snow", { + description = S("Snow"), + tiles = {"default_snow.png"}, + inventory_image = "default_snowball.png", + wield_image = "default_snowball.png", + paramtype = "light", + buildable_to = true, + floodable = true, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, + }, + }, + collision_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -6 / 16, 0.5}, + }, + }, + groups = {crumbly = 3, falling_node = 1, snowy = 1}, + sounds = default.node_sound_snow_defaults(), + + on_construct = function(pos) + pos.y = pos.y - 1 + if minetest.get_node(pos).name == "default:dirt_with_grass" then + minetest.set_node(pos, {name = "default:dirt_with_snow"}) + end + end, +}) + +minetest.register_node("default:snowblock", { + description = S("Snow Block"), + tiles = {"default_snow.png"}, + groups = {crumbly = 3, cools_lava = 1, snowy = 1}, + sounds = default.node_sound_snow_defaults(), + + on_construct = function(pos) + pos.y = pos.y - 1 + if minetest.get_node(pos).name == "default:dirt_with_grass" then + minetest.set_node(pos, {name = "default:dirt_with_snow"}) + end + end, +}) + +-- 'is ground content = false' to avoid tunnels in sea ice or ice rivers +minetest.register_node("default:ice", { + description = S("Ice"), + tiles = {"default_ice.png"}, + is_ground_content = false, + paramtype = "light", + groups = {cracky = 3, cools_lava = 1, slippery = 3}, + sounds = default.node_sound_ice_defaults(), +}) + +-- Mapgen-placed ice with 'is ground content = true' to contain tunnels +minetest.register_node("default:cave_ice", { + description = S("Cave Ice"), + tiles = {"default_ice.png"}, + paramtype = "light", + groups = {cracky = 3, cools_lava = 1, slippery = 3, + not_in_creative_inventory = 1}, + drop = "default:ice", + sounds = default.node_sound_ice_defaults(), +}) + +-- +-- Trees +-- + +minetest.register_node("default:tree", { + description = S("Apple Tree"), + tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + + on_place = minetest.rotate_node +}) + +minetest.register_node("default:wood", { + description = S("Apple Wood Planks"), + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_wood.png"}, + is_ground_content = false, + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("default:sapling", { + description = S("Apple Tree Sapling"), + drawtype = "plantlike", + tiles = {"default_sapling.png"}, + inventory_image = "default_sapling.png", + wield_image = "default_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = grow_sapling, + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:sapling", + -- minp, maxp to be checked, relative to sapling pos + -- minp_relative.y = 1 because sapling pos has been checked + {x = -3, y = 1, z = -3}, + {x = 3, y = 6, z = 3}, + -- maximum interval of interior volume check + 4) + + return itemstack + end, +}) + +minetest.register_node("default:leaves", { + description = S("Apple Tree Leaves"), + drawtype = "allfaces_optional", + waving = 1, + tiles = {"default_leaves.png"}, + special_tiles = {"default_leaves_simple.png"}, + paramtype = "light", + is_ground_content = false, + groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + { + -- player will get sapling with 1/20 chance + items = {"default:sapling"}, + rarity = 20, + }, + { + -- player will get leaves only if he get no saplings, + -- this is because max_items is 1 + items = {"default:leaves"}, + } + } + }, + sounds = default.node_sound_leaves_defaults(), + + after_place_node = after_place_leaves, +}) + +minetest.register_node("default:apple", { + description = S("Apple"), + drawtype = "plantlike", + tiles = {"default_apple.png"}, + inventory_image = "default_apple.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + is_ground_content = false, + selection_box = { + type = "fixed", + fixed = {-3 / 16, -7 / 16, -3 / 16, 3 / 16, 4 / 16, 3 / 16} + }, + groups = {fleshy = 3, dig_immediate = 3, flammable = 2, + leafdecay = 3, leafdecay_drop = 1, food_apple = 1}, + on_use = minetest.item_eat(2), + sounds = default.node_sound_leaves_defaults(), + + after_place_node = function(pos, placer, itemstack) + minetest.set_node(pos, {name = "default:apple", param2 = 1}) + end, + + after_dig_node = function(pos, oldnode, oldmetadata, digger) + if oldnode.param2 == 0 then + minetest.set_node(pos, {name = "default:apple_mark"}) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end + end, +}) + +minetest.register_node("default:apple_mark", { + description = S("Apple Marker"), + inventory_image = "default_apple.png^default_invisible_node_overlay.png", + wield_image = "default_apple.png^default_invisible_node_overlay.png", + drawtype = "airlike", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + drop = "", + groups = {not_in_creative_inventory = 1}, + on_timer = function(pos, elapsed) + if not minetest.find_node_near(pos, 1, "default:leaves") then + minetest.remove_node(pos) + elseif minetest.get_node_light(pos) < 11 then + minetest.get_node_timer(pos):start(200) + else + minetest.set_node(pos, {name = "default:apple"}) + end + end +}) + + +minetest.register_node("default:jungletree", { + description = S("Jungle Tree"), + tiles = {"default_jungletree_top.png", "default_jungletree_top.png", + "default_jungletree.png"}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + + on_place = minetest.rotate_node +}) + +minetest.register_node("default:junglewood", { + description = S("Jungle Wood Planks"), + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_junglewood.png"}, + is_ground_content = false, + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("default:jungleleaves", { + description = S("Jungle Tree Leaves"), + drawtype = "allfaces_optional", + waving = 1, + tiles = {"default_jungleleaves.png"}, + special_tiles = {"default_jungleleaves_simple.png"}, + paramtype = "light", + is_ground_content = false, + groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"default:junglesapling"}, rarity = 20}, + {items = {"default:jungleleaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + + after_place_node = after_place_leaves, +}) + +minetest.register_node("default:junglesapling", { + description = S("Jungle Tree Sapling"), + drawtype = "plantlike", + tiles = {"default_junglesapling.png"}, + inventory_image = "default_junglesapling.png", + wield_image = "default_junglesapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = grow_sapling, + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:junglesapling", + -- minp, maxp to be checked, relative to sapling pos + -- minp_relative.y = 1 because sapling pos has been checked + {x = -2, y = 1, z = -2}, + {x = 2, y = 15, z = 2}, + -- maximum interval of interior volume check + 4) + + return itemstack + end, +}) + +minetest.register_node("default:emergent_jungle_sapling", { + description = S("Emergent Jungle Tree Sapling"), + drawtype = "plantlike", + tiles = {"default_emergent_jungle_sapling.png"}, + inventory_image = "default_emergent_jungle_sapling.png", + wield_image = "default_emergent_jungle_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = grow_sapling, + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:emergent_jungle_sapling", + -- minp, maxp to be checked, relative to sapling pos + {x = -3, y = -5, z = -3}, + {x = 3, y = 31, z = 3}, + -- maximum interval of interior volume check + 4) + + return itemstack + end, +}) + + +minetest.register_node("default:pine_tree", { + description = S("Pine Tree"), + tiles = {"default_pine_tree_top.png", "default_pine_tree_top.png", + "default_pine_tree.png"}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {tree = 1, choppy = 3, oddly_breakable_by_hand = 1, flammable = 3}, + sounds = default.node_sound_wood_defaults(), + + on_place = minetest.rotate_node +}) + +minetest.register_node("default:pine_wood", { + description = S("Pine Wood Planks"), + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_pine_wood.png"}, + is_ground_content = false, + groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3, wood = 1}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("default:pine_needles",{ + description = S("Pine Needles"), + drawtype = "allfaces_optional", + tiles = {"default_pine_needles.png"}, + waving = 1, + paramtype = "light", + is_ground_content = false, + groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"default:pine_sapling"}, rarity = 20}, + {items = {"default:pine_needles"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + + after_place_node = after_place_leaves, +}) + +minetest.register_node("default:pine_sapling", { + description = S("Pine Tree Sapling"), + drawtype = "plantlike", + tiles = {"default_pine_sapling.png"}, + inventory_image = "default_pine_sapling.png", + wield_image = "default_pine_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = grow_sapling, + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 3, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:pine_sapling", + -- minp, maxp to be checked, relative to sapling pos + -- minp_relative.y = 1 because sapling pos has been checked + {x = -2, y = 1, z = -2}, + {x = 2, y = 14, z = 2}, + -- maximum interval of interior volume check + 4) + + return itemstack + end, +}) + + +minetest.register_node("default:acacia_tree", { + description = S("Acacia Tree"), + tiles = {"default_acacia_tree_top.png", "default_acacia_tree_top.png", + "default_acacia_tree.png"}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + + on_place = minetest.rotate_node +}) + +minetest.register_node("default:acacia_wood", { + description = S("Acacia Wood Planks"), + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_acacia_wood.png"}, + is_ground_content = false, + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("default:acacia_leaves", { + description = S("Acacia Tree Leaves"), + drawtype = "allfaces_optional", + tiles = {"default_acacia_leaves.png"}, + special_tiles = {"default_acacia_leaves_simple.png"}, + waving = 1, + paramtype = "light", + is_ground_content = false, + groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"default:acacia_sapling"}, rarity = 20}, + {items = {"default:acacia_leaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + + after_place_node = after_place_leaves, +}) + +minetest.register_node("default:acacia_sapling", { + description = S("Acacia Tree Sapling"), + drawtype = "plantlike", + tiles = {"default_acacia_sapling.png"}, + inventory_image = "default_acacia_sapling.png", + wield_image = "default_acacia_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = grow_sapling, + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:acacia_sapling", + -- minp, maxp to be checked, relative to sapling pos + -- minp_relative.y = 1 because sapling pos has been checked + {x = -4, y = 1, z = -4}, + {x = 4, y = 7, z = 4}, + -- maximum interval of interior volume check + 4) + + return itemstack + end, +}) + +minetest.register_node("default:aspen_tree", { + description = S("Aspen Tree"), + tiles = {"default_aspen_tree_top.png", "default_aspen_tree_top.png", + "default_aspen_tree.png"}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {tree = 1, choppy = 3, oddly_breakable_by_hand = 1, flammable = 3}, + sounds = default.node_sound_wood_defaults(), + + on_place = minetest.rotate_node +}) + +minetest.register_node("default:aspen_wood", { + description = S("Aspen Wood Planks"), + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_aspen_wood.png"}, + is_ground_content = false, + groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3, wood = 1}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("default:aspen_leaves", { + description = S("Aspen Tree Leaves"), + drawtype = "allfaces_optional", + tiles = {"default_aspen_leaves.png"}, + waving = 1, + paramtype = "light", + is_ground_content = false, + groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"default:aspen_sapling"}, rarity = 20}, + {items = {"default:aspen_leaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + + after_place_node = after_place_leaves, +}) + +minetest.register_node("default:aspen_sapling", { + description = S("Aspen Tree Sapling"), + drawtype = "plantlike", + tiles = {"default_aspen_sapling.png"}, + inventory_image = "default_aspen_sapling.png", + wield_image = "default_aspen_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = grow_sapling, + selection_box = { + type = "fixed", + fixed = {-3 / 16, -0.5, -3 / 16, 3 / 16, 0.5, 3 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 3, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:aspen_sapling", + -- minp, maxp to be checked, relative to sapling pos + -- minp_relative.y = 1 because sapling pos has been checked + {x = -2, y = 1, z = -2}, + {x = 2, y = 12, z = 2}, + -- maximum interval of interior volume check + 4) + + return itemstack + end, +}) + +-- +-- Ores +-- + +minetest.register_node("default:stone_with_coal", { + description = S("Coal Ore"), + tiles = {"default_stone.png^default_mineral_coal.png"}, + groups = {cracky = 3}, + drop = "default:coal_lump", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:coalblock", { + description = S("Coal Block"), + tiles = {"default_coal_block.png"}, + is_ground_content = false, + groups = {cracky = 3}, + sounds = default.node_sound_stone_defaults(), +}) + + +minetest.register_node("default:stone_with_iron", { + description = S("Iron Ore"), + tiles = {"default_stone.png^default_mineral_iron.png"}, + groups = {cracky = 2}, + drop = "default:iron_lump", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:steelblock", { + description = S("Steel Block"), + tiles = {"default_steel_block.png"}, + is_ground_content = false, + groups = {cracky = 1, level = 2}, + sounds = default.node_sound_metal_defaults(), +}) + + +minetest.register_node("default:stone_with_copper", { + description = S("Copper Ore"), + tiles = {"default_stone.png^default_mineral_copper.png"}, + groups = {cracky = 2}, + drop = "default:copper_lump", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:copperblock", { + description = S("Copper Block"), + tiles = {"default_copper_block.png"}, + is_ground_content = false, + groups = {cracky = 1, level = 2}, + sounds = default.node_sound_metal_defaults(), +}) + + +minetest.register_node("default:stone_with_tin", { + description = S("Tin Ore"), + tiles = {"default_stone.png^default_mineral_tin.png"}, + groups = {cracky = 2}, + drop = "default:tin_lump", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:tinblock", { + description = S("Tin Block"), + tiles = {"default_tin_block.png"}, + is_ground_content = false, + groups = {cracky = 1, level = 2}, + sounds = default.node_sound_metal_defaults(), +}) + + +minetest.register_node("default:bronzeblock", { + description = S("Bronze Block"), + tiles = {"default_bronze_block.png"}, + is_ground_content = false, + groups = {cracky = 1, level = 2}, + sounds = default.node_sound_metal_defaults(), +}) + + +minetest.register_node("default:stone_with_mese", { + description = S("Mese Ore"), + tiles = {"default_stone.png^default_mineral_mese.png"}, + groups = {cracky = 1}, + drop = "default:mese_crystal", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:mese", { + description = S("Mese Block"), + tiles = {"default_mese_block.png"}, + paramtype = "light", + groups = {cracky = 1, level = 2}, + sounds = default.node_sound_stone_defaults(), + light_source = 3, +}) + +minetest.register_node("default:mese_ongen", { + description = "Mese Block", + tiles = {"default_mese_block.png"}, + paramtype = "light", + groups = {cracky = 1, level = 2}, + drop = "default:mese", + sounds = default.node_sound_stone_defaults(), + light_source = 3, +}) + +minetest.register_node("default:stone_with_gold", { + description = S("Gold Ore"), + tiles = {"default_stone.png^default_mineral_gold.png"}, + groups = {cracky = 2}, + drop = "default:gold_lump", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:goldblock", { + description = S("Gold Block"), + tiles = {"default_gold_block.png"}, + is_ground_content = false, + groups = {cracky = 1}, + sounds = default.node_sound_metal_defaults(), +}) + + +minetest.register_node("default:stone_with_diamond", { + description = S("Diamond Ore"), + tiles = {"default_stone.png^default_mineral_diamond.png"}, + groups = {cracky = 1}, + drop = "default:diamond", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:diamondblock", { + description = S("Diamond Block"), + tiles = {"default_diamond_block.png"}, + is_ground_content = false, + groups = {cracky = 1, level = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +-- +-- Plantlife (non-cubic) +-- + +minetest.register_node("default:cactus", { + description = S("Cactus"), + tiles = {"default_cactus_top.png", "default_cactus_top.png", + "default_cactus_side.png"}, + paramtype2 = "facedir", + groups = {choppy = 3}, + sounds = default.node_sound_wood_defaults(), + on_place = minetest.rotate_node, +}) + +minetest.register_node("default:large_cactus_seedling", { + description = S("Large Cactus Seedling"), + drawtype = "plantlike", + tiles = {"default_large_cactus_seedling.png"}, + inventory_image = "default_large_cactus_seedling.png", + wield_image = "default_large_cactus_seedling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "fixed", + fixed = { + -5 / 16, -0.5, -5 / 16, + 5 / 16, 0.5, 5 / 16 + } + }, + groups = {choppy = 3, dig_immediate = 3, attached_node = 1}, + sounds = default.node_sound_wood_defaults(), + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:large_cactus_seedling", + {x = -2, y = -1, z = -2}, + {x = 2, y = 5, z = 2}, + 4) + + return itemstack + end, + + on_construct = function(pos) + -- Normal cactus farming adds 1 cactus node by ABM, + -- interval 12s, chance 83. + -- Consider starting with 5 cactus nodes. We make sure that growing a + -- large cactus is not a faster way to produce new cactus nodes. + -- Confirmed by experiment, when farming 5 cacti, on average 1 new + -- cactus node is added on average every + -- 83 / 5 = 16.6 intervals = 16.6 * 12 = 199.2s. + -- Large cactus contains on average 14 cactus nodes. + -- 14 * 199.2 = 2788.8s. + -- Set random range to average to 2789s. + minetest.get_node_timer(pos):start(math.random(1859, 3719)) + end, + + on_timer = function(pos) + local node_under = minetest.get_node_or_nil( + {x = pos.x, y = pos.y - 1, z = pos.z}) + if not node_under then + -- Node under not yet loaded, try later + minetest.get_node_timer(pos):start(300) + return + end + + if minetest.get_item_group(node_under.name, "sand") == 0 then + -- Seedling dies + minetest.remove_node(pos) + return + end + + local light_level = minetest.get_node_light(pos) + if not light_level or light_level < 13 then + -- Too dark for growth, try later in case it's night + minetest.get_node_timer(pos):start(300) + return + end + + minetest.log("action", "A large cactus seedling grows into a large" .. + "cactus at ".. minetest.pos_to_string(pos)) + default.grow_large_cactus(pos) + end, +}) + +minetest.register_node("default:papyrus", { + description = S("Papyrus"), + drawtype = "plantlike", + tiles = {"default_papyrus.png"}, + inventory_image = "default_papyrus.png", + wield_image = "default_papyrus.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 0.5, 6 / 16}, + }, + groups = {snappy = 3, flammable = 2}, + sounds = default.node_sound_leaves_defaults(), + + after_dig_node = function(pos, node, metadata, digger) + default.dig_up(pos, node, digger) + end, +}) + +minetest.register_node("default:dry_shrub", { + description = S("Dry Shrub"), + drawtype = "plantlike", + waving = 1, + tiles = {"default_dry_shrub.png"}, + inventory_image = "default_dry_shrub.png", + wield_image = "default_dry_shrub.png", + paramtype = "light", + paramtype2 = "meshoptions", + place_param2 = 4, + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flammable = 3, attached_node = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 4 / 16, 6 / 16}, + }, +}) + +minetest.register_node("default:junglegrass", { + description = S("Jungle Grass"), + drawtype = "plantlike", + waving = 1, + visual_scale = 1.69, + tiles = {"default_junglegrass.png"}, + inventory_image = "default_junglegrass.png", + wield_image = "default_junglegrass.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flora = 1, attached_node = 1, grass = 1, junglegrass = 1, flammable = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 0.5, 6 / 16}, + }, +}) + + +minetest.register_node("default:grass_1", { + description = S("Grass"), + drawtype = "plantlike", + waving = 1, + tiles = {"default_grass_1.png"}, + -- Use texture of a taller grass stage in inventory + inventory_image = "default_grass_3.png", + wield_image = "default_grass_3.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flora = 1, attached_node = 1, grass = 1, + normal_grass = 1, flammable = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -5 / 16, 6 / 16}, + }, + + on_place = function(itemstack, placer, pointed_thing) + -- place a random grass node + local stack = ItemStack("default:grass_" .. math.random(1,5)) + local ret = minetest.item_place(stack, placer, pointed_thing) + return ItemStack("default:grass_1 " .. + itemstack:get_count() - (1 - ret:get_count())) + end, +}) + +for i = 2, 5 do + minetest.register_node("default:grass_" .. i, { + description = S("Grass"), + drawtype = "plantlike", + waving = 1, + tiles = {"default_grass_" .. i .. ".png"}, + inventory_image = "default_grass_" .. i .. ".png", + wield_image = "default_grass_" .. i .. ".png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "default:grass_1", + groups = {snappy = 3, flora = 1, attached_node = 1, + not_in_creative_inventory = 1, grass = 1, + normal_grass = 1, flammable = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -3 / 16, 6 / 16}, + }, + }) +end + + +minetest.register_node("default:dry_grass_1", { + description = S("Savanna Grass"), + drawtype = "plantlike", + waving = 1, + tiles = {"default_dry_grass_1.png"}, + inventory_image = "default_dry_grass_3.png", + wield_image = "default_dry_grass_3.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flammable = 3, flora = 1, + attached_node = 1, grass = 1, dry_grass = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -3 / 16, 6 / 16}, + }, + + on_place = function(itemstack, placer, pointed_thing) + -- place a random dry grass node + local stack = ItemStack("default:dry_grass_" .. math.random(1, 5)) + local ret = minetest.item_place(stack, placer, pointed_thing) + return ItemStack("default:dry_grass_1 " .. + itemstack:get_count() - (1 - ret:get_count())) + end, +}) + +for i = 2, 5 do + minetest.register_node("default:dry_grass_" .. i, { + description = S("Savanna Grass"), + drawtype = "plantlike", + waving = 1, + tiles = {"default_dry_grass_" .. i .. ".png"}, + inventory_image = "default_dry_grass_" .. i .. ".png", + wield_image = "default_dry_grass_" .. i .. ".png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flammable = 3, flora = 1, attached_node = 1, + not_in_creative_inventory = 1, grass = 1, dry_grass = 1}, + drop = "default:dry_grass_1", + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -1 / 16, 6 / 16}, + }, + }) +end + + +minetest.register_node("default:fern_1", { + description = S("Fern"), + drawtype = "plantlike", + waving = 1, + tiles = {"default_fern_1.png"}, + inventory_image = "default_fern_1.png", + wield_image = "default_fern_1.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flammable = 3, flora = 1, grass = 1, + fern = 1, attached_node = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -0.25, 6 / 16}, + }, + + on_place = function(itemstack, placer, pointed_thing) + -- place a random fern node + local stack = ItemStack("default:fern_" .. math.random(1, 3)) + local ret = minetest.item_place(stack, placer, pointed_thing) + return ItemStack("default:fern_1 " .. + itemstack:get_count() - (1 - ret:get_count())) + end, +}) + +for i = 2, 3 do + minetest.register_node("default:fern_" .. i, { + description = S("Fern"), + drawtype = "plantlike", + waving = 1, + visual_scale = 2, + tiles = {"default_fern_" .. i .. ".png"}, + inventory_image = "default_fern_" .. i .. ".png", + wield_image = "default_fern_" .. i .. ".png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flammable = 3, flora = 1, attached_node = 1, + grass = 1, fern = 1, not_in_creative_inventory = 1}, + drop = "default:fern_1", + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -0.25, 6 / 16}, + }, + }) +end + + +minetest.register_node("default:marram_grass_1", { + description = S("Marram Grass"), + drawtype = "plantlike", + waving = 1, + tiles = {"default_marram_grass_1.png"}, + inventory_image = "default_marram_grass_1.png", + wield_image = "default_marram_grass_1.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flammable = 3, flora = 1, grass = 1, marram_grass = 1, + attached_node = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -0.25, 6 / 16}, + }, + + on_place = function(itemstack, placer, pointed_thing) + -- place a random marram grass node + local stack = ItemStack("default:marram_grass_" .. math.random(1, 3)) + local ret = minetest.item_place(stack, placer, pointed_thing) + return ItemStack("default:marram_grass_1 " .. + itemstack:get_count() - (1 - ret:get_count())) + end, +}) + +for i = 2, 3 do + minetest.register_node("default:marram_grass_" .. i, { + description = S("Marram Grass"), + drawtype = "plantlike", + waving = 1, + tiles = {"default_marram_grass_" .. i .. ".png"}, + inventory_image = "default_marram_grass_" .. i .. ".png", + wield_image = "default_marram_grass_" .. i .. ".png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flammable = 3, flora = 1, attached_node = 1, + grass = 1, marram_grass = 1, not_in_creative_inventory = 1}, + drop = "default:marram_grass_1", + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -0.25, 6 / 16}, + }, + }) +end + + +minetest.register_node("default:bush_stem", { + description = S("Bush Stem"), + drawtype = "plantlike", + visual_scale = 1.41, + tiles = {"default_bush_stem.png"}, + inventory_image = "default_bush_stem.png", + wield_image = "default_bush_stem.png", + paramtype = "light", + sunlight_propagates = true, + groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + selection_box = { + type = "fixed", + fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 0.5, 7 / 16}, + }, +}) + +minetest.register_node("default:bush_leaves", { + description = S("Bush Leaves"), + drawtype = "allfaces_optional", + tiles = {"default_leaves_simple.png"}, + paramtype = "light", + groups = {snappy = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"default:bush_sapling"}, rarity = 5}, + {items = {"default:bush_leaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + + after_place_node = after_place_leaves, +}) + +minetest.register_node("default:bush_sapling", { + description = S("Bush Sapling"), + drawtype = "plantlike", + tiles = {"default_bush_sapling.png"}, + inventory_image = "default_bush_sapling.png", + wield_image = "default_bush_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = grow_sapling, + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 2 / 16, 4 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:bush_sapling", + -- minp, maxp to be checked, relative to sapling pos + {x = -1, y = 0, z = -1}, + {x = 1, y = 1, z = 1}, + -- maximum interval of interior volume check + 2) + + return itemstack + end, +}) + +minetest.register_node("default:blueberry_bush_leaves_with_berries", { + description = S("Blueberry Bush Leaves with Berries"), + drawtype = "allfaces_optional", + tiles = {"default_blueberry_bush_leaves.png^default_blueberry_overlay.png"}, + paramtype = "light", + groups = {snappy = 3, flammable = 2, leaves = 1, dig_immediate = 3}, + drop = "default:blueberries", + sounds = default.node_sound_leaves_defaults(), + node_dig_prediction = "default:blueberry_bush_leaves", + + after_dig_node = function(pos, oldnode, oldmetadata, digger) + minetest.set_node(pos, {name = "default:blueberry_bush_leaves"}) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, +}) + +minetest.register_node("default:blueberry_bush_leaves", { + description = S("Blueberry Bush Leaves"), + drawtype = "allfaces_optional", + tiles = {"default_blueberry_bush_leaves.png"}, + paramtype = "light", + groups = {snappy = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"default:blueberry_bush_sapling"}, rarity = 5}, + {items = {"default:blueberry_bush_leaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + + on_timer = function(pos, elapsed) + if minetest.get_node_light(pos) < 11 then + minetest.get_node_timer(pos):start(200) + else + minetest.set_node(pos, {name = "default:blueberry_bush_leaves_with_berries"}) + end + end, + + after_place_node = after_place_leaves, +}) + +minetest.register_node("default:blueberry_bush_sapling", { + description = S("Blueberry Bush Sapling"), + drawtype = "plantlike", + tiles = {"default_blueberry_bush_sapling.png"}, + inventory_image = "default_blueberry_bush_sapling.png", + wield_image = "default_blueberry_bush_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = grow_sapling, + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 2 / 16, 4 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:blueberry_bush_sapling", + -- minp, maxp to be checked, relative to sapling pos + {x = -1, y = 0, z = -1}, + {x = 1, y = 1, z = 1}, + -- maximum interval of interior volume check + 2) + + return itemstack + end, +}) + +minetest.register_node("default:acacia_bush_stem", { + description = S("Acacia Bush Stem"), + drawtype = "plantlike", + visual_scale = 1.41, + tiles = {"default_acacia_bush_stem.png"}, + inventory_image = "default_acacia_bush_stem.png", + wield_image = "default_acacia_bush_stem.png", + paramtype = "light", + sunlight_propagates = true, + groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + selection_box = { + type = "fixed", + fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 0.5, 7 / 16}, + }, +}) + +minetest.register_node("default:acacia_bush_leaves", { + description = S("Acacia Bush Leaves"), + drawtype = "allfaces_optional", + tiles = {"default_acacia_leaves_simple.png"}, + paramtype = "light", + groups = {snappy = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"default:acacia_bush_sapling"}, rarity = 5}, + {items = {"default:acacia_bush_leaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + + after_place_node = after_place_leaves, +}) + +minetest.register_node("default:acacia_bush_sapling", { + description = S("Acacia Bush Sapling"), + drawtype = "plantlike", + tiles = {"default_acacia_bush_sapling.png"}, + inventory_image = "default_acacia_bush_sapling.png", + wield_image = "default_acacia_bush_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = grow_sapling, + selection_box = { + type = "fixed", + fixed = {-3 / 16, -0.5, -3 / 16, 3 / 16, 2 / 16, 3 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:acacia_bush_sapling", + -- minp, maxp to be checked, relative to sapling pos + {x = -1, y = 0, z = -1}, + {x = 1, y = 1, z = 1}, + -- maximum interval of interior volume check + 2) + + return itemstack + end, +}) + +minetest.register_node("default:pine_bush_stem", { + description = S("Pine Bush Stem"), + drawtype = "plantlike", + visual_scale = 1.41, + tiles = {"default_pine_bush_stem.png"}, + inventory_image = "default_pine_bush_stem.png", + wield_image = "default_pine_bush_stem.png", + paramtype = "light", + sunlight_propagates = true, + groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + selection_box = { + type = "fixed", + fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 0.5, 7 / 16}, + }, +}) + +minetest.register_node("default:pine_bush_needles", { + description = S("Pine Bush Needles"), + drawtype = "allfaces_optional", + tiles = {"default_pine_needles.png"}, + paramtype = "light", + groups = {snappy = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"default:pine_bush_sapling"}, rarity = 5}, + {items = {"default:pine_bush_needles"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + + after_place_node = after_place_leaves, +}) + +minetest.register_node("default:pine_bush_sapling", { + description = S("Pine Bush Sapling"), + drawtype = "plantlike", + tiles = {"default_pine_bush_sapling.png"}, + inventory_image = "default_pine_bush_sapling.png", + wield_image = "default_pine_bush_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = grow_sapling, + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 2 / 16, 4 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:pine_bush_sapling", + -- minp, maxp to be checked, relative to sapling pos + {x = -1, y = 0, z = -1}, + {x = 1, y = 1, z = 1}, + -- maximum interval of interior volume check + 2) + + return itemstack + end, +}) + + +minetest.register_node("default:sand_with_kelp", { + description = S("Kelp"), + drawtype = "plantlike_rooted", + waving = 1, + tiles = {"default_sand.png"}, + special_tiles = {{name = "default_kelp.png", tileable_vertical = true}}, + inventory_image = "default_kelp.png", + wield_image = "default_kelp.png", + paramtype = "light", + paramtype2 = "leveled", + groups = {snappy = 3}, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + {-2/16, 0.5, -2/16, 2/16, 3.5, 2/16}, + }, + }, + node_dig_prediction = "default:sand", + node_placement_prediction = "", + sounds = default.node_sound_sand_defaults({ + dig = {name = "default_dig_snappy", gain = 0.2}, + dug = {name = "default_grass_footstep", gain = 0.25}, + }), + + on_place = function(itemstack, placer, pointed_thing) + -- Call on_rightclick if the pointed node defines it + if pointed_thing.type == "node" and placer and + not placer:get_player_control().sneak then + local node_ptu = minetest.get_node(pointed_thing.under) + local def_ptu = minetest.registered_nodes[node_ptu.name] + if def_ptu and def_ptu.on_rightclick then + return def_ptu.on_rightclick(pointed_thing.under, node_ptu, placer, + itemstack, pointed_thing) + end + end + + local pos = pointed_thing.under + if minetest.get_node(pos).name ~= "default:sand" then + return itemstack + end + + local height = math.random(4, 6) + local pos_top = {x = pos.x, y = pos.y + height, z = pos.z} + local node_top = minetest.get_node(pos_top) + local def_top = minetest.registered_nodes[node_top.name] + local player_name = placer:get_player_name() + + if def_top and def_top.liquidtype == "source" and + minetest.get_item_group(node_top.name, "water") > 0 then + if not minetest.is_protected(pos, player_name) and + not minetest.is_protected(pos_top, player_name) then + minetest.set_node(pos, {name = "default:sand_with_kelp", + param2 = height * 16}) + if not minetest.is_creative_enabled(player_name) then + itemstack:take_item() + end + else + minetest.chat_send_player(player_name, "Node is protected") + minetest.record_protection_violation(pos, player_name) + end + end + + return itemstack + end, + + after_destruct = function(pos, oldnode) + minetest.set_node(pos, {name = "default:sand"}) + end +}) + + +-- +-- Corals +-- + +local function coral_on_place(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" or not placer then + return itemstack + end + + local player_name = placer:get_player_name() + local pos_under = pointed_thing.under + local pos_above = pointed_thing.above + local node_under = minetest.get_node(pos_under) + local def_under = minetest.registered_nodes[node_under.name] + + if def_under and def_under.on_rightclick and not placer:get_player_control().sneak then + return def_under.on_rightclick(pos_under, node_under, + placer, itemstack, pointed_thing) or itemstack + end + + if node_under.name ~= "default:coral_skeleton" or + minetest.get_node(pos_above).name ~= "default:water_source" then + return itemstack + end + + if minetest.is_protected(pos_under, player_name) or + minetest.is_protected(pos_above, player_name) then + default.log_player_action(placer, + "tried to place", itemstack:get_name(), + "at protected position", pos_under) + minetest.record_protection_violation(pos_under, player_name) + return itemstack + end + + node_under.name = itemstack:get_name() + minetest.set_node(pos_under, node_under) + if not minetest.is_creative_enabled(player_name) then + itemstack:take_item() + end + + return itemstack +end + +minetest.register_node("default:coral_green", { + description = S("Green Coral"), + drawtype = "plantlike_rooted", + waving = 1, + paramtype = "light", + tiles = {"default_coral_skeleton.png"}, + special_tiles = {{name = "default_coral_green.png", tileable_vertical = true}}, + inventory_image = "default_coral_green.png", + wield_image = "default_coral_green.png", + groups = {snappy = 3}, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + {-4/16, 0.5, -4/16, 4/16, 1.5, 4/16}, + }, + }, + node_dig_prediction = "default:coral_skeleton", + node_placement_prediction = "", + sounds = default.node_sound_stone_defaults({ + dig = {name = "default_dig_snappy", gain = 0.2}, + dug = {name = "default_grass_footstep", gain = 0.25}, + }), + + on_place = coral_on_place, + + after_destruct = function(pos, oldnode) + minetest.set_node(pos, {name = "default:coral_skeleton"}) + end, +}) + +minetest.register_node("default:coral_pink", { + description = S("Pink Coral"), + drawtype = "plantlike_rooted", + waving = 1, + paramtype = "light", + tiles = {"default_coral_skeleton.png"}, + special_tiles = {{name = "default_coral_pink.png", tileable_vertical = true}}, + inventory_image = "default_coral_pink.png", + wield_image = "default_coral_pink.png", + groups = {snappy = 3}, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + {-4/16, 0.5, -4/16, 4/16, 1.5, 4/16}, + }, + }, + node_dig_prediction = "default:coral_skeleton", + node_placement_prediction = "", + sounds = default.node_sound_stone_defaults({ + dig = {name = "default_dig_snappy", gain = 0.2}, + dug = {name = "default_grass_footstep", gain = 0.25}, + }), + + on_place = coral_on_place, + + after_destruct = function(pos, oldnode) + minetest.set_node(pos, {name = "default:coral_skeleton"}) + end, +}) + +minetest.register_node("default:coral_cyan", { + description = S("Cyan Coral"), + drawtype = "plantlike_rooted", + waving = 1, + paramtype = "light", + tiles = {"default_coral_skeleton.png"}, + special_tiles = {{name = "default_coral_cyan.png", tileable_vertical = true}}, + inventory_image = "default_coral_cyan.png", + wield_image = "default_coral_cyan.png", + groups = {snappy = 3}, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + {-4/16, 0.5, -4/16, 4/16, 1.5, 4/16}, + }, + }, + node_dig_prediction = "default:coral_skeleton", + node_placement_prediction = "", + sounds = default.node_sound_stone_defaults({ + dig = {name = "default_dig_snappy", gain = 0.2}, + dug = {name = "default_grass_footstep", gain = 0.25}, + }), + + on_place = coral_on_place, + + after_destruct = function(pos, oldnode) + minetest.set_node(pos, {name = "default:coral_skeleton"}) + end, +}) + +minetest.register_node("default:coral_brown", { + description = S("Brown Coral"), + tiles = {"default_coral_brown.png"}, + groups = {cracky = 3}, + drop = "default:coral_skeleton", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:coral_orange", { + description = S("Orange Coral"), + tiles = {"default_coral_orange.png"}, + groups = {cracky = 3}, + drop = "default:coral_skeleton", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:coral_skeleton", { + description = S("Coral Skeleton"), + tiles = {"default_coral_skeleton.png"}, + groups = {cracky = 3}, + sounds = default.node_sound_stone_defaults(), +}) + + +-- +-- Liquids +-- + +minetest.register_node("default:water_source", { + description = S("Water Source"), + drawtype = "liquid", + waving = 3, + tiles = { + { + name = "default_water_source_animated.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 2.0, + }, + }, + { + name = "default_water_source_animated.png", + backface_culling = true, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 2.0, + }, + }, + }, + use_texture_alpha = "blend", + paramtype = "light", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drop = "", + drowning = 1, + liquidtype = "source", + liquid_alternative_flowing = "default:water_flowing", + liquid_alternative_source = "default:water_source", + liquid_viscosity = 1, + post_effect_color = {a = 103, r = 30, g = 60, b = 90}, + groups = {water = 3, liquid = 3, cools_lava = 1}, + sounds = default.node_sound_water_defaults(), +}) + +minetest.register_node("default:water_flowing", { + description = S("Flowing Water"), + drawtype = "flowingliquid", + waving = 3, + tiles = {"default_water.png"}, + special_tiles = { + { + name = "default_water_flowing_animated.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 0.5, + }, + }, + { + name = "default_water_flowing_animated.png", + backface_culling = true, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 0.5, + }, + }, + }, + use_texture_alpha = "blend", + paramtype = "light", + paramtype2 = "flowingliquid", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drop = "", + drowning = 1, + liquidtype = "flowing", + liquid_alternative_flowing = "default:water_flowing", + liquid_alternative_source = "default:water_source", + liquid_viscosity = 1, + post_effect_color = {a = 103, r = 30, g = 60, b = 90}, + groups = {water = 3, liquid = 3, not_in_creative_inventory = 1, + cools_lava = 1}, + sounds = default.node_sound_water_defaults(), +}) + + +minetest.register_node("default:river_water_source", { + description = S("River Water Source"), + drawtype = "liquid", + tiles = { + { + name = "default_river_water_source_animated.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 2.0, + }, + }, + { + name = "default_river_water_source_animated.png", + backface_culling = true, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 2.0, + }, + }, + }, + use_texture_alpha = "blend", + paramtype = "light", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drop = "", + drowning = 1, + liquidtype = "source", + liquid_alternative_flowing = "default:river_water_flowing", + liquid_alternative_source = "default:river_water_source", + liquid_viscosity = 1, + -- Not renewable to avoid horizontal spread of water sources in sloping + -- rivers that can cause water to overflow riverbanks and cause floods. + -- River water source is instead made renewable by the 'force renew' + -- option used in the 'bucket' mod by the river water bucket. + liquid_renewable = false, + liquid_range = 2, + post_effect_color = {a = 103, r = 30, g = 76, b = 90}, + groups = {water = 3, liquid = 3, cools_lava = 1}, + sounds = default.node_sound_water_defaults(), +}) + +minetest.register_node("default:river_water_flowing", { + description = S("Flowing River Water"), + drawtype = "flowingliquid", + tiles = {"default_river_water.png"}, + special_tiles = { + { + name = "default_river_water_flowing_animated.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 0.5, + }, + }, + { + name = "default_river_water_flowing_animated.png", + backface_culling = true, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 0.5, + }, + }, + }, + use_texture_alpha = "blend", + paramtype = "light", + paramtype2 = "flowingliquid", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drop = "", + drowning = 1, + liquidtype = "flowing", + liquid_alternative_flowing = "default:river_water_flowing", + liquid_alternative_source = "default:river_water_source", + liquid_viscosity = 1, + liquid_renewable = false, + liquid_range = 2, + post_effect_color = {a = 103, r = 30, g = 76, b = 90}, + groups = {water = 3, liquid = 3, not_in_creative_inventory = 1, + cools_lava = 1}, + sounds = default.node_sound_water_defaults(), +}) + + +minetest.register_node("default:lava_source", { + description = S("Lava Source"), + drawtype = "liquid", + tiles = { + { + name = "default_lava_source_animated.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 3.0, + }, + }, + { + name = "default_lava_source_animated.png", + backface_culling = true, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 3.0, + }, + }, + }, + paramtype = "light", + light_source = default.LIGHT_MAX - 1, + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drop = "", + drowning = 1, + liquidtype = "source", + liquid_alternative_flowing = "default:lava_flowing", + liquid_alternative_source = "default:lava_source", + liquid_viscosity = 7, + liquid_renewable = false, + damage_per_second = 4 * 2, + post_effect_color = {a = 191, r = 255, g = 64, b = 0}, + groups = {lava = 3, liquid = 2, igniter = 1}, +}) + +minetest.register_node("default:lava_flowing", { + description = S("Flowing Lava"), + drawtype = "flowingliquid", + tiles = {"default_lava.png"}, + special_tiles = { + { + name = "default_lava_flowing_animated.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 3.3, + }, + }, + { + name = "default_lava_flowing_animated.png", + backface_culling = true, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 3.3, + }, + }, + }, + paramtype = "light", + paramtype2 = "flowingliquid", + light_source = default.LIGHT_MAX - 1, + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drop = "", + drowning = 1, + liquidtype = "flowing", + liquid_alternative_flowing = "default:lava_flowing", + liquid_alternative_source = "default:lava_source", + liquid_viscosity = 7, + liquid_renewable = false, + damage_per_second = 4 * 2, + post_effect_color = {a = 191, r = 255, g = 64, b = 0}, + groups = {lava = 3, liquid = 2, igniter = 1, + not_in_creative_inventory = 1}, +}) + +-- +-- Tools / "Advanced" crafting / Non-"natural" +-- + +local bookshelf_formspec = + "size[8,7;]" .. + "list[context;books;0,0.3;8,2;]" .. + "list[current_player;main;0,2.85;8,1;]" .. + "list[current_player;main;0,4.08;8,3;8]" .. + "listring[context;books]" .. + "listring[current_player;main]" .. + default.get_hotbar_bg(0,2.85) + +local function update_bookshelf(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local invlist = inv:get_list("books") + + local formspec = bookshelf_formspec + -- Inventory slots overlay + local bx, by = 0, 0.3 + local n_written, n_empty = 0, 0 + for i = 1, 16 do + if i == 9 then + bx = 0 + by = by + 1 + end + local stack = invlist[i] + if stack:is_empty() then + formspec = formspec .. + "image[" .. bx .. "," .. by .. ";1,1;default_bookshelf_slot.png]" + else + local metatable = stack:get_meta():to_table() or {} + if metatable.fields and metatable.fields.text then + n_written = n_written + stack:get_count() + else + n_empty = n_empty + stack:get_count() + end + end + bx = bx + 1 + end + meta:set_string("formspec", formspec) + if n_written + n_empty == 0 then + meta:set_string("infotext", S("Empty Bookshelf")) + else + meta:set_string("infotext", S("Bookshelf (@1 written, @2 empty books)", n_written, n_empty)) + end +end + +local default_bookshelf_def = { + description = S("Bookshelf"), + tiles = {"default_wood.png", "default_wood.png", "default_wood.png", + "default_wood.png", "default_bookshelf.png", "default_bookshelf.png"}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}, + sounds = default.node_sound_wood_defaults(), + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + inv:set_size("books", 8 * 2) + update_bookshelf(pos) + end, + can_dig = function(pos,player) + local inv = minetest.get_meta(pos):get_inventory() + return inv:is_empty("books") + end, + allow_metadata_inventory_put = function(pos, listname, index, stack) + if minetest.get_item_group(stack:get_name(), "book") ~= 0 then + return stack:get_count() + end + return 0 + end, + on_blast = function(pos) + local drops = {} + default.get_inventory_drops(pos, "books", drops) + drops[#drops+1] = "default:bookshelf" + minetest.remove_node(pos) + return drops + end, +} +default.set_inventory_action_loggers(default_bookshelf_def, "bookshelf") +minetest.register_node("default:bookshelf", default_bookshelf_def) + +local function register_sign(material, desc, def) + minetest.register_node("default:sign_wall_" .. material, { + description = desc, + drawtype = "nodebox", + tiles = {"default_sign_wall_" .. material .. ".png"}, + inventory_image = "default_sign_" .. material .. ".png", + wield_image = "default_sign_" .. material .. ".png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + is_ground_content = false, + walkable = false, + use_texture_alpha = "opaque", + node_box = { + type = "wallmounted", + wall_top = {-0.4375, 0.4375, -0.3125, 0.4375, 0.5, 0.3125}, + wall_bottom = {-0.4375, -0.5, -0.3125, 0.4375, -0.4375, 0.3125}, + wall_side = {-0.5, -0.3125, -0.4375, -0.4375, 0.3125, 0.4375}, + }, + groups = def.groups, + legacy_wallmounted = true, + sounds = def.sounds, + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[text;;${text}]") + end, + on_receive_fields = function(pos, formname, fields, sender) + local player_name = sender:get_player_name() + if minetest.is_protected(pos, player_name) then + minetest.record_protection_violation(pos, player_name) + return + end + local text = fields.text + if not text then + return + end + if string.len(text) > 512 then + minetest.chat_send_player(player_name, S("Text too long")) + return + end + default.log_player_action(sender, "wrote \"" .. text .. + "\" to the sign at", pos) + local meta = minetest.get_meta(pos) + meta:set_string("text", text) + + if #text > 0 then + meta:set_string("infotext", S('"@1"', text)) + else + meta:set_string("infotext", '') + end + end, + }) +end + +register_sign("wood", S("Wooden Sign"), { + sounds = default.node_sound_wood_defaults(), + groups = {choppy = 2, attached_node = 1, flammable = 2, oddly_breakable_by_hand = 3} +}) + +register_sign("steel", S("Steel Sign"), { + sounds = default.node_sound_metal_defaults(), + groups = {cracky = 2, attached_node = 1} +}) + +minetest.register_node("default:ladder_wood", { + description = S("Wooden Ladder"), + drawtype = "signlike", + tiles = {"default_ladder_wood.png"}, + inventory_image = "default_ladder_wood.png", + wield_image = "default_ladder_wood.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + climbable = true, + is_ground_content = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {choppy = 2, oddly_breakable_by_hand = 3, flammable = 2}, + legacy_wallmounted = true, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("default:ladder_steel", { + description = S("Steel Ladder"), + drawtype = "signlike", + tiles = {"default_ladder_steel.png"}, + inventory_image = "default_ladder_steel.png", + wield_image = "default_ladder_steel.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + climbable = true, + is_ground_content = false, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {cracky = 2}, + sounds = default.node_sound_metal_defaults(), +}) + +default.register_fence("default:fence_wood", { + description = S("Apple Wood Fence"), + texture = "default_fence_wood.png", + inventory_image = "default_fence_overlay.png^default_wood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_overlay.png^default_wood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + material = "default:wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence("default:fence_acacia_wood", { + description = S("Acacia Wood Fence"), + texture = "default_fence_acacia_wood.png", + inventory_image = "default_fence_overlay.png^default_acacia_wood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_overlay.png^default_acacia_wood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + material = "default:acacia_wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence("default:fence_junglewood", { + description = S("Jungle Wood Fence"), + texture = "default_fence_junglewood.png", + inventory_image = "default_fence_overlay.png^default_junglewood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_overlay.png^default_junglewood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + material = "default:junglewood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence("default:fence_pine_wood", { + description = S("Pine Wood Fence"), + texture = "default_fence_pine_wood.png", + inventory_image = "default_fence_overlay.png^default_pine_wood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_overlay.png^default_pine_wood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + material = "default:pine_wood", + groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence("default:fence_aspen_wood", { + description = S("Aspen Wood Fence"), + texture = "default_fence_aspen_wood.png", + inventory_image = "default_fence_overlay.png^default_aspen_wood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_overlay.png^default_aspen_wood.png^" .. + "default_fence_overlay.png^[makealpha:255,126,126", + material = "default:aspen_wood", + groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence_rail("default:fence_rail_wood", { + description = S("Apple Wood Fence Rail"), + texture = "default_fence_rail_wood.png", + inventory_image = "default_fence_rail_overlay.png^default_wood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_rail_overlay.png^default_wood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + material = "default:wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence_rail("default:fence_rail_acacia_wood", { + description = S("Acacia Wood Fence Rail"), + texture = "default_fence_rail_acacia_wood.png", + inventory_image = "default_fence_rail_overlay.png^default_acacia_wood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_rail_overlay.png^default_acacia_wood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + material = "default:acacia_wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence_rail("default:fence_rail_junglewood", { + description = S("Jungle Wood Fence Rail"), + texture = "default_fence_rail_junglewood.png", + inventory_image = "default_fence_rail_overlay.png^default_junglewood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_rail_overlay.png^default_junglewood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + material = "default:junglewood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence_rail("default:fence_rail_pine_wood", { + description = S("Pine Wood Fence Rail"), + texture = "default_fence_rail_pine_wood.png", + inventory_image = "default_fence_rail_overlay.png^default_pine_wood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_rail_overlay.png^default_pine_wood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + material = "default:pine_wood", + groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence_rail("default:fence_rail_aspen_wood", { + description = S("Aspen Wood Fence Rail"), + texture = "default_fence_rail_aspen_wood.png", + inventory_image = "default_fence_rail_overlay.png^default_aspen_wood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + wield_image = "default_fence_rail_overlay.png^default_aspen_wood.png^" .. + "default_fence_rail_overlay.png^[makealpha:255,126,126", + material = "default:aspen_wood", + groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +minetest.register_node("default:glass", { + description = S("Glass"), + drawtype = "glasslike_framed_optional", + tiles = {"default_glass.png", "default_glass_detail.png"}, + use_texture_alpha = "clip", -- only needed for stairs API + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + groups = {cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_node("default:obsidian_glass", { + description = S("Obsidian Glass"), + drawtype = "glasslike_framed_optional", + tiles = {"default_obsidian_glass.png", "default_obsidian_glass_detail.png"}, + use_texture_alpha = "clip", -- only needed for stairs API + paramtype = "light", + is_ground_content = false, + sunlight_propagates = true, + sounds = default.node_sound_glass_defaults(), + groups = {cracky = 3}, +}) + + +minetest.register_node("default:brick", { + description = S("Brick Block"), + paramtype2 = "facedir", + place_param2 = 0, + tiles = { + "default_brick.png^[transformFX", + "default_brick.png", + }, + is_ground_content = false, + groups = {cracky = 3}, + sounds = default.node_sound_stone_defaults(), +}) + + +minetest.register_node("default:meselamp", { + description = S("Mese Lamp"), + drawtype = "glasslike", + tiles = {"default_meselamp.png"}, + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + groups = {cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_glass_defaults(), + light_source = default.LIGHT_MAX, +}) + +default.register_mesepost("default:mese_post_light", { + description = S("Apple Wood Mese Post Light"), + texture = "default_fence_wood.png", + material = "default:wood", +}) + +default.register_mesepost("default:mese_post_light_acacia_wood", { + description = S("Acacia Wood Mese Post Light"), + texture = "default_fence_acacia_wood.png", + material = "default:acacia_wood", +}) + +default.register_mesepost("default:mese_post_light_junglewood", { + description = S("Jungle Wood Mese Post Light"), + texture = "default_fence_junglewood.png", + material = "default:junglewood", +}) + +default.register_mesepost("default:mese_post_light_pine_wood", { + description = S("Pine Wood Mese Post Light"), + texture = "default_fence_pine_wood.png", + material = "default:pine_wood", +}) + +default.register_mesepost("default:mese_post_light_aspen_wood", { + description = S("Aspen Wood Mese Post Light"), + texture = "default_fence_aspen_wood.png", + material = "default:aspen_wood", +}) + +-- +-- Misc +-- + +minetest.register_node("default:cloud", { + description = S("Cloud"), + tiles = {"default_cloud.png"}, + is_ground_content = false, + sounds = default.node_sound_defaults(), + groups = {not_in_creative_inventory = 1}, +}) + +-- +-- register trees for leafdecay +-- + +if minetest.get_mapgen_setting("mg_name") == "v6" then + default.register_leafdecay({ + trunks = {"default:tree"}, + leaves = {"default:apple", "default:leaves"}, + radius = 2, + }) + + default.register_leafdecay({ + trunks = {"default:jungletree"}, + leaves = {"default:jungleleaves"}, + radius = 3, + }) +else + default.register_leafdecay({ + trunks = {"default:tree"}, + leaves = {"default:apple", "default:leaves"}, + radius = 3, + }) + + default.register_leafdecay({ + trunks = {"default:jungletree"}, + leaves = {"default:jungleleaves"}, + radius = 2, + }) +end + +default.register_leafdecay({ + trunks = {"default:pine_tree"}, + leaves = {"default:pine_needles"}, + radius = 3, +}) + +default.register_leafdecay({ + trunks = {"default:acacia_tree"}, + leaves = {"default:acacia_leaves"}, + radius = 2, +}) + +default.register_leafdecay({ + trunks = {"default:aspen_tree"}, + leaves = {"default:aspen_leaves"}, + radius = 3, +}) + +default.register_leafdecay({ + trunks = {"default:bush_stem"}, + leaves = {"default:bush_leaves"}, + radius = 1, +}) + +default.register_leafdecay({ + trunks = {"default:acacia_bush_stem"}, + leaves = {"default:acacia_bush_leaves"}, + radius = 1, +}) + +default.register_leafdecay({ + trunks = {"default:pine_bush_stem"}, + leaves = {"default:pine_bush_needles"}, + radius = 1, +}) diff --git a/mods/default/schematics/acacia_bush.mts b/mods/default/schematics/acacia_bush.mts new file mode 100644 index 00000000..3322e3b3 Binary files /dev/null and b/mods/default/schematics/acacia_bush.mts differ diff --git a/mods/default/schematics/acacia_log.mts b/mods/default/schematics/acacia_log.mts new file mode 100644 index 00000000..aff3bd6a Binary files /dev/null and b/mods/default/schematics/acacia_log.mts differ diff --git a/mods/default/schematics/acacia_tree.mts b/mods/default/schematics/acacia_tree.mts new file mode 100644 index 00000000..9b234981 Binary files /dev/null and b/mods/default/schematics/acacia_tree.mts differ diff --git a/mods/default/schematics/acacia_tree_from_sapling.mts b/mods/default/schematics/acacia_tree_from_sapling.mts new file mode 100644 index 00000000..c32a995c Binary files /dev/null and b/mods/default/schematics/acacia_tree_from_sapling.mts differ diff --git a/mods/default/schematics/apple_log.mts b/mods/default/schematics/apple_log.mts new file mode 100644 index 00000000..92fb900a Binary files /dev/null and b/mods/default/schematics/apple_log.mts differ diff --git a/mods/default/schematics/apple_tree.mts b/mods/default/schematics/apple_tree.mts new file mode 100644 index 00000000..d56cd54b Binary files /dev/null and b/mods/default/schematics/apple_tree.mts differ diff --git a/mods/default/schematics/apple_tree_from_sapling.mts b/mods/default/schematics/apple_tree_from_sapling.mts new file mode 100644 index 00000000..23251003 Binary files /dev/null and b/mods/default/schematics/apple_tree_from_sapling.mts differ diff --git a/mods/default/schematics/aspen_log.mts b/mods/default/schematics/aspen_log.mts new file mode 100644 index 00000000..d0c723d7 Binary files /dev/null and b/mods/default/schematics/aspen_log.mts differ diff --git a/mods/default/schematics/aspen_tree.mts b/mods/default/schematics/aspen_tree.mts new file mode 100644 index 00000000..429a831c Binary files /dev/null and b/mods/default/schematics/aspen_tree.mts differ diff --git a/mods/default/schematics/aspen_tree_from_sapling.mts b/mods/default/schematics/aspen_tree_from_sapling.mts new file mode 100644 index 00000000..b7ab3ee6 Binary files /dev/null and b/mods/default/schematics/aspen_tree_from_sapling.mts differ diff --git a/mods/default/schematics/blueberry_bush.mts b/mods/default/schematics/blueberry_bush.mts new file mode 100644 index 00000000..cf4d8ef8 Binary files /dev/null and b/mods/default/schematics/blueberry_bush.mts differ diff --git a/mods/default/schematics/bush.mts b/mods/default/schematics/bush.mts new file mode 100644 index 00000000..d08cf5f5 Binary files /dev/null and b/mods/default/schematics/bush.mts differ diff --git a/mods/default/schematics/emergent_jungle_tree.mts b/mods/default/schematics/emergent_jungle_tree.mts new file mode 100644 index 00000000..b5264309 Binary files /dev/null and b/mods/default/schematics/emergent_jungle_tree.mts differ diff --git a/mods/default/schematics/emergent_jungle_tree_from_sapling.mts b/mods/default/schematics/emergent_jungle_tree_from_sapling.mts new file mode 100644 index 00000000..cb4e4e9e Binary files /dev/null and b/mods/default/schematics/emergent_jungle_tree_from_sapling.mts differ diff --git a/mods/default/schematics/jungle_log.mts b/mods/default/schematics/jungle_log.mts new file mode 100644 index 00000000..34dca436 Binary files /dev/null and b/mods/default/schematics/jungle_log.mts differ diff --git a/mods/default/schematics/jungle_tree.mts b/mods/default/schematics/jungle_tree.mts new file mode 100644 index 00000000..fe93c8c1 Binary files /dev/null and b/mods/default/schematics/jungle_tree.mts differ diff --git a/mods/default/schematics/jungle_tree_from_sapling.mts b/mods/default/schematics/jungle_tree_from_sapling.mts new file mode 100644 index 00000000..f32d312b Binary files /dev/null and b/mods/default/schematics/jungle_tree_from_sapling.mts differ diff --git a/mods/default/schematics/large_cactus.mts b/mods/default/schematics/large_cactus.mts new file mode 100644 index 00000000..cadcdccb Binary files /dev/null and b/mods/default/schematics/large_cactus.mts differ diff --git a/mods/default/schematics/papyrus_on_dirt.mts b/mods/default/schematics/papyrus_on_dirt.mts new file mode 100644 index 00000000..1333a7c4 Binary files /dev/null and b/mods/default/schematics/papyrus_on_dirt.mts differ diff --git a/mods/default/schematics/papyrus_on_dry_dirt.mts b/mods/default/schematics/papyrus_on_dry_dirt.mts new file mode 100644 index 00000000..36265802 Binary files /dev/null and b/mods/default/schematics/papyrus_on_dry_dirt.mts differ diff --git a/mods/default/schematics/pine_bush.mts b/mods/default/schematics/pine_bush.mts new file mode 100644 index 00000000..ca572a7d Binary files /dev/null and b/mods/default/schematics/pine_bush.mts differ diff --git a/mods/default/schematics/pine_log.mts b/mods/default/schematics/pine_log.mts new file mode 100644 index 00000000..d51a489f Binary files /dev/null and b/mods/default/schematics/pine_log.mts differ diff --git a/mods/default/schematics/pine_tree.mts b/mods/default/schematics/pine_tree.mts new file mode 100644 index 00000000..c80532ae Binary files /dev/null and b/mods/default/schematics/pine_tree.mts differ diff --git a/mods/default/schematics/pine_tree_from_sapling.mts b/mods/default/schematics/pine_tree_from_sapling.mts new file mode 100644 index 00000000..0800387c Binary files /dev/null and b/mods/default/schematics/pine_tree_from_sapling.mts differ diff --git a/mods/default/schematics/small_pine_tree.mts b/mods/default/schematics/small_pine_tree.mts new file mode 100644 index 00000000..b2832266 Binary files /dev/null and b/mods/default/schematics/small_pine_tree.mts differ diff --git a/mods/default/schematics/small_pine_tree_from_sapling.mts b/mods/default/schematics/small_pine_tree_from_sapling.mts new file mode 100644 index 00000000..a1b11703 Binary files /dev/null and b/mods/default/schematics/small_pine_tree_from_sapling.mts differ diff --git a/mods/default/schematics/snowy_pine_tree_from_sapling.mts b/mods/default/schematics/snowy_pine_tree_from_sapling.mts new file mode 100644 index 00000000..3d502a3e Binary files /dev/null and b/mods/default/schematics/snowy_pine_tree_from_sapling.mts differ diff --git a/mods/default/schematics/snowy_small_pine_tree_from_sapling.mts b/mods/default/schematics/snowy_small_pine_tree_from_sapling.mts new file mode 100644 index 00000000..d017c9e0 Binary files /dev/null and b/mods/default/schematics/snowy_small_pine_tree_from_sapling.mts differ diff --git a/mods/default/sounds/default_break_glass.1.ogg b/mods/default/sounds/default_break_glass.1.ogg new file mode 100644 index 00000000..b1ccc5fa Binary files /dev/null and b/mods/default/sounds/default_break_glass.1.ogg differ diff --git a/mods/default/sounds/default_break_glass.2.ogg b/mods/default/sounds/default_break_glass.2.ogg new file mode 100644 index 00000000..b6cc9e85 Binary files /dev/null and b/mods/default/sounds/default_break_glass.2.ogg differ diff --git a/mods/default/sounds/default_break_glass.3.ogg b/mods/default/sounds/default_break_glass.3.ogg new file mode 100644 index 00000000..ae6a6bfc Binary files /dev/null and b/mods/default/sounds/default_break_glass.3.ogg differ diff --git a/mods/default/sounds/default_chest_close.ogg b/mods/default/sounds/default_chest_close.ogg new file mode 100644 index 00000000..068d9002 Binary files /dev/null and b/mods/default/sounds/default_chest_close.ogg differ diff --git a/mods/default/sounds/default_chest_open.ogg b/mods/default/sounds/default_chest_open.ogg new file mode 100644 index 00000000..40b0b934 Binary files /dev/null and b/mods/default/sounds/default_chest_open.ogg differ diff --git a/mods/default/sounds/default_cool_lava.1.ogg b/mods/default/sounds/default_cool_lava.1.ogg new file mode 100644 index 00000000..42506ddf Binary files /dev/null and b/mods/default/sounds/default_cool_lava.1.ogg differ diff --git a/mods/default/sounds/default_cool_lava.2.ogg b/mods/default/sounds/default_cool_lava.2.ogg new file mode 100644 index 00000000..2747ab81 Binary files /dev/null and b/mods/default/sounds/default_cool_lava.2.ogg differ diff --git a/mods/default/sounds/default_cool_lava.3.ogg b/mods/default/sounds/default_cool_lava.3.ogg new file mode 100644 index 00000000..8baeac32 Binary files /dev/null and b/mods/default/sounds/default_cool_lava.3.ogg differ diff --git a/mods/default/sounds/default_dig_choppy.1.ogg b/mods/default/sounds/default_dig_choppy.1.ogg new file mode 100644 index 00000000..95fa6d4e Binary files /dev/null and b/mods/default/sounds/default_dig_choppy.1.ogg differ diff --git a/mods/default/sounds/default_dig_choppy.2.ogg b/mods/default/sounds/default_dig_choppy.2.ogg new file mode 100644 index 00000000..5d3a0444 Binary files /dev/null and b/mods/default/sounds/default_dig_choppy.2.ogg differ diff --git a/mods/default/sounds/default_dig_choppy.3.ogg b/mods/default/sounds/default_dig_choppy.3.ogg new file mode 100644 index 00000000..2bb0aceb Binary files /dev/null and b/mods/default/sounds/default_dig_choppy.3.ogg differ diff --git a/mods/default/sounds/default_dig_cracky.1.ogg b/mods/default/sounds/default_dig_cracky.1.ogg new file mode 100644 index 00000000..ffced27a Binary files /dev/null and b/mods/default/sounds/default_dig_cracky.1.ogg differ diff --git a/mods/default/sounds/default_dig_cracky.2.ogg b/mods/default/sounds/default_dig_cracky.2.ogg new file mode 100644 index 00000000..d9e80103 Binary files /dev/null and b/mods/default/sounds/default_dig_cracky.2.ogg differ diff --git a/mods/default/sounds/default_dig_cracky.3.ogg b/mods/default/sounds/default_dig_cracky.3.ogg new file mode 100644 index 00000000..7d19d408 Binary files /dev/null and b/mods/default/sounds/default_dig_cracky.3.ogg differ diff --git a/mods/default/sounds/default_dig_crumbly.ogg b/mods/default/sounds/default_dig_crumbly.ogg new file mode 100644 index 00000000..a0b2a1f9 Binary files /dev/null and b/mods/default/sounds/default_dig_crumbly.ogg differ diff --git a/mods/default/sounds/default_dig_dig_immediate.ogg b/mods/default/sounds/default_dig_dig_immediate.ogg new file mode 100644 index 00000000..e65d766e Binary files /dev/null and b/mods/default/sounds/default_dig_dig_immediate.ogg differ diff --git a/mods/default/sounds/default_dig_metal.ogg b/mods/default/sounds/default_dig_metal.ogg new file mode 100644 index 00000000..0b585097 Binary files /dev/null and b/mods/default/sounds/default_dig_metal.ogg differ diff --git a/mods/default/sounds/default_dig_oddly_breakable_by_hand.ogg b/mods/default/sounds/default_dig_oddly_breakable_by_hand.ogg new file mode 100644 index 00000000..ef4d7b15 Binary files /dev/null and b/mods/default/sounds/default_dig_oddly_breakable_by_hand.ogg differ diff --git a/mods/default/sounds/default_dig_snappy.ogg b/mods/default/sounds/default_dig_snappy.ogg new file mode 100644 index 00000000..3686fcdd Binary files /dev/null and b/mods/default/sounds/default_dig_snappy.ogg differ diff --git a/mods/default/sounds/default_dirt_footstep.1.ogg b/mods/default/sounds/default_dirt_footstep.1.ogg new file mode 100644 index 00000000..201aa3b2 Binary files /dev/null and b/mods/default/sounds/default_dirt_footstep.1.ogg differ diff --git a/mods/default/sounds/default_dirt_footstep.2.ogg b/mods/default/sounds/default_dirt_footstep.2.ogg new file mode 100644 index 00000000..2667dbc2 Binary files /dev/null and b/mods/default/sounds/default_dirt_footstep.2.ogg differ diff --git a/mods/default/sounds/default_dug_metal.1.ogg b/mods/default/sounds/default_dug_metal.1.ogg new file mode 100644 index 00000000..5d6cb5b1 Binary files /dev/null and b/mods/default/sounds/default_dug_metal.1.ogg differ diff --git a/mods/default/sounds/default_dug_metal.2.ogg b/mods/default/sounds/default_dug_metal.2.ogg new file mode 100644 index 00000000..63567fc0 Binary files /dev/null and b/mods/default/sounds/default_dug_metal.2.ogg differ diff --git a/mods/default/sounds/default_dug_node.1.ogg b/mods/default/sounds/default_dug_node.1.ogg new file mode 100644 index 00000000..c04975d4 Binary files /dev/null and b/mods/default/sounds/default_dug_node.1.ogg differ diff --git a/mods/default/sounds/default_dug_node.2.ogg b/mods/default/sounds/default_dug_node.2.ogg new file mode 100644 index 00000000..9f209268 Binary files /dev/null and b/mods/default/sounds/default_dug_node.2.ogg differ diff --git a/mods/default/sounds/default_furnace_active.ogg b/mods/default/sounds/default_furnace_active.ogg new file mode 100644 index 00000000..536edc24 Binary files /dev/null and b/mods/default/sounds/default_furnace_active.ogg differ diff --git a/mods/default/sounds/default_glass_footstep.ogg b/mods/default/sounds/default_glass_footstep.ogg new file mode 100644 index 00000000..191287a3 Binary files /dev/null and b/mods/default/sounds/default_glass_footstep.ogg differ diff --git a/mods/default/sounds/default_grass_footstep.1.ogg b/mods/default/sounds/default_grass_footstep.1.ogg new file mode 100644 index 00000000..a04cdb47 Binary files /dev/null and b/mods/default/sounds/default_grass_footstep.1.ogg differ diff --git a/mods/default/sounds/default_grass_footstep.2.ogg b/mods/default/sounds/default_grass_footstep.2.ogg new file mode 100644 index 00000000..d193068d Binary files /dev/null and b/mods/default/sounds/default_grass_footstep.2.ogg differ diff --git a/mods/default/sounds/default_grass_footstep.3.ogg b/mods/default/sounds/default_grass_footstep.3.ogg new file mode 100644 index 00000000..e1897ea3 Binary files /dev/null and b/mods/default/sounds/default_grass_footstep.3.ogg differ diff --git a/mods/default/sounds/default_gravel_dig.1.ogg b/mods/default/sounds/default_gravel_dig.1.ogg new file mode 100644 index 00000000..baf8fca7 Binary files /dev/null and b/mods/default/sounds/default_gravel_dig.1.ogg differ diff --git a/mods/default/sounds/default_gravel_dig.2.ogg b/mods/default/sounds/default_gravel_dig.2.ogg new file mode 100644 index 00000000..e0c0c50f Binary files /dev/null and b/mods/default/sounds/default_gravel_dig.2.ogg differ diff --git a/mods/default/sounds/default_gravel_dug.1.ogg b/mods/default/sounds/default_gravel_dug.1.ogg new file mode 100644 index 00000000..13034335 Binary files /dev/null and b/mods/default/sounds/default_gravel_dug.1.ogg differ diff --git a/mods/default/sounds/default_gravel_dug.2.ogg b/mods/default/sounds/default_gravel_dug.2.ogg new file mode 100644 index 00000000..ee5ed330 Binary files /dev/null and b/mods/default/sounds/default_gravel_dug.2.ogg differ diff --git a/mods/default/sounds/default_gravel_dug.3.ogg b/mods/default/sounds/default_gravel_dug.3.ogg new file mode 100644 index 00000000..add4c54b Binary files /dev/null and b/mods/default/sounds/default_gravel_dug.3.ogg differ diff --git a/mods/default/sounds/default_gravel_footstep.1.ogg b/mods/default/sounds/default_gravel_footstep.1.ogg new file mode 100644 index 00000000..8d260ce0 Binary files /dev/null and b/mods/default/sounds/default_gravel_footstep.1.ogg differ diff --git a/mods/default/sounds/default_gravel_footstep.2.ogg b/mods/default/sounds/default_gravel_footstep.2.ogg new file mode 100644 index 00000000..2aba2c65 Binary files /dev/null and b/mods/default/sounds/default_gravel_footstep.2.ogg differ diff --git a/mods/default/sounds/default_gravel_footstep.3.ogg b/mods/default/sounds/default_gravel_footstep.3.ogg new file mode 100644 index 00000000..1bcd8a11 Binary files /dev/null and b/mods/default/sounds/default_gravel_footstep.3.ogg differ diff --git a/mods/default/sounds/default_gravel_footstep.4.ogg b/mods/default/sounds/default_gravel_footstep.4.ogg new file mode 100644 index 00000000..696c9ffd Binary files /dev/null and b/mods/default/sounds/default_gravel_footstep.4.ogg differ diff --git a/mods/default/sounds/default_hard_footstep.1.ogg b/mods/default/sounds/default_hard_footstep.1.ogg new file mode 100644 index 00000000..0a08efa8 Binary files /dev/null and b/mods/default/sounds/default_hard_footstep.1.ogg differ diff --git a/mods/default/sounds/default_hard_footstep.2.ogg b/mods/default/sounds/default_hard_footstep.2.ogg new file mode 100644 index 00000000..be52a870 Binary files /dev/null and b/mods/default/sounds/default_hard_footstep.2.ogg differ diff --git a/mods/default/sounds/default_hard_footstep.3.ogg b/mods/default/sounds/default_hard_footstep.3.ogg new file mode 100644 index 00000000..a342787d Binary files /dev/null and b/mods/default/sounds/default_hard_footstep.3.ogg differ diff --git a/mods/default/sounds/default_ice_dig.1.ogg b/mods/default/sounds/default_ice_dig.1.ogg new file mode 100644 index 00000000..97399c83 Binary files /dev/null and b/mods/default/sounds/default_ice_dig.1.ogg differ diff --git a/mods/default/sounds/default_ice_dig.2.ogg b/mods/default/sounds/default_ice_dig.2.ogg new file mode 100644 index 00000000..8a5da119 Binary files /dev/null and b/mods/default/sounds/default_ice_dig.2.ogg differ diff --git a/mods/default/sounds/default_ice_dig.3.ogg b/mods/default/sounds/default_ice_dig.3.ogg new file mode 100644 index 00000000..765fb9be Binary files /dev/null and b/mods/default/sounds/default_ice_dig.3.ogg differ diff --git a/mods/default/sounds/default_ice_dug.ogg b/mods/default/sounds/default_ice_dug.ogg new file mode 100644 index 00000000..ae37673e Binary files /dev/null and b/mods/default/sounds/default_ice_dug.ogg differ diff --git a/mods/default/sounds/default_ice_footstep.1.ogg b/mods/default/sounds/default_ice_footstep.1.ogg new file mode 100644 index 00000000..c235f1ef Binary files /dev/null and b/mods/default/sounds/default_ice_footstep.1.ogg differ diff --git a/mods/default/sounds/default_ice_footstep.2.ogg b/mods/default/sounds/default_ice_footstep.2.ogg new file mode 100644 index 00000000..61d2c990 Binary files /dev/null and b/mods/default/sounds/default_ice_footstep.2.ogg differ diff --git a/mods/default/sounds/default_ice_footstep.3.ogg b/mods/default/sounds/default_ice_footstep.3.ogg new file mode 100644 index 00000000..2ecbb431 Binary files /dev/null and b/mods/default/sounds/default_ice_footstep.3.ogg differ diff --git a/mods/default/sounds/default_item_smoke.ogg b/mods/default/sounds/default_item_smoke.ogg new file mode 100644 index 00000000..038a46e4 Binary files /dev/null and b/mods/default/sounds/default_item_smoke.ogg differ diff --git a/mods/default/sounds/default_metal_footstep.1.ogg b/mods/default/sounds/default_metal_footstep.1.ogg new file mode 100644 index 00000000..49fe89ba Binary files /dev/null and b/mods/default/sounds/default_metal_footstep.1.ogg differ diff --git a/mods/default/sounds/default_metal_footstep.2.ogg b/mods/default/sounds/default_metal_footstep.2.ogg new file mode 100644 index 00000000..878711d5 Binary files /dev/null and b/mods/default/sounds/default_metal_footstep.2.ogg differ diff --git a/mods/default/sounds/default_metal_footstep.3.ogg b/mods/default/sounds/default_metal_footstep.3.ogg new file mode 100644 index 00000000..2a566a83 Binary files /dev/null and b/mods/default/sounds/default_metal_footstep.3.ogg differ diff --git a/mods/default/sounds/default_place_node.1.ogg b/mods/default/sounds/default_place_node.1.ogg new file mode 100644 index 00000000..46b9756d Binary files /dev/null and b/mods/default/sounds/default_place_node.1.ogg differ diff --git a/mods/default/sounds/default_place_node.2.ogg b/mods/default/sounds/default_place_node.2.ogg new file mode 100644 index 00000000..d34c01a4 Binary files /dev/null and b/mods/default/sounds/default_place_node.2.ogg differ diff --git a/mods/default/sounds/default_place_node.3.ogg b/mods/default/sounds/default_place_node.3.ogg new file mode 100644 index 00000000..fc293650 Binary files /dev/null and b/mods/default/sounds/default_place_node.3.ogg differ diff --git a/mods/default/sounds/default_place_node_hard.1.ogg b/mods/default/sounds/default_place_node_hard.1.ogg new file mode 100644 index 00000000..9f97faca Binary files /dev/null and b/mods/default/sounds/default_place_node_hard.1.ogg differ diff --git a/mods/default/sounds/default_place_node_hard.2.ogg b/mods/default/sounds/default_place_node_hard.2.ogg new file mode 100644 index 00000000..1d3b3de2 Binary files /dev/null and b/mods/default/sounds/default_place_node_hard.2.ogg differ diff --git a/mods/default/sounds/default_place_node_metal.1.ogg b/mods/default/sounds/default_place_node_metal.1.ogg new file mode 100644 index 00000000..5da085ea Binary files /dev/null and b/mods/default/sounds/default_place_node_metal.1.ogg differ diff --git a/mods/default/sounds/default_place_node_metal.2.ogg b/mods/default/sounds/default_place_node_metal.2.ogg new file mode 100644 index 00000000..5ee67fcf Binary files /dev/null and b/mods/default/sounds/default_place_node_metal.2.ogg differ diff --git a/mods/default/sounds/default_sand_footstep.1.ogg b/mods/default/sounds/default_sand_footstep.1.ogg new file mode 100644 index 00000000..b92feabb Binary files /dev/null and b/mods/default/sounds/default_sand_footstep.1.ogg differ diff --git a/mods/default/sounds/default_sand_footstep.2.ogg b/mods/default/sounds/default_sand_footstep.2.ogg new file mode 100644 index 00000000..6bc5da3e Binary files /dev/null and b/mods/default/sounds/default_sand_footstep.2.ogg differ diff --git a/mods/default/sounds/default_sand_footstep.3.ogg b/mods/default/sounds/default_sand_footstep.3.ogg new file mode 100644 index 00000000..880306fd Binary files /dev/null and b/mods/default/sounds/default_sand_footstep.3.ogg differ diff --git a/mods/default/sounds/default_snow_footstep.1.ogg b/mods/default/sounds/default_snow_footstep.1.ogg new file mode 100644 index 00000000..97cc8252 Binary files /dev/null and b/mods/default/sounds/default_snow_footstep.1.ogg differ diff --git a/mods/default/sounds/default_snow_footstep.2.ogg b/mods/default/sounds/default_snow_footstep.2.ogg new file mode 100644 index 00000000..97a6baa4 Binary files /dev/null and b/mods/default/sounds/default_snow_footstep.2.ogg differ diff --git a/mods/default/sounds/default_snow_footstep.3.ogg b/mods/default/sounds/default_snow_footstep.3.ogg new file mode 100644 index 00000000..bde1f21d Binary files /dev/null and b/mods/default/sounds/default_snow_footstep.3.ogg differ diff --git a/mods/default/sounds/default_snow_footstep.4.ogg b/mods/default/sounds/default_snow_footstep.4.ogg new file mode 100644 index 00000000..8ca6a590 Binary files /dev/null and b/mods/default/sounds/default_snow_footstep.4.ogg differ diff --git a/mods/default/sounds/default_snow_footstep.5.ogg b/mods/default/sounds/default_snow_footstep.5.ogg new file mode 100644 index 00000000..220d60c9 Binary files /dev/null and b/mods/default/sounds/default_snow_footstep.5.ogg differ diff --git a/mods/default/sounds/default_tool_breaks.1.ogg b/mods/default/sounds/default_tool_breaks.1.ogg new file mode 100644 index 00000000..2a571ae2 Binary files /dev/null and b/mods/default/sounds/default_tool_breaks.1.ogg differ diff --git a/mods/default/sounds/default_tool_breaks.2.ogg b/mods/default/sounds/default_tool_breaks.2.ogg new file mode 100644 index 00000000..17893520 Binary files /dev/null and b/mods/default/sounds/default_tool_breaks.2.ogg differ diff --git a/mods/default/sounds/default_tool_breaks.3.ogg b/mods/default/sounds/default_tool_breaks.3.ogg new file mode 100644 index 00000000..a99c4b7e Binary files /dev/null and b/mods/default/sounds/default_tool_breaks.3.ogg differ diff --git a/mods/default/sounds/default_water_footstep.1.ogg b/mods/default/sounds/default_water_footstep.1.ogg new file mode 100644 index 00000000..63b9744c Binary files /dev/null and b/mods/default/sounds/default_water_footstep.1.ogg differ diff --git a/mods/default/sounds/default_water_footstep.2.ogg b/mods/default/sounds/default_water_footstep.2.ogg new file mode 100644 index 00000000..8d79c1f4 Binary files /dev/null and b/mods/default/sounds/default_water_footstep.2.ogg differ diff --git a/mods/default/sounds/default_water_footstep.3.ogg b/mods/default/sounds/default_water_footstep.3.ogg new file mode 100644 index 00000000..f8891506 Binary files /dev/null and b/mods/default/sounds/default_water_footstep.3.ogg differ diff --git a/mods/default/sounds/default_wood_footstep.1.ogg b/mods/default/sounds/default_wood_footstep.1.ogg new file mode 100644 index 00000000..34f63a17 Binary files /dev/null and b/mods/default/sounds/default_wood_footstep.1.ogg differ diff --git a/mods/default/sounds/default_wood_footstep.2.ogg b/mods/default/sounds/default_wood_footstep.2.ogg new file mode 100644 index 00000000..124fc297 Binary files /dev/null and b/mods/default/sounds/default_wood_footstep.2.ogg differ diff --git a/mods/default/sounds/player_damage.ogg b/mods/default/sounds/player_damage.ogg new file mode 100644 index 00000000..78880871 Binary files /dev/null and b/mods/default/sounds/player_damage.ogg differ diff --git a/mods/default/textures/bubble.png b/mods/default/textures/bubble.png new file mode 100644 index 00000000..30170d29 Binary files /dev/null and b/mods/default/textures/bubble.png differ diff --git a/mods/default/textures/crack_anylength.png b/mods/default/textures/crack_anylength.png new file mode 100644 index 00000000..297eced4 Binary files /dev/null and b/mods/default/textures/crack_anylength.png differ diff --git a/mods/default/textures/default_acacia_bush_sapling.png b/mods/default/textures/default_acacia_bush_sapling.png new file mode 100644 index 00000000..940b3aac Binary files /dev/null and b/mods/default/textures/default_acacia_bush_sapling.png differ diff --git a/mods/default/textures/default_acacia_bush_stem.png b/mods/default/textures/default_acacia_bush_stem.png new file mode 100644 index 00000000..f2ee9fa1 Binary files /dev/null and b/mods/default/textures/default_acacia_bush_stem.png differ diff --git a/mods/default/textures/default_acacia_leaves.png b/mods/default/textures/default_acacia_leaves.png new file mode 100644 index 00000000..da58c095 Binary files /dev/null and b/mods/default/textures/default_acacia_leaves.png differ diff --git a/mods/default/textures/default_acacia_leaves_simple.png b/mods/default/textures/default_acacia_leaves_simple.png new file mode 100644 index 00000000..e0348e08 Binary files /dev/null and b/mods/default/textures/default_acacia_leaves_simple.png differ diff --git a/mods/default/textures/default_acacia_sapling.png b/mods/default/textures/default_acacia_sapling.png new file mode 100644 index 00000000..e34aec51 Binary files /dev/null and b/mods/default/textures/default_acacia_sapling.png differ diff --git a/mods/default/textures/default_acacia_tree.png b/mods/default/textures/default_acacia_tree.png new file mode 100644 index 00000000..86ab6b15 Binary files /dev/null and b/mods/default/textures/default_acacia_tree.png differ diff --git a/mods/default/textures/default_acacia_tree_top.png b/mods/default/textures/default_acacia_tree_top.png new file mode 100644 index 00000000..5dbe97be Binary files /dev/null and b/mods/default/textures/default_acacia_tree_top.png differ diff --git a/mods/default/textures/default_acacia_wood.png b/mods/default/textures/default_acacia_wood.png new file mode 100644 index 00000000..f2f8337e Binary files /dev/null and b/mods/default/textures/default_acacia_wood.png differ diff --git a/mods/default/textures/default_apple.png b/mods/default/textures/default_apple.png new file mode 100644 index 00000000..7549bfd2 Binary files /dev/null and b/mods/default/textures/default_apple.png differ diff --git a/mods/default/textures/default_aspen_leaves.png b/mods/default/textures/default_aspen_leaves.png new file mode 100644 index 00000000..68ef1884 Binary files /dev/null and b/mods/default/textures/default_aspen_leaves.png differ diff --git a/mods/default/textures/default_aspen_sapling.png b/mods/default/textures/default_aspen_sapling.png new file mode 100644 index 00000000..f4c772c0 Binary files /dev/null and b/mods/default/textures/default_aspen_sapling.png differ diff --git a/mods/default/textures/default_aspen_tree.png b/mods/default/textures/default_aspen_tree.png new file mode 100644 index 00000000..db2285e7 Binary files /dev/null and b/mods/default/textures/default_aspen_tree.png differ diff --git a/mods/default/textures/default_aspen_tree_top.png b/mods/default/textures/default_aspen_tree_top.png new file mode 100644 index 00000000..61ac0096 Binary files /dev/null and b/mods/default/textures/default_aspen_tree_top.png differ diff --git a/mods/default/textures/default_aspen_wood.png b/mods/default/textures/default_aspen_wood.png new file mode 100644 index 00000000..f31ac30f Binary files /dev/null and b/mods/default/textures/default_aspen_wood.png differ diff --git a/mods/default/textures/default_blueberries.png b/mods/default/textures/default_blueberries.png new file mode 100644 index 00000000..1dbb0d64 Binary files /dev/null and b/mods/default/textures/default_blueberries.png differ diff --git a/mods/default/textures/default_blueberry_bush_leaves.png b/mods/default/textures/default_blueberry_bush_leaves.png new file mode 100644 index 00000000..355f0ee4 Binary files /dev/null and b/mods/default/textures/default_blueberry_bush_leaves.png differ diff --git a/mods/default/textures/default_blueberry_bush_sapling.png b/mods/default/textures/default_blueberry_bush_sapling.png new file mode 100644 index 00000000..c22a374f Binary files /dev/null and b/mods/default/textures/default_blueberry_bush_sapling.png differ diff --git a/mods/default/textures/default_blueberry_overlay.png b/mods/default/textures/default_blueberry_overlay.png new file mode 100644 index 00000000..f61efe08 Binary files /dev/null and b/mods/default/textures/default_blueberry_overlay.png differ diff --git a/mods/default/textures/default_book.png b/mods/default/textures/default_book.png new file mode 100644 index 00000000..bcf1e6a0 Binary files /dev/null and b/mods/default/textures/default_book.png differ diff --git a/mods/default/textures/default_book_written.png b/mods/default/textures/default_book_written.png new file mode 100644 index 00000000..f23d1225 Binary files /dev/null and b/mods/default/textures/default_book_written.png differ diff --git a/mods/default/textures/default_bookshelf.png b/mods/default/textures/default_bookshelf.png new file mode 100644 index 00000000..3407f758 Binary files /dev/null and b/mods/default/textures/default_bookshelf.png differ diff --git a/mods/default/textures/default_bookshelf_slot.png b/mods/default/textures/default_bookshelf_slot.png new file mode 100644 index 00000000..ea4fdba1 Binary files /dev/null and b/mods/default/textures/default_bookshelf_slot.png differ diff --git a/mods/default/textures/default_brick.png b/mods/default/textures/default_brick.png new file mode 100644 index 00000000..de98961e Binary files /dev/null and b/mods/default/textures/default_brick.png differ diff --git a/mods/default/textures/default_bronze_block.png b/mods/default/textures/default_bronze_block.png new file mode 100644 index 00000000..491fc78a Binary files /dev/null and b/mods/default/textures/default_bronze_block.png differ diff --git a/mods/default/textures/default_bronze_ingot.png b/mods/default/textures/default_bronze_ingot.png new file mode 100644 index 00000000..6cccdf6e Binary files /dev/null and b/mods/default/textures/default_bronze_ingot.png differ diff --git a/mods/default/textures/default_bush_sapling.png b/mods/default/textures/default_bush_sapling.png new file mode 100644 index 00000000..905ba4b8 Binary files /dev/null and b/mods/default/textures/default_bush_sapling.png differ diff --git a/mods/default/textures/default_bush_stem.png b/mods/default/textures/default_bush_stem.png new file mode 100644 index 00000000..6ad88885 Binary files /dev/null and b/mods/default/textures/default_bush_stem.png differ diff --git a/mods/default/textures/default_cactus_side.png b/mods/default/textures/default_cactus_side.png new file mode 100644 index 00000000..e5c10c33 Binary files /dev/null and b/mods/default/textures/default_cactus_side.png differ diff --git a/mods/default/textures/default_cactus_top.png b/mods/default/textures/default_cactus_top.png new file mode 100644 index 00000000..cf46aa2d Binary files /dev/null and b/mods/default/textures/default_cactus_top.png differ diff --git a/mods/default/textures/default_chest_front.png b/mods/default/textures/default_chest_front.png new file mode 100644 index 00000000..f4132794 Binary files /dev/null and b/mods/default/textures/default_chest_front.png differ diff --git a/mods/default/textures/default_chest_inside.png b/mods/default/textures/default_chest_inside.png new file mode 100644 index 00000000..9d2e883d Binary files /dev/null and b/mods/default/textures/default_chest_inside.png differ diff --git a/mods/default/textures/default_chest_lock.png b/mods/default/textures/default_chest_lock.png new file mode 100644 index 00000000..b1885ea5 Binary files /dev/null and b/mods/default/textures/default_chest_lock.png differ diff --git a/mods/default/textures/default_chest_side.png b/mods/default/textures/default_chest_side.png new file mode 100644 index 00000000..44a65a43 Binary files /dev/null and b/mods/default/textures/default_chest_side.png differ diff --git a/mods/default/textures/default_chest_top.png b/mods/default/textures/default_chest_top.png new file mode 100644 index 00000000..1fbdbb94 Binary files /dev/null and b/mods/default/textures/default_chest_top.png differ diff --git a/mods/default/textures/default_clay.png b/mods/default/textures/default_clay.png new file mode 100644 index 00000000..76e5a40a Binary files /dev/null and b/mods/default/textures/default_clay.png differ diff --git a/mods/default/textures/default_clay_brick.png b/mods/default/textures/default_clay_brick.png new file mode 100644 index 00000000..b288ef0b Binary files /dev/null and b/mods/default/textures/default_clay_brick.png differ diff --git a/mods/default/textures/default_clay_lump.png b/mods/default/textures/default_clay_lump.png new file mode 100644 index 00000000..c1d0220d Binary files /dev/null and b/mods/default/textures/default_clay_lump.png differ diff --git a/mods/default/textures/default_cloud.png b/mods/default/textures/default_cloud.png new file mode 100644 index 00000000..faf0ec13 Binary files /dev/null and b/mods/default/textures/default_cloud.png differ diff --git a/mods/default/textures/default_coal_block.png b/mods/default/textures/default_coal_block.png new file mode 100644 index 00000000..e92c5322 Binary files /dev/null and b/mods/default/textures/default_coal_block.png differ diff --git a/mods/default/textures/default_coal_lump.png b/mods/default/textures/default_coal_lump.png new file mode 100644 index 00000000..792961dc Binary files /dev/null and b/mods/default/textures/default_coal_lump.png differ diff --git a/mods/default/textures/default_cobble.png b/mods/default/textures/default_cobble.png new file mode 100644 index 00000000..d3798404 Binary files /dev/null and b/mods/default/textures/default_cobble.png differ diff --git a/mods/default/textures/default_coniferous_litter.png b/mods/default/textures/default_coniferous_litter.png new file mode 100644 index 00000000..9d9651ae Binary files /dev/null and b/mods/default/textures/default_coniferous_litter.png differ diff --git a/mods/default/textures/default_coniferous_litter_side.png b/mods/default/textures/default_coniferous_litter_side.png new file mode 100644 index 00000000..9a390584 Binary files /dev/null and b/mods/default/textures/default_coniferous_litter_side.png differ diff --git a/mods/default/textures/default_copper_block.png b/mods/default/textures/default_copper_block.png new file mode 100644 index 00000000..e1b60f0a Binary files /dev/null and b/mods/default/textures/default_copper_block.png differ diff --git a/mods/default/textures/default_copper_ingot.png b/mods/default/textures/default_copper_ingot.png new file mode 100644 index 00000000..bcad9c05 Binary files /dev/null and b/mods/default/textures/default_copper_ingot.png differ diff --git a/mods/default/textures/default_copper_lump.png b/mods/default/textures/default_copper_lump.png new file mode 100644 index 00000000..998c592e Binary files /dev/null and b/mods/default/textures/default_copper_lump.png differ diff --git a/mods/default/textures/default_coral_brown.png b/mods/default/textures/default_coral_brown.png new file mode 100644 index 00000000..7a18bd70 Binary files /dev/null and b/mods/default/textures/default_coral_brown.png differ diff --git a/mods/default/textures/default_coral_cyan.png b/mods/default/textures/default_coral_cyan.png new file mode 100644 index 00000000..890347f7 Binary files /dev/null and b/mods/default/textures/default_coral_cyan.png differ diff --git a/mods/default/textures/default_coral_green.png b/mods/default/textures/default_coral_green.png new file mode 100644 index 00000000..78f3f33f Binary files /dev/null and b/mods/default/textures/default_coral_green.png differ diff --git a/mods/default/textures/default_coral_orange.png b/mods/default/textures/default_coral_orange.png new file mode 100644 index 00000000..d7432abd Binary files /dev/null and b/mods/default/textures/default_coral_orange.png differ diff --git a/mods/default/textures/default_coral_pink.png b/mods/default/textures/default_coral_pink.png new file mode 100644 index 00000000..3708ba5f Binary files /dev/null and b/mods/default/textures/default_coral_pink.png differ diff --git a/mods/default/textures/default_coral_skeleton.png b/mods/default/textures/default_coral_skeleton.png new file mode 100644 index 00000000..d00c6fed Binary files /dev/null and b/mods/default/textures/default_coral_skeleton.png differ diff --git a/mods/default/textures/default_desert_cobble.png b/mods/default/textures/default_desert_cobble.png new file mode 100644 index 00000000..fa1af5d3 Binary files /dev/null and b/mods/default/textures/default_desert_cobble.png differ diff --git a/mods/default/textures/default_desert_sand.png b/mods/default/textures/default_desert_sand.png new file mode 100644 index 00000000..75ade0b7 Binary files /dev/null and b/mods/default/textures/default_desert_sand.png differ diff --git a/mods/default/textures/default_desert_sandstone.png b/mods/default/textures/default_desert_sandstone.png new file mode 100644 index 00000000..e0b22d0d Binary files /dev/null and b/mods/default/textures/default_desert_sandstone.png differ diff --git a/mods/default/textures/default_desert_sandstone_block.png b/mods/default/textures/default_desert_sandstone_block.png new file mode 100644 index 00000000..6f6c8ff5 Binary files /dev/null and b/mods/default/textures/default_desert_sandstone_block.png differ diff --git a/mods/default/textures/default_desert_sandstone_brick.png b/mods/default/textures/default_desert_sandstone_brick.png new file mode 100644 index 00000000..d2b70dd2 Binary files /dev/null and b/mods/default/textures/default_desert_sandstone_brick.png differ diff --git a/mods/default/textures/default_desert_stone.png b/mods/default/textures/default_desert_stone.png new file mode 100644 index 00000000..5d3aded2 Binary files /dev/null and b/mods/default/textures/default_desert_stone.png differ diff --git a/mods/default/textures/default_desert_stone_block.png b/mods/default/textures/default_desert_stone_block.png new file mode 100644 index 00000000..e8e842bc Binary files /dev/null and b/mods/default/textures/default_desert_stone_block.png differ diff --git a/mods/default/textures/default_desert_stone_brick.png b/mods/default/textures/default_desert_stone_brick.png new file mode 100644 index 00000000..8e7208dc Binary files /dev/null and b/mods/default/textures/default_desert_stone_brick.png differ diff --git a/mods/default/textures/default_diamond.png b/mods/default/textures/default_diamond.png new file mode 100644 index 00000000..a8dac747 Binary files /dev/null and b/mods/default/textures/default_diamond.png differ diff --git a/mods/default/textures/default_diamond_block.png b/mods/default/textures/default_diamond_block.png new file mode 100644 index 00000000..20c33edb Binary files /dev/null and b/mods/default/textures/default_diamond_block.png differ diff --git a/mods/default/textures/default_dirt.png b/mods/default/textures/default_dirt.png new file mode 100644 index 00000000..4ed965a9 Binary files /dev/null and b/mods/default/textures/default_dirt.png differ diff --git a/mods/default/textures/default_dry_dirt.png b/mods/default/textures/default_dry_dirt.png new file mode 100644 index 00000000..8ee53984 Binary files /dev/null and b/mods/default/textures/default_dry_dirt.png differ diff --git a/mods/default/textures/default_dry_grass.png b/mods/default/textures/default_dry_grass.png new file mode 100644 index 00000000..11def9c6 Binary files /dev/null and b/mods/default/textures/default_dry_grass.png differ diff --git a/mods/default/textures/default_dry_grass_1.png b/mods/default/textures/default_dry_grass_1.png new file mode 100644 index 00000000..d91174cc Binary files /dev/null and b/mods/default/textures/default_dry_grass_1.png differ diff --git a/mods/default/textures/default_dry_grass_2.png b/mods/default/textures/default_dry_grass_2.png new file mode 100644 index 00000000..b12bf547 Binary files /dev/null and b/mods/default/textures/default_dry_grass_2.png differ diff --git a/mods/default/textures/default_dry_grass_3.png b/mods/default/textures/default_dry_grass_3.png new file mode 100644 index 00000000..c37a8eb9 Binary files /dev/null and b/mods/default/textures/default_dry_grass_3.png differ diff --git a/mods/default/textures/default_dry_grass_4.png b/mods/default/textures/default_dry_grass_4.png new file mode 100644 index 00000000..c00c7027 Binary files /dev/null and b/mods/default/textures/default_dry_grass_4.png differ diff --git a/mods/default/textures/default_dry_grass_5.png b/mods/default/textures/default_dry_grass_5.png new file mode 100644 index 00000000..10a09316 Binary files /dev/null and b/mods/default/textures/default_dry_grass_5.png differ diff --git a/mods/default/textures/default_dry_grass_side.png b/mods/default/textures/default_dry_grass_side.png new file mode 100644 index 00000000..3ccbe418 Binary files /dev/null and b/mods/default/textures/default_dry_grass_side.png differ diff --git a/mods/default/textures/default_dry_shrub.png b/mods/default/textures/default_dry_shrub.png new file mode 100644 index 00000000..82c9cc58 Binary files /dev/null and b/mods/default/textures/default_dry_shrub.png differ diff --git a/mods/default/textures/default_emergent_jungle_sapling.png b/mods/default/textures/default_emergent_jungle_sapling.png new file mode 100644 index 00000000..b363b3cc Binary files /dev/null and b/mods/default/textures/default_emergent_jungle_sapling.png differ diff --git a/mods/default/textures/default_fence_acacia_wood.png b/mods/default/textures/default_fence_acacia_wood.png new file mode 100644 index 00000000..0fb97cc9 Binary files /dev/null and b/mods/default/textures/default_fence_acacia_wood.png differ diff --git a/mods/default/textures/default_fence_aspen_wood.png b/mods/default/textures/default_fence_aspen_wood.png new file mode 100644 index 00000000..fec97550 Binary files /dev/null and b/mods/default/textures/default_fence_aspen_wood.png differ diff --git a/mods/default/textures/default_fence_junglewood.png b/mods/default/textures/default_fence_junglewood.png new file mode 100644 index 00000000..b3b8549c Binary files /dev/null and b/mods/default/textures/default_fence_junglewood.png differ diff --git a/mods/default/textures/default_fence_overlay.png b/mods/default/textures/default_fence_overlay.png new file mode 100644 index 00000000..718184cc Binary files /dev/null and b/mods/default/textures/default_fence_overlay.png differ diff --git a/mods/default/textures/default_fence_overlay.png.1 b/mods/default/textures/default_fence_overlay.png.1 new file mode 100644 index 00000000..718184cc Binary files /dev/null and b/mods/default/textures/default_fence_overlay.png.1 differ diff --git a/mods/default/textures/default_fence_pine_wood.png b/mods/default/textures/default_fence_pine_wood.png new file mode 100644 index 00000000..5045d19a Binary files /dev/null and b/mods/default/textures/default_fence_pine_wood.png differ diff --git a/mods/default/textures/default_fence_rail_acacia_wood.png b/mods/default/textures/default_fence_rail_acacia_wood.png new file mode 100644 index 00000000..7081cdb0 Binary files /dev/null and b/mods/default/textures/default_fence_rail_acacia_wood.png differ diff --git a/mods/default/textures/default_fence_rail_aspen_wood.png b/mods/default/textures/default_fence_rail_aspen_wood.png new file mode 100644 index 00000000..0d35302f Binary files /dev/null and b/mods/default/textures/default_fence_rail_aspen_wood.png differ diff --git a/mods/default/textures/default_fence_rail_junglewood.png b/mods/default/textures/default_fence_rail_junglewood.png new file mode 100644 index 00000000..6616059b Binary files /dev/null and b/mods/default/textures/default_fence_rail_junglewood.png differ diff --git a/mods/default/textures/default_fence_rail_overlay.png b/mods/default/textures/default_fence_rail_overlay.png new file mode 100644 index 00000000..4da47aec Binary files /dev/null and b/mods/default/textures/default_fence_rail_overlay.png differ diff --git a/mods/default/textures/default_fence_rail_pine_wood.png b/mods/default/textures/default_fence_rail_pine_wood.png new file mode 100644 index 00000000..b2f74a37 Binary files /dev/null and b/mods/default/textures/default_fence_rail_pine_wood.png differ diff --git a/mods/default/textures/default_fence_rail_wood.png b/mods/default/textures/default_fence_rail_wood.png new file mode 100644 index 00000000..e41143cb Binary files /dev/null and b/mods/default/textures/default_fence_rail_wood.png differ diff --git a/mods/default/textures/default_fence_wood.png b/mods/default/textures/default_fence_wood.png new file mode 100644 index 00000000..7d161dce Binary files /dev/null and b/mods/default/textures/default_fence_wood.png differ diff --git a/mods/default/textures/default_fern_1.png b/mods/default/textures/default_fern_1.png new file mode 100644 index 00000000..b307986d Binary files /dev/null and b/mods/default/textures/default_fern_1.png differ diff --git a/mods/default/textures/default_fern_2.png b/mods/default/textures/default_fern_2.png new file mode 100644 index 00000000..6c5f7d54 Binary files /dev/null and b/mods/default/textures/default_fern_2.png differ diff --git a/mods/default/textures/default_fern_3.png b/mods/default/textures/default_fern_3.png new file mode 100644 index 00000000..2c1f605e Binary files /dev/null and b/mods/default/textures/default_fern_3.png differ diff --git a/mods/default/textures/default_flint.png b/mods/default/textures/default_flint.png new file mode 100644 index 00000000..9763f4b1 Binary files /dev/null and b/mods/default/textures/default_flint.png differ diff --git a/mods/default/textures/default_footprint.png b/mods/default/textures/default_footprint.png new file mode 100644 index 00000000..24d3e944 Binary files /dev/null and b/mods/default/textures/default_footprint.png differ diff --git a/mods/default/textures/default_furnace_bottom.png b/mods/default/textures/default_furnace_bottom.png new file mode 100644 index 00000000..92279ba3 Binary files /dev/null and b/mods/default/textures/default_furnace_bottom.png differ diff --git a/mods/default/textures/default_furnace_fire_bg.png b/mods/default/textures/default_furnace_fire_bg.png new file mode 100644 index 00000000..126204a3 Binary files /dev/null and b/mods/default/textures/default_furnace_fire_bg.png differ diff --git a/mods/default/textures/default_furnace_fire_fg.png b/mods/default/textures/default_furnace_fire_fg.png new file mode 100644 index 00000000..576f113b Binary files /dev/null and b/mods/default/textures/default_furnace_fire_fg.png differ diff --git a/mods/default/textures/default_furnace_front.png b/mods/default/textures/default_furnace_front.png new file mode 100644 index 00000000..f445d83d Binary files /dev/null and b/mods/default/textures/default_furnace_front.png differ diff --git a/mods/default/textures/default_furnace_front_active.png b/mods/default/textures/default_furnace_front_active.png new file mode 100644 index 00000000..68c03f57 Binary files /dev/null and b/mods/default/textures/default_furnace_front_active.png differ diff --git a/mods/default/textures/default_furnace_side.png b/mods/default/textures/default_furnace_side.png new file mode 100644 index 00000000..33408cfe Binary files /dev/null and b/mods/default/textures/default_furnace_side.png differ diff --git a/mods/default/textures/default_furnace_top.png b/mods/default/textures/default_furnace_top.png new file mode 100644 index 00000000..92279ba3 Binary files /dev/null and b/mods/default/textures/default_furnace_top.png differ diff --git a/mods/default/textures/default_glass.png b/mods/default/textures/default_glass.png new file mode 100644 index 00000000..74d6a025 Binary files /dev/null and b/mods/default/textures/default_glass.png differ diff --git a/mods/default/textures/default_glass_detail.png b/mods/default/textures/default_glass_detail.png new file mode 100644 index 00000000..7eab49e0 Binary files /dev/null and b/mods/default/textures/default_glass_detail.png differ diff --git a/mods/default/textures/default_gold_block.png b/mods/default/textures/default_gold_block.png new file mode 100644 index 00000000..170d50be Binary files /dev/null and b/mods/default/textures/default_gold_block.png differ diff --git a/mods/default/textures/default_gold_ingot.png b/mods/default/textures/default_gold_ingot.png new file mode 100644 index 00000000..ba66471e Binary files /dev/null and b/mods/default/textures/default_gold_ingot.png differ diff --git a/mods/default/textures/default_gold_lump.png b/mods/default/textures/default_gold_lump.png new file mode 100644 index 00000000..d5a1be79 Binary files /dev/null and b/mods/default/textures/default_gold_lump.png differ diff --git a/mods/default/textures/default_grass.png b/mods/default/textures/default_grass.png new file mode 100644 index 00000000..5778caa1 Binary files /dev/null and b/mods/default/textures/default_grass.png differ diff --git a/mods/default/textures/default_grass_1.png b/mods/default/textures/default_grass_1.png new file mode 100644 index 00000000..d16b307e Binary files /dev/null and b/mods/default/textures/default_grass_1.png differ diff --git a/mods/default/textures/default_grass_2.png b/mods/default/textures/default_grass_2.png new file mode 100644 index 00000000..6a1dac2c Binary files /dev/null and b/mods/default/textures/default_grass_2.png differ diff --git a/mods/default/textures/default_grass_3.png b/mods/default/textures/default_grass_3.png new file mode 100644 index 00000000..e67727a4 Binary files /dev/null and b/mods/default/textures/default_grass_3.png differ diff --git a/mods/default/textures/default_grass_4.png b/mods/default/textures/default_grass_4.png new file mode 100644 index 00000000..80269d7e Binary files /dev/null and b/mods/default/textures/default_grass_4.png differ diff --git a/mods/default/textures/default_grass_5.png b/mods/default/textures/default_grass_5.png new file mode 100644 index 00000000..df457605 Binary files /dev/null and b/mods/default/textures/default_grass_5.png differ diff --git a/mods/default/textures/default_grass_side.png b/mods/default/textures/default_grass_side.png new file mode 100644 index 00000000..77aa6557 Binary files /dev/null and b/mods/default/textures/default_grass_side.png differ diff --git a/mods/default/textures/default_gravel.png b/mods/default/textures/default_gravel.png new file mode 100644 index 00000000..37bf286d Binary files /dev/null and b/mods/default/textures/default_gravel.png differ diff --git a/mods/default/textures/default_ice.png b/mods/default/textures/default_ice.png new file mode 100644 index 00000000..09b53f28 Binary files /dev/null and b/mods/default/textures/default_ice.png differ diff --git a/mods/default/textures/default_invisible_node_overlay.png b/mods/default/textures/default_invisible_node_overlay.png new file mode 100644 index 00000000..7fc88061 Binary files /dev/null and b/mods/default/textures/default_invisible_node_overlay.png differ diff --git a/mods/default/textures/default_iron_lump.png b/mods/default/textures/default_iron_lump.png new file mode 100644 index 00000000..db61a94c Binary files /dev/null and b/mods/default/textures/default_iron_lump.png differ diff --git a/mods/default/textures/default_item_smoke.png b/mods/default/textures/default_item_smoke.png new file mode 100644 index 00000000..ae95c160 Binary files /dev/null and b/mods/default/textures/default_item_smoke.png differ diff --git a/mods/default/textures/default_junglegrass.png b/mods/default/textures/default_junglegrass.png new file mode 100644 index 00000000..25abb714 Binary files /dev/null and b/mods/default/textures/default_junglegrass.png differ diff --git a/mods/default/textures/default_jungleleaves.png b/mods/default/textures/default_jungleleaves.png new file mode 100644 index 00000000..252eee0a Binary files /dev/null and b/mods/default/textures/default_jungleleaves.png differ diff --git a/mods/default/textures/default_jungleleaves_simple.png b/mods/default/textures/default_jungleleaves_simple.png new file mode 100644 index 00000000..8e97f800 Binary files /dev/null and b/mods/default/textures/default_jungleleaves_simple.png differ diff --git a/mods/default/textures/default_junglesapling.png b/mods/default/textures/default_junglesapling.png new file mode 100644 index 00000000..05e1e505 Binary files /dev/null and b/mods/default/textures/default_junglesapling.png differ diff --git a/mods/default/textures/default_jungletree.png b/mods/default/textures/default_jungletree.png new file mode 100644 index 00000000..671b24dc Binary files /dev/null and b/mods/default/textures/default_jungletree.png differ diff --git a/mods/default/textures/default_jungletree_top.png b/mods/default/textures/default_jungletree_top.png new file mode 100644 index 00000000..4027d9e0 Binary files /dev/null and b/mods/default/textures/default_jungletree_top.png differ diff --git a/mods/default/textures/default_junglewood.png b/mods/default/textures/default_junglewood.png new file mode 100644 index 00000000..68d9e48a Binary files /dev/null and b/mods/default/textures/default_junglewood.png differ diff --git a/mods/default/textures/default_kelp.png b/mods/default/textures/default_kelp.png new file mode 100644 index 00000000..4b95b84c Binary files /dev/null and b/mods/default/textures/default_kelp.png differ diff --git a/mods/default/textures/default_ladder_steel.png b/mods/default/textures/default_ladder_steel.png new file mode 100644 index 00000000..87041262 Binary files /dev/null and b/mods/default/textures/default_ladder_steel.png differ diff --git a/mods/default/textures/default_ladder_wood.png b/mods/default/textures/default_ladder_wood.png new file mode 100644 index 00000000..6e18e547 Binary files /dev/null and b/mods/default/textures/default_ladder_wood.png differ diff --git a/mods/default/textures/default_large_cactus_seedling.png b/mods/default/textures/default_large_cactus_seedling.png new file mode 100644 index 00000000..c8ebf3ce Binary files /dev/null and b/mods/default/textures/default_large_cactus_seedling.png differ diff --git a/mods/default/textures/default_lava.png b/mods/default/textures/default_lava.png new file mode 100644 index 00000000..1d7039ff Binary files /dev/null and b/mods/default/textures/default_lava.png differ diff --git a/mods/default/textures/default_lava_flowing_animated.png b/mods/default/textures/default_lava_flowing_animated.png new file mode 100644 index 00000000..ebb0ec17 Binary files /dev/null and b/mods/default/textures/default_lava_flowing_animated.png differ diff --git a/mods/default/textures/default_lava_source_animated.png b/mods/default/textures/default_lava_source_animated.png new file mode 100644 index 00000000..326af645 Binary files /dev/null and b/mods/default/textures/default_lava_source_animated.png differ diff --git a/mods/default/textures/default_leaves.png b/mods/default/textures/default_leaves.png new file mode 100644 index 00000000..13a076cb Binary files /dev/null and b/mods/default/textures/default_leaves.png differ diff --git a/mods/default/textures/default_leaves_simple.png b/mods/default/textures/default_leaves_simple.png new file mode 100644 index 00000000..02679ec6 Binary files /dev/null and b/mods/default/textures/default_leaves_simple.png differ diff --git a/mods/default/textures/default_marram_grass_1.png b/mods/default/textures/default_marram_grass_1.png new file mode 100644 index 00000000..107a2590 Binary files /dev/null and b/mods/default/textures/default_marram_grass_1.png differ diff --git a/mods/default/textures/default_marram_grass_2.png b/mods/default/textures/default_marram_grass_2.png new file mode 100644 index 00000000..a6d05c51 Binary files /dev/null and b/mods/default/textures/default_marram_grass_2.png differ diff --git a/mods/default/textures/default_marram_grass_3.png b/mods/default/textures/default_marram_grass_3.png new file mode 100644 index 00000000..2a9668c7 Binary files /dev/null and b/mods/default/textures/default_marram_grass_3.png differ diff --git a/mods/default/textures/default_mese_block.png b/mods/default/textures/default_mese_block.png new file mode 100644 index 00000000..77524faa Binary files /dev/null and b/mods/default/textures/default_mese_block.png differ diff --git a/mods/default/textures/default_mese_crystal.png b/mods/default/textures/default_mese_crystal.png new file mode 100644 index 00000000..f1d71f16 Binary files /dev/null and b/mods/default/textures/default_mese_crystal.png differ diff --git a/mods/default/textures/default_mese_crystal_fragment.png b/mods/default/textures/default_mese_crystal_fragment.png new file mode 100644 index 00000000..d5416ab0 Binary files /dev/null and b/mods/default/textures/default_mese_crystal_fragment.png differ diff --git a/mods/default/textures/default_mese_post_light_side.png b/mods/default/textures/default_mese_post_light_side.png new file mode 100644 index 00000000..80a0999c Binary files /dev/null and b/mods/default/textures/default_mese_post_light_side.png differ diff --git a/mods/default/textures/default_mese_post_light_side_dark.png b/mods/default/textures/default_mese_post_light_side_dark.png new file mode 100644 index 00000000..4243e486 Binary files /dev/null and b/mods/default/textures/default_mese_post_light_side_dark.png differ diff --git a/mods/default/textures/default_meselamp.png b/mods/default/textures/default_meselamp.png new file mode 100644 index 00000000..d15c8b9b Binary files /dev/null and b/mods/default/textures/default_meselamp.png differ diff --git a/mods/default/textures/default_mineral_coal.png b/mods/default/textures/default_mineral_coal.png new file mode 100644 index 00000000..6d1386b9 Binary files /dev/null and b/mods/default/textures/default_mineral_coal.png differ diff --git a/mods/default/textures/default_mineral_copper.png b/mods/default/textures/default_mineral_copper.png new file mode 100644 index 00000000..c4c518eb Binary files /dev/null and b/mods/default/textures/default_mineral_copper.png differ diff --git a/mods/default/textures/default_mineral_diamond.png b/mods/default/textures/default_mineral_diamond.png new file mode 100644 index 00000000..b817bd11 Binary files /dev/null and b/mods/default/textures/default_mineral_diamond.png differ diff --git a/mods/default/textures/default_mineral_gold.png b/mods/default/textures/default_mineral_gold.png new file mode 100644 index 00000000..2220addd Binary files /dev/null and b/mods/default/textures/default_mineral_gold.png differ diff --git a/mods/default/textures/default_mineral_iron.png b/mods/default/textures/default_mineral_iron.png new file mode 100644 index 00000000..5d630628 Binary files /dev/null and b/mods/default/textures/default_mineral_iron.png differ diff --git a/mods/default/textures/default_mineral_mese.png b/mods/default/textures/default_mineral_mese.png new file mode 100644 index 00000000..56a447d0 Binary files /dev/null and b/mods/default/textures/default_mineral_mese.png differ diff --git a/mods/default/textures/default_mineral_tin.png b/mods/default/textures/default_mineral_tin.png new file mode 100644 index 00000000..232d4b53 Binary files /dev/null and b/mods/default/textures/default_mineral_tin.png differ diff --git a/mods/default/textures/default_moss.png b/mods/default/textures/default_moss.png new file mode 100644 index 00000000..bb98d7fe Binary files /dev/null and b/mods/default/textures/default_moss.png differ diff --git a/mods/default/textures/default_moss_side.png b/mods/default/textures/default_moss_side.png new file mode 100644 index 00000000..f18322c6 Binary files /dev/null and b/mods/default/textures/default_moss_side.png differ diff --git a/mods/default/textures/default_mossycobble.png b/mods/default/textures/default_mossycobble.png new file mode 100644 index 00000000..1071cb46 Binary files /dev/null and b/mods/default/textures/default_mossycobble.png differ diff --git a/mods/default/textures/default_mossystone.png b/mods/default/textures/default_mossystone.png new file mode 100644 index 00000000..97258f09 Binary files /dev/null and b/mods/default/textures/default_mossystone.png differ diff --git a/mods/default/textures/default_mossystone_brick.png b/mods/default/textures/default_mossystone_brick.png new file mode 100644 index 00000000..b8edf233 Binary files /dev/null and b/mods/default/textures/default_mossystone_brick.png differ diff --git a/mods/default/textures/default_obsidian.png b/mods/default/textures/default_obsidian.png new file mode 100644 index 00000000..30e063fd Binary files /dev/null and b/mods/default/textures/default_obsidian.png differ diff --git a/mods/default/textures/default_obsidian_block.png b/mods/default/textures/default_obsidian_block.png new file mode 100644 index 00000000..dd93f8d1 Binary files /dev/null and b/mods/default/textures/default_obsidian_block.png differ diff --git a/mods/default/textures/default_obsidian_brick.png b/mods/default/textures/default_obsidian_brick.png new file mode 100644 index 00000000..e4c8fe7f Binary files /dev/null and b/mods/default/textures/default_obsidian_brick.png differ diff --git a/mods/default/textures/default_obsidian_glass.png b/mods/default/textures/default_obsidian_glass.png new file mode 100644 index 00000000..d5ac83d0 Binary files /dev/null and b/mods/default/textures/default_obsidian_glass.png differ diff --git a/mods/default/textures/default_obsidian_glass_detail.png b/mods/default/textures/default_obsidian_glass_detail.png new file mode 100644 index 00000000..1397ecc4 Binary files /dev/null and b/mods/default/textures/default_obsidian_glass_detail.png differ diff --git a/mods/default/textures/default_obsidian_shard.png b/mods/default/textures/default_obsidian_shard.png new file mode 100644 index 00000000..a988d8ce Binary files /dev/null and b/mods/default/textures/default_obsidian_shard.png differ diff --git a/mods/default/textures/default_paper.png b/mods/default/textures/default_paper.png new file mode 100644 index 00000000..8f23924e Binary files /dev/null and b/mods/default/textures/default_paper.png differ diff --git a/mods/default/textures/default_papyrus.png b/mods/default/textures/default_papyrus.png new file mode 100644 index 00000000..982d589c Binary files /dev/null and b/mods/default/textures/default_papyrus.png differ diff --git a/mods/default/textures/default_permafrost.png b/mods/default/textures/default_permafrost.png new file mode 100644 index 00000000..6f2567e7 Binary files /dev/null and b/mods/default/textures/default_permafrost.png differ diff --git a/mods/default/textures/default_pine_bush_sapling.png b/mods/default/textures/default_pine_bush_sapling.png new file mode 100644 index 00000000..fadeff87 Binary files /dev/null and b/mods/default/textures/default_pine_bush_sapling.png differ diff --git a/mods/default/textures/default_pine_bush_stem.png b/mods/default/textures/default_pine_bush_stem.png new file mode 100644 index 00000000..7dc00f7b Binary files /dev/null and b/mods/default/textures/default_pine_bush_stem.png differ diff --git a/mods/default/textures/default_pine_needles.png b/mods/default/textures/default_pine_needles.png new file mode 100644 index 00000000..d1bcab6e Binary files /dev/null and b/mods/default/textures/default_pine_needles.png differ diff --git a/mods/default/textures/default_pine_sapling.png b/mods/default/textures/default_pine_sapling.png new file mode 100644 index 00000000..c30131d8 Binary files /dev/null and b/mods/default/textures/default_pine_sapling.png differ diff --git a/mods/default/textures/default_pine_tree.png b/mods/default/textures/default_pine_tree.png new file mode 100644 index 00000000..4a5328ff Binary files /dev/null and b/mods/default/textures/default_pine_tree.png differ diff --git a/mods/default/textures/default_pine_tree_top.png b/mods/default/textures/default_pine_tree_top.png new file mode 100644 index 00000000..e26a835d Binary files /dev/null and b/mods/default/textures/default_pine_tree_top.png differ diff --git a/mods/default/textures/default_pine_wood.png b/mods/default/textures/default_pine_wood.png new file mode 100644 index 00000000..29f9d6d2 Binary files /dev/null and b/mods/default/textures/default_pine_wood.png differ diff --git a/mods/default/textures/default_rainforest_litter.png b/mods/default/textures/default_rainforest_litter.png new file mode 100644 index 00000000..d762deb4 Binary files /dev/null and b/mods/default/textures/default_rainforest_litter.png differ diff --git a/mods/default/textures/default_rainforest_litter_side.png b/mods/default/textures/default_rainforest_litter_side.png new file mode 100644 index 00000000..1bd0bb60 Binary files /dev/null and b/mods/default/textures/default_rainforest_litter_side.png differ diff --git a/mods/default/textures/default_river_water.png b/mods/default/textures/default_river_water.png new file mode 100644 index 00000000..be57575b Binary files /dev/null and b/mods/default/textures/default_river_water.png differ diff --git a/mods/default/textures/default_river_water_flowing_animated.png b/mods/default/textures/default_river_water_flowing_animated.png new file mode 100644 index 00000000..52e6e8ec Binary files /dev/null and b/mods/default/textures/default_river_water_flowing_animated.png differ diff --git a/mods/default/textures/default_river_water_source_animated.png b/mods/default/textures/default_river_water_source_animated.png new file mode 100644 index 00000000..560078ee Binary files /dev/null and b/mods/default/textures/default_river_water_source_animated.png differ diff --git a/mods/default/textures/default_sand.png b/mods/default/textures/default_sand.png new file mode 100644 index 00000000..645a3004 Binary files /dev/null and b/mods/default/textures/default_sand.png differ diff --git a/mods/default/textures/default_sandstone.png b/mods/default/textures/default_sandstone.png new file mode 100644 index 00000000..16e3d13b Binary files /dev/null and b/mods/default/textures/default_sandstone.png differ diff --git a/mods/default/textures/default_sandstone_block.png b/mods/default/textures/default_sandstone_block.png new file mode 100644 index 00000000..c3adfd97 Binary files /dev/null and b/mods/default/textures/default_sandstone_block.png differ diff --git a/mods/default/textures/default_sandstone_brick.png b/mods/default/textures/default_sandstone_brick.png new file mode 100644 index 00000000..6326391b Binary files /dev/null and b/mods/default/textures/default_sandstone_brick.png differ diff --git a/mods/default/textures/default_sapling.png b/mods/default/textures/default_sapling.png new file mode 100644 index 00000000..3fd64f02 Binary files /dev/null and b/mods/default/textures/default_sapling.png differ diff --git a/mods/default/textures/default_sign_steel.png b/mods/default/textures/default_sign_steel.png new file mode 100644 index 00000000..1ea3ec97 Binary files /dev/null and b/mods/default/textures/default_sign_steel.png differ diff --git a/mods/default/textures/default_sign_wall_steel.png b/mods/default/textures/default_sign_wall_steel.png new file mode 100644 index 00000000..9a9273db Binary files /dev/null and b/mods/default/textures/default_sign_wall_steel.png differ diff --git a/mods/default/textures/default_sign_wall_wood.png b/mods/default/textures/default_sign_wall_wood.png new file mode 100644 index 00000000..eb91cf6d Binary files /dev/null and b/mods/default/textures/default_sign_wall_wood.png differ diff --git a/mods/default/textures/default_sign_wood.png b/mods/default/textures/default_sign_wood.png new file mode 100644 index 00000000..07eb9846 Binary files /dev/null and b/mods/default/textures/default_sign_wood.png differ diff --git a/mods/default/textures/default_silver_sand.png b/mods/default/textures/default_silver_sand.png new file mode 100644 index 00000000..90a7044b Binary files /dev/null and b/mods/default/textures/default_silver_sand.png differ diff --git a/mods/default/textures/default_silver_sandstone.png b/mods/default/textures/default_silver_sandstone.png new file mode 100644 index 00000000..1ccecbf3 Binary files /dev/null and b/mods/default/textures/default_silver_sandstone.png differ diff --git a/mods/default/textures/default_silver_sandstone_block.png b/mods/default/textures/default_silver_sandstone_block.png new file mode 100644 index 00000000..c8c14e41 Binary files /dev/null and b/mods/default/textures/default_silver_sandstone_block.png differ diff --git a/mods/default/textures/default_silver_sandstone_brick.png b/mods/default/textures/default_silver_sandstone_brick.png new file mode 100644 index 00000000..cb7be40d Binary files /dev/null and b/mods/default/textures/default_silver_sandstone_brick.png differ diff --git a/mods/default/textures/default_snow.png b/mods/default/textures/default_snow.png new file mode 100644 index 00000000..6a12161d Binary files /dev/null and b/mods/default/textures/default_snow.png differ diff --git a/mods/default/textures/default_snow_side.png b/mods/default/textures/default_snow_side.png new file mode 100644 index 00000000..8465d80d Binary files /dev/null and b/mods/default/textures/default_snow_side.png differ diff --git a/mods/default/textures/default_snowball.png b/mods/default/textures/default_snowball.png new file mode 100644 index 00000000..13eb27af Binary files /dev/null and b/mods/default/textures/default_snowball.png differ diff --git a/mods/default/textures/default_steel_block.png b/mods/default/textures/default_steel_block.png new file mode 100644 index 00000000..5e421f02 Binary files /dev/null and b/mods/default/textures/default_steel_block.png differ diff --git a/mods/default/textures/default_steel_ingot.png b/mods/default/textures/default_steel_ingot.png new file mode 100644 index 00000000..8100b013 Binary files /dev/null and b/mods/default/textures/default_steel_ingot.png differ diff --git a/mods/default/textures/default_stick.png b/mods/default/textures/default_stick.png new file mode 100644 index 00000000..0378d078 Binary files /dev/null and b/mods/default/textures/default_stick.png differ diff --git a/mods/default/textures/default_stone.png b/mods/default/textures/default_stone.png new file mode 100644 index 00000000..d3f0ef80 Binary files /dev/null and b/mods/default/textures/default_stone.png differ diff --git a/mods/default/textures/default_stone_block.png b/mods/default/textures/default_stone_block.png new file mode 100644 index 00000000..2d098783 Binary files /dev/null and b/mods/default/textures/default_stone_block.png differ diff --git a/mods/default/textures/default_stone_brick.png b/mods/default/textures/default_stone_brick.png new file mode 100644 index 00000000..3ae9602a Binary files /dev/null and b/mods/default/textures/default_stone_brick.png differ diff --git a/mods/default/textures/default_stones.png b/mods/default/textures/default_stones.png new file mode 100644 index 00000000..d09e3299 Binary files /dev/null and b/mods/default/textures/default_stones.png differ diff --git a/mods/default/textures/default_stones_side.png b/mods/default/textures/default_stones_side.png new file mode 100644 index 00000000..7ae823a7 Binary files /dev/null and b/mods/default/textures/default_stones_side.png differ diff --git a/mods/default/textures/default_tin_block.png b/mods/default/textures/default_tin_block.png new file mode 100644 index 00000000..a834d272 Binary files /dev/null and b/mods/default/textures/default_tin_block.png differ diff --git a/mods/default/textures/default_tin_ingot.png b/mods/default/textures/default_tin_ingot.png new file mode 100644 index 00000000..eed53610 Binary files /dev/null and b/mods/default/textures/default_tin_ingot.png differ diff --git a/mods/default/textures/default_tin_lump.png b/mods/default/textures/default_tin_lump.png new file mode 100644 index 00000000..72bd339b Binary files /dev/null and b/mods/default/textures/default_tin_lump.png differ diff --git a/mods/default/textures/default_tool_bronzeaxe.png b/mods/default/textures/default_tool_bronzeaxe.png new file mode 100644 index 00000000..8ae43b5a Binary files /dev/null and b/mods/default/textures/default_tool_bronzeaxe.png differ diff --git a/mods/default/textures/default_tool_bronzepick.png b/mods/default/textures/default_tool_bronzepick.png new file mode 100644 index 00000000..c88a5f09 Binary files /dev/null and b/mods/default/textures/default_tool_bronzepick.png differ diff --git a/mods/default/textures/default_tool_bronzeshovel.png b/mods/default/textures/default_tool_bronzeshovel.png new file mode 100644 index 00000000..d7d800e4 Binary files /dev/null and b/mods/default/textures/default_tool_bronzeshovel.png differ diff --git a/mods/default/textures/default_tool_bronzesword.png b/mods/default/textures/default_tool_bronzesword.png new file mode 100644 index 00000000..cdab8985 Binary files /dev/null and b/mods/default/textures/default_tool_bronzesword.png differ diff --git a/mods/default/textures/default_tool_diamondaxe.png b/mods/default/textures/default_tool_diamondaxe.png new file mode 100644 index 00000000..e32a0bf2 Binary files /dev/null and b/mods/default/textures/default_tool_diamondaxe.png differ diff --git a/mods/default/textures/default_tool_diamondpick.png b/mods/default/textures/default_tool_diamondpick.png new file mode 100644 index 00000000..5dcc9983 Binary files /dev/null and b/mods/default/textures/default_tool_diamondpick.png differ diff --git a/mods/default/textures/default_tool_diamondshovel.png b/mods/default/textures/default_tool_diamondshovel.png new file mode 100644 index 00000000..d0fe24de Binary files /dev/null and b/mods/default/textures/default_tool_diamondshovel.png differ diff --git a/mods/default/textures/default_tool_diamondsword.png b/mods/default/textures/default_tool_diamondsword.png new file mode 100644 index 00000000..dbccd0e3 Binary files /dev/null and b/mods/default/textures/default_tool_diamondsword.png differ diff --git a/mods/default/textures/default_tool_meseaxe.png b/mods/default/textures/default_tool_meseaxe.png new file mode 100644 index 00000000..c01fb4f3 Binary files /dev/null and b/mods/default/textures/default_tool_meseaxe.png differ diff --git a/mods/default/textures/default_tool_mesepick.png b/mods/default/textures/default_tool_mesepick.png new file mode 100644 index 00000000..1b2e25be Binary files /dev/null and b/mods/default/textures/default_tool_mesepick.png differ diff --git a/mods/default/textures/default_tool_meseshovel.png b/mods/default/textures/default_tool_meseshovel.png new file mode 100644 index 00000000..00813a23 Binary files /dev/null and b/mods/default/textures/default_tool_meseshovel.png differ diff --git a/mods/default/textures/default_tool_mesesword.png b/mods/default/textures/default_tool_mesesword.png new file mode 100644 index 00000000..d395d3a1 Binary files /dev/null and b/mods/default/textures/default_tool_mesesword.png differ diff --git a/mods/default/textures/default_tool_steelaxe.png b/mods/default/textures/default_tool_steelaxe.png new file mode 100644 index 00000000..1528cad4 Binary files /dev/null and b/mods/default/textures/default_tool_steelaxe.png differ diff --git a/mods/default/textures/default_tool_steelpick.png b/mods/default/textures/default_tool_steelpick.png new file mode 100644 index 00000000..a7543a1f Binary files /dev/null and b/mods/default/textures/default_tool_steelpick.png differ diff --git a/mods/default/textures/default_tool_steelshovel.png b/mods/default/textures/default_tool_steelshovel.png new file mode 100644 index 00000000..65e40450 Binary files /dev/null and b/mods/default/textures/default_tool_steelshovel.png differ diff --git a/mods/default/textures/default_tool_steelsword.png b/mods/default/textures/default_tool_steelsword.png new file mode 100644 index 00000000..630a3396 Binary files /dev/null and b/mods/default/textures/default_tool_steelsword.png differ diff --git a/mods/default/textures/default_tool_stoneaxe.png b/mods/default/textures/default_tool_stoneaxe.png new file mode 100644 index 00000000..cc360545 Binary files /dev/null and b/mods/default/textures/default_tool_stoneaxe.png differ diff --git a/mods/default/textures/default_tool_stonepick.png b/mods/default/textures/default_tool_stonepick.png new file mode 100644 index 00000000..237d739c Binary files /dev/null and b/mods/default/textures/default_tool_stonepick.png differ diff --git a/mods/default/textures/default_tool_stoneshovel.png b/mods/default/textures/default_tool_stoneshovel.png new file mode 100644 index 00000000..11711bd2 Binary files /dev/null and b/mods/default/textures/default_tool_stoneshovel.png differ diff --git a/mods/default/textures/default_tool_stonesword.png b/mods/default/textures/default_tool_stonesword.png new file mode 100644 index 00000000..1a493acb Binary files /dev/null and b/mods/default/textures/default_tool_stonesword.png differ diff --git a/mods/default/textures/default_tool_woodaxe.png b/mods/default/textures/default_tool_woodaxe.png new file mode 100644 index 00000000..68f1fd8c Binary files /dev/null and b/mods/default/textures/default_tool_woodaxe.png differ diff --git a/mods/default/textures/default_tool_woodpick.png b/mods/default/textures/default_tool_woodpick.png new file mode 100644 index 00000000..0aed5833 Binary files /dev/null and b/mods/default/textures/default_tool_woodpick.png differ diff --git a/mods/default/textures/default_tool_woodshovel.png b/mods/default/textures/default_tool_woodshovel.png new file mode 100644 index 00000000..dcef2b5b Binary files /dev/null and b/mods/default/textures/default_tool_woodshovel.png differ diff --git a/mods/default/textures/default_tool_woodsword.png b/mods/default/textures/default_tool_woodsword.png new file mode 100644 index 00000000..c78ba50b Binary files /dev/null and b/mods/default/textures/default_tool_woodsword.png differ diff --git a/mods/default/textures/default_torch_animated.png b/mods/default/textures/default_torch_animated.png new file mode 100644 index 00000000..cdf33ef3 Binary files /dev/null and b/mods/default/textures/default_torch_animated.png differ diff --git a/mods/default/textures/default_torch_on_ceiling_animated.png b/mods/default/textures/default_torch_on_ceiling_animated.png new file mode 100644 index 00000000..5465217f Binary files /dev/null and b/mods/default/textures/default_torch_on_ceiling_animated.png differ diff --git a/mods/default/textures/default_torch_on_floor.png b/mods/default/textures/default_torch_on_floor.png new file mode 100644 index 00000000..bc4bdd6b Binary files /dev/null and b/mods/default/textures/default_torch_on_floor.png differ diff --git a/mods/default/textures/default_torch_on_floor_animated.png b/mods/default/textures/default_torch_on_floor_animated.png new file mode 100644 index 00000000..ad51c03a Binary files /dev/null and b/mods/default/textures/default_torch_on_floor_animated.png differ diff --git a/mods/default/textures/default_tree.png b/mods/default/textures/default_tree.png new file mode 100644 index 00000000..fe89963c Binary files /dev/null and b/mods/default/textures/default_tree.png differ diff --git a/mods/default/textures/default_tree_top.png b/mods/default/textures/default_tree_top.png new file mode 100644 index 00000000..9205ed98 Binary files /dev/null and b/mods/default/textures/default_tree_top.png differ diff --git a/mods/default/textures/default_water.png b/mods/default/textures/default_water.png new file mode 100644 index 00000000..47253db5 Binary files /dev/null and b/mods/default/textures/default_water.png differ diff --git a/mods/default/textures/default_water_flowing_animated.png b/mods/default/textures/default_water_flowing_animated.png new file mode 100644 index 00000000..0dc0ef9f Binary files /dev/null and b/mods/default/textures/default_water_flowing_animated.png differ diff --git a/mods/default/textures/default_water_source_animated.png b/mods/default/textures/default_water_source_animated.png new file mode 100644 index 00000000..8041b036 Binary files /dev/null and b/mods/default/textures/default_water_source_animated.png differ diff --git a/mods/default/textures/default_wood.png b/mods/default/textures/default_wood.png new file mode 100644 index 00000000..af56d6cd Binary files /dev/null and b/mods/default/textures/default_wood.png differ diff --git a/mods/default/textures/gui_formbg.png b/mods/default/textures/gui_formbg.png new file mode 100644 index 00000000..e259fec2 Binary files /dev/null and b/mods/default/textures/gui_formbg.png differ diff --git a/mods/default/textures/gui_furnace_arrow_bg.png b/mods/default/textures/gui_furnace_arrow_bg.png new file mode 100644 index 00000000..046d8cda Binary files /dev/null and b/mods/default/textures/gui_furnace_arrow_bg.png differ diff --git a/mods/default/textures/gui_furnace_arrow_fg.png b/mods/default/textures/gui_furnace_arrow_fg.png new file mode 100644 index 00000000..8d3c396e Binary files /dev/null and b/mods/default/textures/gui_furnace_arrow_fg.png differ diff --git a/mods/default/textures/gui_hb_bg.png b/mods/default/textures/gui_hb_bg.png new file mode 100644 index 00000000..99248e17 Binary files /dev/null and b/mods/default/textures/gui_hb_bg.png differ diff --git a/mods/default/textures/gui_hotbar.png b/mods/default/textures/gui_hotbar.png new file mode 100644 index 00000000..7bc78875 Binary files /dev/null and b/mods/default/textures/gui_hotbar.png differ diff --git a/mods/default/textures/gui_hotbar_selected.png b/mods/default/textures/gui_hotbar_selected.png new file mode 100644 index 00000000..7203e9a7 Binary files /dev/null and b/mods/default/textures/gui_hotbar_selected.png differ diff --git a/mods/default/textures/heart.png b/mods/default/textures/heart.png new file mode 100644 index 00000000..4412cab5 Binary files /dev/null and b/mods/default/textures/heart.png differ diff --git a/mods/default/textures/wieldhand.png b/mods/default/textures/wieldhand.png new file mode 100644 index 00000000..69f4b7bf Binary files /dev/null and b/mods/default/textures/wieldhand.png differ diff --git a/mods/default/tools.lua b/mods/default/tools.lua new file mode 100644 index 00000000..fd6f4365 --- /dev/null +++ b/mods/default/tools.lua @@ -0,0 +1,477 @@ +-- mods/default/tools.lua + +-- support for MT game translation. +local S = default.get_translator + +-- The hand +-- Override the hand item registered in the engine in builtin/game/register.lua +minetest.override_item("", { + wield_scale = {x=1,y=1,z=2.5}, + tool_capabilities = { + full_punch_interval = 0.9, + max_drop_level = 0, + groupcaps = { + crumbly = {times={[2]=3.00, [3]=0.70}, uses=0, maxlevel=1}, + snappy = {times={[3]=0.40}, uses=0, maxlevel=1}, + oddly_breakable_by_hand = {times={[1]=3.50,[2]=2.00,[3]=0.70}, uses=0} + }, + damage_groups = {fleshy=1}, + } +}) + +-- +-- Picks +-- + +minetest.register_tool("default:pick_wood", { + description = S("Wooden Pickaxe"), + inventory_image = "default_tool_woodpick.png", + tool_capabilities = { + full_punch_interval = 1.2, + max_drop_level=0, + groupcaps={ + cracky = {times={[3]=1.60}, uses=10, maxlevel=1}, + }, + damage_groups = {fleshy=2}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {pickaxe = 1, flammable = 2} +}) + +minetest.register_tool("default:pick_stone", { + description = S("Stone Pickaxe"), + inventory_image = "default_tool_stonepick.png", + tool_capabilities = { + full_punch_interval = 1.3, + max_drop_level=0, + groupcaps={ + cracky = {times={[2]=2.0, [3]=1.00}, uses=20, maxlevel=1}, + }, + damage_groups = {fleshy=3}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {pickaxe = 1} +}) + +minetest.register_tool("default:pick_bronze", { + description = S("Bronze Pickaxe"), + inventory_image = "default_tool_bronzepick.png", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=1, + groupcaps={ + cracky = {times={[1]=4.50, [2]=1.80, [3]=0.90}, uses=20, maxlevel=2}, + }, + damage_groups = {fleshy=4}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {pickaxe = 1} +}) + +minetest.register_tool("default:pick_steel", { + description = S("Steel Pickaxe"), + inventory_image = "default_tool_steelpick.png", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=1, + groupcaps={ + cracky = {times={[1]=4.00, [2]=1.60, [3]=0.80}, uses=20, maxlevel=2}, + }, + damage_groups = {fleshy=4}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {pickaxe = 1} +}) + +minetest.register_tool("default:pick_mese", { + description = S("Mese Pickaxe"), + inventory_image = "default_tool_mesepick.png", + tool_capabilities = { + full_punch_interval = 0.9, + max_drop_level=3, + groupcaps={ + cracky = {times={[1]=2.4, [2]=1.2, [3]=0.60}, uses=20, maxlevel=3}, + }, + damage_groups = {fleshy=5}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {pickaxe = 1} +}) + +minetest.register_tool("default:pick_diamond", { + description = S("Diamond Pickaxe"), + inventory_image = "default_tool_diamondpick.png", + tool_capabilities = { + full_punch_interval = 0.9, + max_drop_level=3, + groupcaps={ + cracky = {times = {[1] = 2.25, [2] = 0.70, [3] = 0.55}, uses = 30, maxlevel= 3} + }, + damage_groups = {fleshy=5}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {pickaxe = 1} +}) + +-- +-- Shovels +-- + +minetest.register_tool("default:shovel_wood", { + description = S("Wooden Shovel"), + inventory_image = "default_tool_woodshovel.png", + wield_image = "default_tool_woodshovel.png^[transformR90", + tool_capabilities = { + full_punch_interval = 1.2, + max_drop_level=0, + groupcaps={ + crumbly = {times={[1]=3.00, [2]=1.60, [3]=0.60}, uses=10, maxlevel=1}, + }, + damage_groups = {fleshy=2}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {shovel = 1, flammable = 2} +}) + +minetest.register_tool("default:shovel_stone", { + description = S("Stone Shovel"), + inventory_image = "default_tool_stoneshovel.png", + wield_image = "default_tool_stoneshovel.png^[transformR90", + tool_capabilities = { + full_punch_interval = 1.4, + max_drop_level=0, + groupcaps={ + crumbly = {times={[1]=1.80, [2]=1.20, [3]=0.50}, uses=20, maxlevel=1}, + }, + damage_groups = {fleshy=2}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {shovel = 1} +}) + +minetest.register_tool("default:shovel_bronze", { + description = S("Bronze Shovel"), + inventory_image = "default_tool_bronzeshovel.png", + wield_image = "default_tool_bronzeshovel.png^[transformR90", + tool_capabilities = { + full_punch_interval = 1.1, + max_drop_level=1, + groupcaps={ + crumbly = {times={[1]=1.65, [2]=1.05, [3]=0.45}, uses=25, maxlevel=2}, + }, + damage_groups = {fleshy=3}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {shovel = 1} +}) + +minetest.register_tool("default:shovel_steel", { + description = S("Steel Shovel"), + inventory_image = "default_tool_steelshovel.png", + wield_image = "default_tool_steelshovel.png^[transformR90", + tool_capabilities = { + full_punch_interval = 1.1, + max_drop_level=1, + groupcaps={ + crumbly = {times={[1]=1.50, [2]=0.90, [3]=0.40}, uses=30, maxlevel=2}, + }, + damage_groups = {fleshy=3}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {shovel = 1} +}) + +minetest.register_tool("default:shovel_mese", { + description = S("Mese Shovel"), + inventory_image = "default_tool_meseshovel.png", + wield_image = "default_tool_meseshovel.png^[transformR90", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=3, + groupcaps={ + crumbly = {times={[1]=1.20, [2]=0.60, [3]=0.30}, uses=20, maxlevel=3}, + }, + damage_groups = {fleshy=4}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {shovel = 1} +}) + +minetest.register_tool("default:shovel_diamond", { + description = S("Diamond Shovel"), + inventory_image = "default_tool_diamondshovel.png", + wield_image = "default_tool_diamondshovel.png^[transformR90", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=1, + groupcaps={ + crumbly = {times={[1]=1.10, [2]=0.50, [3]=0.30}, uses=30, maxlevel=3}, + }, + damage_groups = {fleshy=4}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {shovel = 1} +}) + +-- +-- Axes +-- + +minetest.register_tool("default:axe_wood", { + description = S("Wooden Axe"), + inventory_image = "default_tool_woodaxe.png", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=0, + groupcaps={ + choppy = {times={[2]=3.00, [3]=1.60}, uses=10, maxlevel=1}, + }, + damage_groups = {fleshy=2}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {axe = 1, flammable = 2} +}) + +minetest.register_tool("default:axe_stone", { + description = S("Stone Axe"), + inventory_image = "default_tool_stoneaxe.png", + tool_capabilities = { + full_punch_interval = 1.2, + max_drop_level=0, + groupcaps={ + choppy={times={[1]=3.00, [2]=2.00, [3]=1.30}, uses=20, maxlevel=1}, + }, + damage_groups = {fleshy=3}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {axe = 1} +}) + +minetest.register_tool("default:axe_bronze", { + description = S("Bronze Axe"), + inventory_image = "default_tool_bronzeaxe.png", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=1, + groupcaps={ + choppy={times={[1]=2.75, [2]=1.70, [3]=1.15}, uses=20, maxlevel=2}, + }, + damage_groups = {fleshy=4}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {axe = 1} +}) + +minetest.register_tool("default:axe_steel", { + description = S("Steel Axe"), + inventory_image = "default_tool_steelaxe.png", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=1, + groupcaps={ + choppy={times={[1]=2.50, [2]=1.40, [3]=1.00}, uses=20, maxlevel=2}, + }, + damage_groups = {fleshy=4}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {axe = 1} +}) + +minetest.register_tool("default:axe_mese", { + description = S("Mese Axe"), + inventory_image = "default_tool_meseaxe.png", + tool_capabilities = { + full_punch_interval = 0.9, + max_drop_level=1, + groupcaps={ + choppy={times={[1]=2.20, [2]=1.00, [3]=0.60}, uses=20, maxlevel=3}, + }, + damage_groups = {fleshy=6}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {axe = 1} +}) + +minetest.register_tool("default:axe_diamond", { + description = S("Diamond Axe"), + inventory_image = "default_tool_diamondaxe.png", + tool_capabilities = { + full_punch_interval = 0.9, + max_drop_level=1, + groupcaps={ + choppy={times={[1]=2.10, [2]=0.90, [3]=0.50}, uses=30, maxlevel=3}, + }, + damage_groups = {fleshy=7}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {axe = 1} +}) + +-- +-- Swords +-- + +minetest.register_tool("default:sword_wood", { + description = S("Wooden Sword"), + inventory_image = "default_tool_woodsword.png", + tool_capabilities = { + full_punch_interval = 1, + max_drop_level=0, + groupcaps={ + snappy={times={[2]=1.6, [3]=0.40}, uses=10, maxlevel=1}, + }, + damage_groups = {fleshy=2}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {sword = 1, flammable = 2} +}) + +minetest.register_tool("default:sword_stone", { + description = S("Stone Sword"), + inventory_image = "default_tool_stonesword.png", + tool_capabilities = { + full_punch_interval = 1.2, + max_drop_level=0, + groupcaps={ + snappy={times={[2]=1.4, [3]=0.40}, uses=20, maxlevel=1}, + }, + damage_groups = {fleshy=4}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {sword = 1} +}) + +minetest.register_tool("default:sword_bronze", { + description = S("Bronze Sword"), + inventory_image = "default_tool_bronzesword.png", + tool_capabilities = { + full_punch_interval = 0.8, + max_drop_level=1, + groupcaps={ + snappy={times={[1]=2.75, [2]=1.30, [3]=0.375}, uses=25, maxlevel=2}, + }, + damage_groups = {fleshy=6}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {sword = 1} +}) + +minetest.register_tool("default:sword_steel", { + description = S("Steel Sword"), + inventory_image = "default_tool_steelsword.png", + tool_capabilities = { + full_punch_interval = 0.8, + max_drop_level=1, + groupcaps={ + snappy={times={[1]=2.5, [2]=1.20, [3]=0.35}, uses=30, maxlevel=2}, + }, + damage_groups = {fleshy=6}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {sword = 1} +}) + +minetest.register_tool("default:sword_mese", { + description = S("Mese Sword"), + inventory_image = "default_tool_mesesword.png", + tool_capabilities = { + full_punch_interval = 0.7, + max_drop_level=1, + groupcaps={ + snappy={times={[1]=2.0, [2]=1.00, [3]=0.35}, uses=30, maxlevel=3}, + }, + damage_groups = {fleshy=7}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {sword = 1} +}) + +minetest.register_tool("default:sword_diamond", { + description = S("Diamond Sword"), + inventory_image = "default_tool_diamondsword.png", + tool_capabilities = { + full_punch_interval = 0.7, + max_drop_level=1, + groupcaps={ + snappy={times={[1]=1.90, [2]=0.90, [3]=0.30}, uses=40, maxlevel=3}, + }, + damage_groups = {fleshy=8}, + }, + sound = {breaks = "default_tool_breaks"}, + groups = {sword = 1} +}) + +-- +-- Register Craft Recipies +-- + +local craft_ingreds = { + wood = "group:wood", + stone = "group:stone", + steel = "default:steel_ingot", + bronze = "default:bronze_ingot", + mese = "default:mese_crystal", + diamond = "default:diamond" +} + +for name, mat in pairs(craft_ingreds) do + minetest.register_craft({ + output = "default:pick_".. name, + recipe = { + {mat, mat, mat}, + {"", "group:stick", ""}, + {"", "group:stick", ""} + } + }) + + minetest.register_craft({ + output = "default:shovel_".. name, + recipe = { + {mat}, + {"group:stick"}, + {"group:stick"} + } + }) + + minetest.register_craft({ + output = "default:axe_".. name, + recipe = { + {mat, mat}, + {mat, "group:stick"}, + {"", "group:stick"} + } + }) + + minetest.register_craft({ + output = "default:sword_".. name, + recipe = { + {mat}, + {mat}, + {"group:stick"} + } + }) +end + +minetest.register_craft({ + type = "fuel", + recipe = "default:pick_wood", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:shovel_wood", + burntime = 4, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:axe_wood", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:sword_wood", + burntime = 5, +}) diff --git a/mods/default/torch.lua b/mods/default/torch.lua new file mode 100644 index 00000000..e8f734c7 --- /dev/null +++ b/mods/default/torch.lua @@ -0,0 +1,157 @@ +-- default/torch.lua + +-- support for MT game translation. +local S = default.get_translator + +local function on_flood(pos, oldnode, newnode) + minetest.add_item(pos, ItemStack("default:torch 1")) + -- Play flame-extinguish sound if liquid is not an 'igniter' + local nodedef = minetest.registered_items[newnode.name] + if not (nodedef and nodedef.groups and + nodedef.groups.igniter and nodedef.groups.igniter > 0) then + minetest.sound_play( + "default_cool_lava", + {pos = pos, max_hear_distance = 16, gain = 0.07}, + true + ) + end + -- Remove the torch node + return false +end + +minetest.register_node("default:torch", { + description = S("Torch"), + drawtype = "mesh", + mesh = "torch_floor.obj", + inventory_image = "default_torch_on_floor.png", + wield_image = "default_torch_on_floor.png", + tiles = {{ + name = "default_torch_on_floor_animated.png", + animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} + }}, + use_texture_alpha = "clip", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + liquids_pointable = false, + light_source = 12, + groups = {choppy=2, dig_immediate=3, flammable=1, attached_node=1, torch=1}, + drop = "default:torch", + selection_box = { + type = "wallmounted", + wall_bottom = {-1/8, -1/2, -1/8, 1/8, 2/16, 1/8}, + }, + sounds = default.node_sound_wood_defaults(), + on_place = function(itemstack, placer, pointed_thing) + local under = pointed_thing.under + local node = minetest.get_node(under) + local def = minetest.registered_nodes[node.name] + if def and def.on_rightclick and + not (placer and placer:is_player() and + placer:get_player_control().sneak) then + return def.on_rightclick(under, node, placer, itemstack, + pointed_thing) or itemstack + end + + local above = pointed_thing.above + local wdir = minetest.dir_to_wallmounted(vector.subtract(under, above)) + local fakestack = itemstack + if wdir == 0 then + fakestack:set_name("default:torch_ceiling") + elseif wdir == 1 then + fakestack:set_name("default:torch") + else + fakestack:set_name("default:torch_wall") + end + + itemstack = minetest.item_place(fakestack, placer, pointed_thing, wdir) + itemstack:set_name("default:torch") + + return itemstack + end, + floodable = true, + on_flood = on_flood, + on_rotate = false +}) + +minetest.register_node("default:torch_wall", { + drawtype = "mesh", + mesh = "torch_wall.obj", + tiles = {{ + name = "default_torch_on_floor_animated.png", + animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} + }}, + use_texture_alpha = "clip", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + light_source = 12, + groups = {choppy=2, dig_immediate=3, flammable=1, not_in_creative_inventory=1, attached_node=1, torch=1}, + drop = "default:torch", + selection_box = { + type = "wallmounted", + wall_side = {-1/2, -1/2, -1/8, -1/8, 1/8, 1/8}, + }, + sounds = default.node_sound_wood_defaults(), + floodable = true, + on_flood = on_flood, + on_rotate = false +}) + +minetest.register_node("default:torch_ceiling", { + drawtype = "mesh", + mesh = "torch_ceiling.obj", + tiles = {{ + name = "default_torch_on_floor_animated.png", + animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} + }}, + use_texture_alpha = "clip", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + light_source = 12, + groups = {choppy=2, dig_immediate=3, flammable=1, not_in_creative_inventory=1, attached_node=1, torch=1}, + drop = "default:torch", + selection_box = { + type = "wallmounted", + wall_top = {-1/8, -1/16, -5/16, 1/8, 1/2, 1/8}, + }, + sounds = default.node_sound_wood_defaults(), + floodable = true, + on_flood = on_flood, + on_rotate = false +}) + +minetest.register_lbm({ + name = "default:3dtorch", + nodenames = {"default:torch", "torches:floor", "torches:wall"}, + action = function(pos, node) + if node.param2 == 0 then + minetest.set_node(pos, {name = "default:torch_ceiling", + param2 = node.param2}) + elseif node.param2 == 1 then + minetest.set_node(pos, {name = "default:torch", + param2 = node.param2}) + else + minetest.set_node(pos, {name = "default:torch_wall", + param2 = node.param2}) + end + end +}) + +minetest.register_craft({ + output = "default:torch 4", + recipe = { + {"default:coal_lump"}, + {"group:stick"}, + } +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:torch", + burntime = 4, +}) diff --git a/mods/default/trees.lua b/mods/default/trees.lua new file mode 100644 index 00000000..24a96cf0 --- /dev/null +++ b/mods/default/trees.lua @@ -0,0 +1,606 @@ +-- default/trees.lua + +-- support for MT game translation. +local S = default.get_translator + +local random = math.random + +-- +-- Grow trees from saplings +-- + +-- 'can grow' function + +function default.can_grow(pos) + local node_under = minetest.get_node_or_nil({x = pos.x, y = pos.y - 1, z = pos.z}) + if not node_under then + return false + end + if minetest.get_item_group(node_under.name, "soil") == 0 then + return false + end + local light_level = minetest.get_node_light(pos) + if not light_level or light_level < 13 then + return false + end + return true +end + + +-- 'is snow nearby' function + +local function is_snow_nearby(pos) + return minetest.find_node_near(pos, 1, {"group:snowy"}) +end + + +-- Grow sapling + +function default.grow_sapling(pos) + if not default.can_grow(pos) then + -- try again 5 min later + minetest.get_node_timer(pos):start(300) + return + end + + local mg_name = minetest.get_mapgen_setting("mg_name") + local node = minetest.get_node(pos) + if node.name == "default:sapling" then + minetest.log("action", "A sapling grows into a tree at ".. + minetest.pos_to_string(pos)) + if mg_name == "v6" then + default.grow_tree(pos, random(1, 4) == 1) + else + default.grow_new_apple_tree(pos) + end + elseif node.name == "default:junglesapling" then + minetest.log("action", "A jungle sapling grows into a tree at ".. + minetest.pos_to_string(pos)) + if mg_name == "v6" then + default.grow_jungle_tree(pos) + else + default.grow_new_jungle_tree(pos) + end + elseif node.name == "default:pine_sapling" then + minetest.log("action", "A pine sapling grows into a tree at ".. + minetest.pos_to_string(pos)) + local snow = is_snow_nearby(pos) + if mg_name == "v6" then + default.grow_pine_tree(pos, snow) + elseif snow then + default.grow_new_snowy_pine_tree(pos) + else + default.grow_new_pine_tree(pos) + end + elseif node.name == "default:acacia_sapling" then + minetest.log("action", "An acacia sapling grows into a tree at ".. + minetest.pos_to_string(pos)) + default.grow_new_acacia_tree(pos) + elseif node.name == "default:aspen_sapling" then + minetest.log("action", "An aspen sapling grows into a tree at ".. + minetest.pos_to_string(pos)) + default.grow_new_aspen_tree(pos) + elseif node.name == "default:bush_sapling" then + minetest.log("action", "A bush sapling grows into a bush at ".. + minetest.pos_to_string(pos)) + default.grow_bush(pos) + elseif node.name == "default:blueberry_bush_sapling" then + minetest.log("action", "A blueberry bush sapling grows into a bush at ".. + minetest.pos_to_string(pos)) + default.grow_blueberry_bush(pos) + elseif node.name == "default:acacia_bush_sapling" then + minetest.log("action", "An acacia bush sapling grows into a bush at ".. + minetest.pos_to_string(pos)) + default.grow_acacia_bush(pos) + elseif node.name == "default:pine_bush_sapling" then + minetest.log("action", "A pine bush sapling grows into a bush at ".. + minetest.pos_to_string(pos)) + default.grow_pine_bush(pos) + elseif node.name == "default:emergent_jungle_sapling" then + minetest.log("action", "An emergent jungle sapling grows into a tree at ".. + minetest.pos_to_string(pos)) + default.grow_new_emergent_jungle_tree(pos) + end +end + +minetest.register_lbm({ + name = "default:convert_saplings_to_node_timer", + nodenames = {"default:sapling", "default:junglesapling", + "default:pine_sapling", "default:acacia_sapling", + "default:aspen_sapling"}, + action = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end +}) + +-- +-- Tree generation +-- + +-- Apple tree and jungle tree trunk and leaves function + +local function add_trunk_and_leaves(data, a, pos, tree_cid, leaves_cid, + height, size, iters, is_apple_tree) + local x, y, z = pos.x, pos.y, pos.z + local c_air = minetest.get_content_id("air") + local c_ignore = minetest.get_content_id("ignore") + local c_apple = minetest.get_content_id("default:apple") + + -- Trunk + data[a:index(x, y, z)] = tree_cid -- Force-place lowest trunk node to replace sapling + for yy = y + 1, y + height - 1 do + local vi = a:index(x, yy, z) + local node_id = data[vi] + if node_id == c_air or node_id == c_ignore or node_id == leaves_cid then + data[vi] = tree_cid + end + end + + -- Force leaves near the trunk + for z_dist = -1, 1 do + for y_dist = -size, 1 do + local vi = a:index(x - 1, y + height + y_dist, z + z_dist) + for x_dist = -1, 1 do + if data[vi] == c_air or data[vi] == c_ignore then + if is_apple_tree and random(1, 8) == 1 then + data[vi] = c_apple + else + data[vi] = leaves_cid + end + end + vi = vi + 1 + end + end + end + + -- Randomly add leaves in 2x2x2 clusters. + for i = 1, iters do + local clust_x = x + random(-size, size - 1) + local clust_y = y + height + random(-size, 0) + local clust_z = z + random(-size, size - 1) + + for xi = 0, 1 do + for yi = 0, 1 do + for zi = 0, 1 do + local vi = a:index(clust_x + xi, clust_y + yi, clust_z + zi) + if data[vi] == c_air or data[vi] == c_ignore then + if is_apple_tree and random(1, 8) == 1 then + data[vi] = c_apple + else + data[vi] = leaves_cid + end + end + end + end + end + end +end + + +-- Apple tree + +function default.grow_tree(pos, is_apple_tree, bad) + --[[ + NOTE: Tree-placing code is currently duplicated in the engine + and in games that have saplings; both are deprecated but not + replaced yet + --]] + if bad then + error("Deprecated use of default.grow_tree") + end + + local x, y, z = pos.x, pos.y, pos.z + local height = random(4, 5) + local c_tree = minetest.get_content_id("default:tree") + local c_leaves = minetest.get_content_id("default:leaves") + + local vm = minetest.get_voxel_manip() + local minp, maxp = vm:read_from_map( + {x = x - 2, y = y, z = z - 2}, + {x = x + 2, y = y + height + 1, z = z + 2} + ) + local a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) + local data = vm:get_data() + + add_trunk_and_leaves(data, a, pos, c_tree, c_leaves, height, 2, 8, is_apple_tree) + + vm:set_data(data) + vm:write_to_map() + vm:update_map() +end + + +-- Jungle tree + +function default.grow_jungle_tree(pos, bad) + --[[ + NOTE: Jungletree-placing code is currently duplicated in the engine + and in games that have saplings; both are deprecated but not + replaced yet + --]] + if bad then + error("Deprecated use of default.grow_jungle_tree") + end + + local x, y, z = pos.x, pos.y, pos.z + local height = random(8, 12) + local c_air = minetest.get_content_id("air") + local c_ignore = minetest.get_content_id("ignore") + local c_jungletree = minetest.get_content_id("default:jungletree") + local c_jungleleaves = minetest.get_content_id("default:jungleleaves") + + local vm = minetest.get_voxel_manip() + local minp, maxp = vm:read_from_map( + {x = x - 3, y = y - 1, z = z - 3}, + {x = x + 3, y = y + height + 1, z = z + 3} + ) + local a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) + local data = vm:get_data() + + add_trunk_and_leaves(data, a, pos, c_jungletree, c_jungleleaves, + height, 3, 30, false) + + -- Roots + for z_dist = -1, 1 do + local vi_1 = a:index(x - 1, y - 1, z + z_dist) + local vi_2 = a:index(x - 1, y, z + z_dist) + for x_dist = -1, 1 do + if random(1, 3) >= 2 then + if data[vi_1] == c_air or data[vi_1] == c_ignore then + data[vi_1] = c_jungletree + elseif data[vi_2] == c_air or data[vi_2] == c_ignore then + data[vi_2] = c_jungletree + end + end + vi_1 = vi_1 + 1 + vi_2 = vi_2 + 1 + end + end + + vm:set_data(data) + vm:write_to_map() + vm:update_map() +end + + +-- Pine tree from mg mapgen mod, design by sfan5, pointy top added by paramat + +local function add_pine_needles(data, vi, c_air, c_ignore, c_snow, c_pine_needles) + local node_id = data[vi] + if node_id == c_air or node_id == c_ignore or node_id == c_snow then + data[vi] = c_pine_needles + end +end + +local function add_snow(data, vi, c_air, c_ignore, c_snow) + local node_id = data[vi] + if node_id == c_air or node_id == c_ignore then + data[vi] = c_snow + end +end + +function default.grow_pine_tree(pos, snow) + local x, y, z = pos.x, pos.y, pos.z + local maxy = y + random(9, 13) -- Trunk top + + local c_air = minetest.get_content_id("air") + local c_ignore = minetest.get_content_id("ignore") + local c_pine_tree = minetest.get_content_id("default:pine_tree") + local c_pine_needles = minetest.get_content_id("default:pine_needles") + local c_snow = minetest.get_content_id("default:snow") + + local vm = minetest.get_voxel_manip() + local minp, maxp = vm:read_from_map( + {x = x - 3, y = y, z = z - 3}, + {x = x + 3, y = maxy + 3, z = z + 3} + ) + local a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) + local data = vm:get_data() + + -- Upper branches layer + local dev = 3 + for yy = maxy - 1, maxy + 1 do + for zz = z - dev, z + dev do + local vi = a:index(x - dev, yy, zz) + local via = a:index(x - dev, yy + 1, zz) + for xx = x - dev, x + dev do + if random() < 0.95 - dev * 0.05 then + add_pine_needles(data, vi, c_air, c_ignore, c_snow, + c_pine_needles) + if snow then + add_snow(data, via, c_air, c_ignore, c_snow) + end + end + vi = vi + 1 + via = via + 1 + end + end + dev = dev - 1 + end + + -- Centre top nodes + add_pine_needles(data, a:index(x, maxy + 1, z), c_air, c_ignore, c_snow, + c_pine_needles) + add_pine_needles(data, a:index(x, maxy + 2, z), c_air, c_ignore, c_snow, + c_pine_needles) -- Paramat added a pointy top node + if snow then + add_snow(data, a:index(x, maxy + 3, z), c_air, c_ignore, c_snow) + end + + -- Lower branches layer + local my = 0 + for i = 1, 20 do -- Random 2x2 squares of needles + local xi = x + random(-3, 2) + local yy = maxy + random(-6, -5) + local zi = z + random(-3, 2) + if yy > my then + my = yy + end + for zz = zi, zi+1 do + local vi = a:index(xi, yy, zz) + local via = a:index(xi, yy + 1, zz) + for xx = xi, xi + 1 do + add_pine_needles(data, vi, c_air, c_ignore, c_snow, + c_pine_needles) + if snow then + add_snow(data, via, c_air, c_ignore, c_snow) + end + vi = vi + 1 + via = via + 1 + end + end + end + + dev = 2 + for yy = my + 1, my + 2 do + for zz = z - dev, z + dev do + local vi = a:index(x - dev, yy, zz) + local via = a:index(x - dev, yy + 1, zz) + for xx = x - dev, x + dev do + if random() < 0.95 - dev * 0.05 then + add_pine_needles(data, vi, c_air, c_ignore, c_snow, + c_pine_needles) + if snow then + add_snow(data, via, c_air, c_ignore, c_snow) + end + end + vi = vi + 1 + via = via + 1 + end + end + dev = dev - 1 + end + + -- Trunk + -- Force-place lowest trunk node to replace sapling + data[a:index(x, y, z)] = c_pine_tree + for yy = y + 1, maxy do + local vi = a:index(x, yy, z) + local node_id = data[vi] + if node_id == c_air or node_id == c_ignore or + node_id == c_pine_needles or node_id == c_snow then + data[vi] = c_pine_tree + end + end + + vm:set_data(data) + vm:write_to_map() + vm:update_map() +end + + +-- New apple tree + +function default.grow_new_apple_tree(pos) + local path = minetest.get_modpath("default") .. + "/schematics/apple_tree_from_sapling.mts" + minetest.place_schematic({x = pos.x - 3, y = pos.y - 1, z = pos.z - 3}, + path, "random", nil, false) +end + + +-- New jungle tree + +function default.grow_new_jungle_tree(pos) + local path = minetest.get_modpath("default") .. + "/schematics/jungle_tree_from_sapling.mts" + minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, + path, "random", nil, false) +end + + +-- New emergent jungle tree + +function default.grow_new_emergent_jungle_tree(pos) + local path = minetest.get_modpath("default") .. + "/schematics/emergent_jungle_tree_from_sapling.mts" + minetest.place_schematic({x = pos.x - 3, y = pos.y - 5, z = pos.z - 3}, + path, "random", nil, false) +end + + +-- New pine tree + +function default.grow_new_pine_tree(pos) + local path + if math.random() > 0.5 then + path = minetest.get_modpath("default") .. + "/schematics/pine_tree_from_sapling.mts" + else + path = minetest.get_modpath("default") .. + "/schematics/small_pine_tree_from_sapling.mts" + end + minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, + path, "0", nil, false) +end + + +-- New snowy pine tree + +function default.grow_new_snowy_pine_tree(pos) + local path + if math.random() > 0.5 then + path = minetest.get_modpath("default") .. + "/schematics/snowy_pine_tree_from_sapling.mts" + else + path = minetest.get_modpath("default") .. + "/schematics/snowy_small_pine_tree_from_sapling.mts" + end + minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, + path, "random", nil, false) +end + + +-- New acacia tree + +function default.grow_new_acacia_tree(pos) + local path = minetest.get_modpath("default") .. + "/schematics/acacia_tree_from_sapling.mts" + minetest.place_schematic({x = pos.x - 4, y = pos.y - 1, z = pos.z - 4}, + path, "random", nil, false) +end + + +-- New aspen tree + +function default.grow_new_aspen_tree(pos) + local path = minetest.get_modpath("default") .. + "/schematics/aspen_tree_from_sapling.mts" + minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, + path, "0", nil, false) +end + + +-- Bushes do not need 'from sapling' schematic variants because +-- only the stem node is force-placed in the schematic. + +-- Bush + +function default.grow_bush(pos) + local path = minetest.get_modpath("default") .. + "/schematics/bush.mts" + minetest.place_schematic({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, + path, "0", nil, false) +end + +-- Blueberry bush + +function default.grow_blueberry_bush(pos) + local path = minetest.get_modpath("default") .. + "/schematics/blueberry_bush.mts" + minetest.place_schematic({x = pos.x - 1, y = pos.y, z = pos.z - 1}, + path, "0", nil, false) +end + + +-- Acacia bush + +function default.grow_acacia_bush(pos) + local path = minetest.get_modpath("default") .. + "/schematics/acacia_bush.mts" + minetest.place_schematic({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, + path, "0", nil, false) +end + + +-- Pine bush + +function default.grow_pine_bush(pos) + local path = minetest.get_modpath("default") .. + "/schematics/pine_bush.mts" + minetest.place_schematic({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, + path, "0", nil, false) +end + + +-- Large cactus + +function default.grow_large_cactus(pos) + local path = minetest.get_modpath("default") .. + "/schematics/large_cactus.mts" + minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, + path, "random", nil, false) +end + + +-- +-- Sapling 'on place' function to check protection of node and resulting tree volume +-- + +function default.sapling_on_place(itemstack, placer, pointed_thing, + sapling_name, minp_relative, maxp_relative, interval) + -- Position of sapling + local pos = pointed_thing.under + local node = minetest.get_node_or_nil(pos) + local pdef = node and minetest.registered_nodes[node.name] + + if pdef and pdef.on_rightclick and + not (placer and placer:is_player() and + placer:get_player_control().sneak) then + return pdef.on_rightclick(pos, node, placer, itemstack, pointed_thing) + end + + if not pdef or not pdef.buildable_to then + pos = pointed_thing.above + node = minetest.get_node_or_nil(pos) + pdef = node and minetest.registered_nodes[node.name] + if not pdef or not pdef.buildable_to then + return itemstack + end + end + + local player_name = placer and placer:get_player_name() or "" + -- Check sapling position for protection + if minetest.is_protected(pos, player_name) then + minetest.record_protection_violation(pos, player_name) + return itemstack + end + -- Check tree volume for protection + if minetest.is_area_protected( + vector.add(pos, minp_relative), + vector.add(pos, maxp_relative), + player_name, + interval) then + minetest.record_protection_violation(pos, player_name) + -- Print extra information to explain +-- minetest.chat_send_player(player_name, +-- itemstack:get_definition().description .. " will intersect protection " .. +-- "on growth") + minetest.chat_send_player(player_name, + S("@1 will intersect protection on growth.", + itemstack:get_definition().description)) + return itemstack + end + + default.log_player_action(placer, "places node", sapling_name, "at", pos) + + local take_item = not minetest.is_creative_enabled(player_name) + local newnode = {name = sapling_name} + local ndef = minetest.registered_nodes[sapling_name] + minetest.set_node(pos, newnode) + + -- Run callback + if ndef and ndef.after_place_node then + -- Deepcopy place_to and pointed_thing because callback can modify it + if ndef.after_place_node(table.copy(pos), placer, + itemstack, table.copy(pointed_thing)) then + take_item = false + end + end + + -- Run script hook + for _, callback in ipairs(minetest.registered_on_placenodes) do + -- Deepcopy pos, node and pointed_thing because callback can modify them + if callback(table.copy(pos), table.copy(newnode), + placer, table.copy(node or {}), + itemstack, table.copy(pointed_thing)) then + take_item = false + end + end + + if take_item then + itemstack:take_item() + end + + return itemstack +end diff --git a/mods/digilines b/mods/digilines new file mode 160000 index 00000000..f03cd028 --- /dev/null +++ b/mods/digilines @@ -0,0 +1 @@ +Subproject commit f03cd02854c12ceb54beddf9fdc9d65001da348a diff --git a/mods/dmobs b/mods/dmobs new file mode 160000 index 00000000..3f94f18e --- /dev/null +++ b/mods/dmobs @@ -0,0 +1 @@ +Subproject commit 3f94f18e4cb6dfcd8db03990267f4730d8552095 diff --git a/mods/doors/README.txt b/mods/doors/README.txt new file mode 100644 index 00000000..f9caaffc --- /dev/null +++ b/mods/doors/README.txt @@ -0,0 +1,87 @@ +Minetest Game mod: doors +======================== +See license.txt for license information. + +Authors of source code +---------------------- +Originally by PilzAdam (MIT) + +Modified by BlockMen (MIT): Added sounds, glass doors (glass, obsidian glass) and trapdoor. + +Modified by sofar (sofar@foo-projects.org) (MIT): +Added Steel trapdoor. +Re-implemented most of the door algorithms, added meshes, UV wrapped texture. +Added doors API to facilitate coding mods accessing and operating doors. +Added Fence Gate model, code, and sounds. + +Various Minetest developers and contributors (MIT) + + +Authors of media (textures) +--------------------------- +Following textures created by Fernando Zapata (CC BY-SA 3.0): + door_wood.png + door_wood_a.png + door_wood_a_r.png + door_wood_b.png + door_wood_b_r.png + +Following textures created by BlockMen (CC BY-SA 3.0): + door_trapdoor.png + door_obsidian_glass_side.png + +Following textures created by celeron55 (CC BY-SA 3.0): + door_glass_a.png + door_glass_b.png + +Following textures created by PenguinDad (CC BY-SA 4.0): + door_glass.png + door_obsidian_glass.png + +Following textures created by sofar (CC-BY-SA-3.0): + doors_trapdoor_steel.png + +Following textures created by paramat (CC-BY-SA-3.0): + door_trapdoor_side.png + doors_trapdoor_steel_side.png + +Obsidian door textures by red-001 based on textures by Pilzadam and BlockMen (CC BY-SA 3.0): + door_obsidian_glass.png + +Glass door textures by Krock and paramat based on textures by VanessaE (CC BY-SA 3.0): + doors_door_glass.png + doors_item_glass.png + +All other textures (created by PilzAdam) (CC BY-SA 3.0): + +Door textures were converted to the new texture map by sofar, paramat and +red-001, under the same license as the originals. + + +Authors of media (models) +------------------------- +Door 3d models by sofar (CC-BY-SA-3.0) + - door_a.obj + - door_b.obj +Fence gate models by sofar (CC-BY-SA-3.0) + - fencegate_open.obj + - fencegate_closed.obj + + +Authors of media (sounds) +------------------------- +Opening-Sound created by CGEffex (CC BY 3.0), modified by BlockMen + door_open.ogg +Closing-Sound created by bennstir (CC BY 3.0) + door_close.ogg +fencegate_open.ogg: + http://www.freesound.org/people/mhtaylor67/sounds/126041/ - (CC0 1.0) +fencegate_close.ogg: + http://www.freesound.org/people/BarkersPinhead/sounds/274807/ - (CC-BY-3.0) + http://www.freesound.org/people/rivernile7/sounds/249573/ - (CC-BY-3.0) +Steel door sounds open & close (CC-BY-3.0) by HazMatt + - http://www.freesound.org/people/HazMattt/sounds/187283/ + doors_steel_door_open.ogg + doors_steel_door_close.ogg +doors_glass_door_open.ogg, doors_glass_door_close.ogg: + https://www.freesound.org/people/SkeetMasterFunk69/sounds/235546/ (CC0 1.0) diff --git a/mods/doors/init.lua b/mods/doors/init.lua new file mode 100644 index 00000000..c5fb4ece --- /dev/null +++ b/mods/doors/init.lua @@ -0,0 +1,924 @@ +-- doors/init.lua + +-- our API object +doors = {} + +doors.registered_doors = {} +doors.registered_trapdoors = {} + +-- Load support for MT game translation. +local S = minetest.get_translator("doors") + + +local function replace_old_owner_information(pos) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("doors_owner") + if owner and owner ~= "" then + meta:set_string("owner", owner) + meta:set_string("doors_owner", "") + end +end + +-- returns an object to a door object or nil +function doors.get(pos) + local node_name = minetest.get_node(pos).name + if doors.registered_doors[node_name] then + -- A normal upright door + return { + pos = pos, + open = function(self, player) + if self:state() then + return false + end + return doors.door_toggle(self.pos, nil, player) + end, + close = function(self, player) + if not self:state() then + return false + end + return doors.door_toggle(self.pos, nil, player) + end, + toggle = function(self, player) + return doors.door_toggle(self.pos, nil, player) + end, + state = function(self) + local state = minetest.get_meta(self.pos):get_int("state") + return state %2 == 1 + end + } + elseif doors.registered_trapdoors[node_name] then + -- A trapdoor + return { + pos = pos, + open = function(self, player) + if self:state() then + return false + end + return doors.trapdoor_toggle(self.pos, nil, player) + end, + close = function(self, player) + if not self:state() then + return false + end + return doors.trapdoor_toggle(self.pos, nil, player) + end, + toggle = function(self, player) + return doors.trapdoor_toggle(self.pos, nil, player) + end, + state = function(self) + return minetest.get_node(self.pos).name:sub(-5) == "_open" + end + } + else + return nil + end +end + +-- this hidden node is placed on top of the bottom, and prevents +-- nodes from being placed in the top half of the door. +minetest.register_node("doors:hidden", { + description = S("Hidden Door Segment"), + inventory_image = "doors_hidden_segment.png^default_invisible_node_overlay.png", + wield_image = "doors_hidden_segment.png^default_invisible_node_overlay.png", + drawtype = "airlike", + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + -- has to be walkable for falling nodes to stop falling. + walkable = true, + pointable = false, + diggable = false, + buildable_to = false, + floodable = false, + drop = "", + groups = {not_in_creative_inventory = 1}, + on_blast = function() end, + -- 1px block inside door hinge near node top + collision_box = { + type = "fixed", + fixed = {-15/32, 13/32, -15/32, -13/32, 1/2, -13/32}, + }, +}) + +-- table used to aid door opening/closing +local transform = { + { + {v = "_a", param2 = 3}, + {v = "_a", param2 = 0}, + {v = "_a", param2 = 1}, + {v = "_a", param2 = 2}, + }, + { + {v = "_c", param2 = 1}, + {v = "_c", param2 = 2}, + {v = "_c", param2 = 3}, + {v = "_c", param2 = 0}, + }, + { + {v = "_b", param2 = 1}, + {v = "_b", param2 = 2}, + {v = "_b", param2 = 3}, + {v = "_b", param2 = 0}, + }, + { + {v = "_d", param2 = 3}, + {v = "_d", param2 = 0}, + {v = "_d", param2 = 1}, + {v = "_d", param2 = 2}, + }, +} + +function doors.door_toggle(pos, node, clicker) + local meta = minetest.get_meta(pos) + node = node or minetest.get_node(pos) + local def = minetest.registered_nodes[node.name] + local name = def.door.name + + local state = meta:get_string("state") + if state == "" then + -- fix up lvm-placed right-hinged doors, default closed + if node.name:sub(-2) == "_b" then + state = 2 + else + state = 0 + end + else + state = tonumber(state) + end + + replace_old_owner_information(pos) + + if clicker and not default.can_interact_with_node(clicker, pos) then + return false + end + + -- until Lua-5.2 we have no bitwise operators :( + if state % 2 == 1 then + state = state - 1 + else + state = state + 1 + end + + local dir = node.param2 + + -- It's possible param2 is messed up, so, validate before using + -- the input data. This indicates something may have rotated + -- the door, even though that is not supported. + if not transform[state + 1] or not transform[state + 1][dir + 1] then + return false + end + + if state % 2 == 0 then + minetest.sound_play(def.door.sounds[1], + {pos = pos, gain = def.door.gains[1], max_hear_distance = 10}, true) + else + minetest.sound_play(def.door.sounds[2], + {pos = pos, gain = def.door.gains[2], max_hear_distance = 10}, true) + end + + minetest.swap_node(pos, { + name = name .. transform[state + 1][dir+1].v, + param2 = transform[state + 1][dir+1].param2 + }) + meta:set_int("state", state) + + return true +end + + +local function on_place_node(place_to, newnode, + placer, oldnode, itemstack, pointed_thing) + -- Run script hook + for _, callback in ipairs(minetest.registered_on_placenodes) do + -- Deepcopy pos, node and pointed_thing because callback can modify them + local place_to_copy = {x = place_to.x, y = place_to.y, z = place_to.z} + local newnode_copy = + {name = newnode.name, param1 = newnode.param1, param2 = newnode.param2} + local oldnode_copy = + {name = oldnode.name, param1 = oldnode.param1, param2 = oldnode.param2} + local pointed_thing_copy = { + type = pointed_thing.type, + above = vector.new(pointed_thing.above), + under = vector.new(pointed_thing.under), + ref = pointed_thing.ref, + } + callback(place_to_copy, newnode_copy, placer, + oldnode_copy, itemstack, pointed_thing_copy) + end +end + +local function can_dig_door(pos, digger) + replace_old_owner_information(pos) + return default.can_interact_with_node(digger, pos) +end + +function doors.register(name, def) + if not name:find(":") then + name = "doors:" .. name + end + + -- replace old doors of this type automatically + minetest.register_lbm({ + name = ":doors:replace_" .. name:gsub(":", "_"), + nodenames = {name.."_b_1", name.."_b_2"}, + action = function(pos, node) + local l = tonumber(node.name:sub(-1)) + local meta = minetest.get_meta(pos) + local h = meta:get_int("right") + 1 + local p2 = node.param2 + local replace = { + {{type = "a", state = 0}, {type = "a", state = 3}}, + {{type = "b", state = 1}, {type = "b", state = 2}} + } + local new = replace[l][h] + -- retain infotext and doors_owner fields + minetest.swap_node(pos, {name = name .. "_" .. new.type, param2 = p2}) + meta:set_int("state", new.state) + -- properly place doors:hidden at the right spot + local p3 = p2 + if new.state >= 2 then + p3 = (p3 + 3) % 4 + end + if new.state % 2 == 1 then + if new.state >= 2 then + p3 = (p3 + 1) % 4 + else + p3 = (p3 + 3) % 4 + end + end + -- wipe meta on top node as it's unused + minetest.set_node({x = pos.x, y = pos.y + 1, z = pos.z}, + {name = "doors:hidden", param2 = p3}) + end + }) + + minetest.register_craftitem(":" .. name, { + description = def.description, + inventory_image = def.inventory_image, + groups = table.copy(def.groups), + + on_place = function(itemstack, placer, pointed_thing) + local pos + + if pointed_thing.type ~= "node" then + return itemstack + end + + local doorname = itemstack:get_name() + local node = minetest.get_node(pointed_thing.under) + local pdef = minetest.registered_nodes[node.name] + if pdef and pdef.on_rightclick and + not (placer and placer:is_player() and + placer:get_player_control().sneak) then + return pdef.on_rightclick(pointed_thing.under, + node, placer, itemstack, pointed_thing) + end + + if pdef and pdef.buildable_to then + pos = pointed_thing.under + else + pos = pointed_thing.above + node = minetest.get_node(pos) + pdef = minetest.registered_nodes[node.name] + if not pdef or not pdef.buildable_to then + return itemstack + end + end + + local above = {x = pos.x, y = pos.y + 1, z = pos.z} + local top_node = minetest.get_node_or_nil(above) + local topdef = top_node and minetest.registered_nodes[top_node.name] + + if not topdef or not topdef.buildable_to then + return itemstack + end + + local pn = placer and placer:get_player_name() or "" + if minetest.is_protected(pos, pn) or minetest.is_protected(above, pn) then + return itemstack + end + + local dir = placer and minetest.dir_to_facedir(placer:get_look_dir()) or 0 + + local ref = { + {x = -1, y = 0, z = 0}, + {x = 0, y = 0, z = 1}, + {x = 1, y = 0, z = 0}, + {x = 0, y = 0, z = -1}, + } + + local aside = { + x = pos.x + ref[dir + 1].x, + y = pos.y + ref[dir + 1].y, + z = pos.z + ref[dir + 1].z, + } + + local state = 0 + if minetest.get_item_group(minetest.get_node(aside).name, "door") == 1 then + state = state + 2 + minetest.set_node(pos, {name = doorname .. "_b", param2 = dir}) + minetest.set_node(above, {name = "doors:hidden", param2 = (dir + 3) % 4}) + else + minetest.set_node(pos, {name = doorname .. "_a", param2 = dir}) + minetest.set_node(above, {name = "doors:hidden", param2 = dir}) + end + + local meta = minetest.get_meta(pos) + meta:set_int("state", state) + + if def.protected then + meta:set_string("owner", pn) + meta:set_string("infotext", def.description .. "\n" .. S("Owned by @1", pn)) + end + + if not minetest.is_creative_enabled(pn) then + itemstack:take_item() + end + + minetest.sound_play(def.sounds.place, {pos = pos}, true) + + on_place_node(pos, minetest.get_node(pos), + placer, node, itemstack, pointed_thing) + + return itemstack + end + }) + def.inventory_image = nil + + if def.recipe then + minetest.register_craft({ + output = name, + recipe = def.recipe, + }) + end + def.recipe = nil + + if not def.sounds then + def.sounds = default.node_sound_wood_defaults() + end + + if not def.sound_open then + def.sound_open = "doors_door_open" + end + + if not def.sound_close then + def.sound_close = "doors_door_close" + end + + if not def.gain_open then + def.gain_open = 0.3 + end + + if not def.gain_close then + def.gain_close = 0.3 + end + + def.groups.not_in_creative_inventory = 1 + def.groups.door = 1 + def.drop = name + def.door = { + name = name, + sounds = {def.sound_close, def.sound_open}, + gains = {def.gain_close, def.gain_open}, + } + if not def.on_rightclick then + def.on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + doors.door_toggle(pos, node, clicker) + return itemstack + end + end + def.after_dig_node = function(pos, node, meta, digger) + minetest.remove_node({x = pos.x, y = pos.y + 1, z = pos.z}) + minetest.check_for_falling({x = pos.x, y = pos.y + 1, z = pos.z}) + end + def.on_rotate = function(pos, node, user, mode, new_param2) + return false + end + + if def.protected then + def.can_dig = can_dig_door + def.on_blast = function() end + def.on_key_use = function(pos, player) + local door = doors.get(pos) + door:toggle(player) + end + def.on_skeleton_key_use = function(pos, player, newsecret) + replace_old_owner_information(pos) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + local pname = player:get_player_name() + + -- verify placer is owner of lockable door + if owner ~= pname then + minetest.record_protection_violation(pos, pname) + minetest.chat_send_player(pname, S("You do not own this locked door.")) + return nil + end + + local secret = meta:get_string("key_lock_secret") + if secret == "" then + secret = newsecret + meta:set_string("key_lock_secret", secret) + end + + return secret, S("a locked door"), owner + end + def.node_dig_prediction = "" + else + def.on_blast = function(pos, intensity) + minetest.remove_node(pos) + -- hidden node doesn't get blasted away. + minetest.remove_node({x = pos.x, y = pos.y + 1, z = pos.z}) + return {name} + end + end + + def.on_destruct = function(pos) + minetest.remove_node({x = pos.x, y = pos.y + 1, z = pos.z}) + end + + def.drawtype = "mesh" + def.paramtype = "light" + def.paramtype2 = "facedir" + def.sunlight_propagates = true + def.walkable = true + def.is_ground_content = false + def.buildable_to = false + def.selection_box = {type = "fixed", fixed = {-1/2,-1/2,-1/2,1/2,3/2,-6/16}} + def.collision_box = {type = "fixed", fixed = {-1/2,-1/2,-1/2,1/2,3/2,-6/16}} + def.use_texture_alpha = def.use_texture_alpha or "clip" + + def.mesh = "door_a.b3d" + minetest.register_node(":" .. name .. "_a", table.copy(def)) + + def.mesh = "door_b.b3d" + minetest.register_node(":" .. name .. "_b", table.copy(def)) + + def.mesh = "door_b.b3d" + minetest.register_node(":" .. name .. "_c", table.copy(def)) + + def.mesh = "door_a.b3d" + minetest.register_node(":" .. name .. "_d", table.copy(def)) + + doors.registered_doors[name .. "_a"] = true + doors.registered_doors[name .. "_b"] = true + doors.registered_doors[name .. "_c"] = true + doors.registered_doors[name .. "_d"] = true +end + +doors.register("door_wood", { + tiles = {{ name = "doors_door_wood.png", backface_culling = true }}, + description = S("Wooden Door"), + inventory_image = "doors_item_wood.png", + groups = {node = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + gain_open = 0.06, + gain_close = 0.13, + recipe = { + {"group:wood", "group:wood"}, + {"group:wood", "group:wood"}, + {"group:wood", "group:wood"}, + } +}) + +doors.register("door_steel", { + tiles = {{name = "doors_door_steel.png", backface_culling = true}}, + description = S("Steel Door"), + inventory_image = "doors_item_steel.png", + protected = true, + groups = {node = 1, cracky = 1, level = 2}, + sounds = default.node_sound_metal_defaults(), + sound_open = "doors_steel_door_open", + sound_close = "doors_steel_door_close", + gain_open = 0.2, + gain_close = 0.2, + recipe = { + {"default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot"}, + } +}) + +doors.register("door_glass", { + tiles = {"doors_door_glass.png"}, + description = S("Glass Door"), + inventory_image = "doors_item_glass.png", + groups = {node = 1, cracky=3, oddly_breakable_by_hand=3}, + sounds = default.node_sound_glass_defaults(), + sound_open = "doors_glass_door_open", + sound_close = "doors_glass_door_close", + gain_open = 0.3, + gain_close = 0.25, + recipe = { + {"default:glass", "default:glass"}, + {"default:glass", "default:glass"}, + {"default:glass", "default:glass"}, + } +}) + +doors.register("door_obsidian_glass", { + tiles = {"doors_door_obsidian_glass.png"}, + description = S("Obsidian Glass Door"), + inventory_image = "doors_item_obsidian_glass.png", + groups = {node = 1, cracky=3}, + sounds = default.node_sound_glass_defaults(), + sound_open = "doors_glass_door_open", + sound_close = "doors_glass_door_close", + gain_open = 0.3, + gain_close = 0.25, + recipe = { + {"default:obsidian_glass", "default:obsidian_glass"}, + {"default:obsidian_glass", "default:obsidian_glass"}, + {"default:obsidian_glass", "default:obsidian_glass"}, + }, +}) + +-- Capture mods using the old API as best as possible. +function doors.register_door(name, def) + if def.only_placer_can_open then + def.protected = true + end + def.only_placer_can_open = nil + + local i = name:find(":") + local modname = name:sub(1, i - 1) + if not def.tiles then + if def.protected then + def.tiles = {{name = "doors_door_steel.png", backface_culling = true}} + else + def.tiles = {{name = "doors_door_wood.png", backface_culling = true}} + end + minetest.log("warning", modname .. " registered door \"" .. name .. "\" " .. + "using deprecated API method \"doors.register_door()\" but " .. + "did not provide the \"tiles\" parameter. A fallback tiledef " .. + "will be used instead.") + end + + doors.register(name, def) +end + +----trapdoor---- + +function doors.trapdoor_toggle(pos, node, clicker) + node = node or minetest.get_node(pos) + + replace_old_owner_information(pos) + + if clicker and not default.can_interact_with_node(clicker, pos) then + return false + end + + local def = minetest.registered_nodes[node.name] + + if string.sub(node.name, -5) == "_open" then + minetest.sound_play(def.sound_close, + {pos = pos, gain = def.gain_close, max_hear_distance = 10}, true) + minetest.swap_node(pos, {name = string.sub(node.name, 1, + string.len(node.name) - 5), param1 = node.param1, param2 = node.param2}) + else + minetest.sound_play(def.sound_open, + {pos = pos, gain = def.gain_open, max_hear_distance = 10}, true) + minetest.swap_node(pos, {name = node.name .. "_open", + param1 = node.param1, param2 = node.param2}) + end +end + +function doors.register_trapdoor(name, def) + if not name:find(":") then + name = "doors:" .. name + end + + local name_closed = name + local name_opened = name.."_open" + + def.on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + doors.trapdoor_toggle(pos, node, clicker) + return itemstack + end + + -- Common trapdoor configuration + def.drawtype = "nodebox" + def.paramtype = "light" + def.paramtype2 = "facedir" + def.is_ground_content = false + def.use_texture_alpha = def.use_texture_alpha or "clip" + + if def.protected then + def.can_dig = can_dig_door + def.after_place_node = function(pos, placer, itemstack, pointed_thing) + local pn = placer:get_player_name() + local meta = minetest.get_meta(pos) + meta:set_string("owner", pn) + meta:set_string("infotext", def.description .. "\n" .. S("Owned by @1", pn)) + + return minetest.is_creative_enabled(pn) + end + + def.on_blast = function() end + def.on_key_use = function(pos, player) + local door = doors.get(pos) + door:toggle(player) + end + def.on_skeleton_key_use = function(pos, player, newsecret) + replace_old_owner_information(pos) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + local pname = player:get_player_name() + + -- verify placer is owner of lockable door + if owner ~= pname then + minetest.record_protection_violation(pos, pname) + minetest.chat_send_player(pname, S("You do not own this trapdoor.")) + return nil + end + + local secret = meta:get_string("key_lock_secret") + if secret == "" then + secret = newsecret + meta:set_string("key_lock_secret", secret) + end + + return secret, S("a locked trapdoor"), owner + end + def.node_dig_prediction = "" + else + def.on_blast = function(pos, intensity) + minetest.remove_node(pos) + return {name} + end + end + + if not def.sounds then + def.sounds = default.node_sound_wood_defaults() + end + + if not def.sound_open then + def.sound_open = "doors_door_open" + end + + if not def.sound_close then + def.sound_close = "doors_door_close" + end + + if not def.gain_open then + def.gain_open = 0.3 + end + + if not def.gain_close then + def.gain_close = 0.3 + end + + local def_opened = table.copy(def) + local def_closed = table.copy(def) + + if def.nodebox_closed and def.nodebox_opened then + def_closed.node_box = def.nodebox_closed + else + def_closed.node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -6/16, 0.5} + } + end + def_closed.selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -6/16, 0.5} + } + def_closed.tiles = { + def.tile_front, + def.tile_front .. '^[transformFY', + def.tile_side, + def.tile_side, + def.tile_side, + def.tile_side + } + + if def.nodebox_opened and def.nodebox_closed then + def_opened.node_box = def.nodebox_opened + else + def_opened.node_box = { + type = "fixed", + fixed = {-0.5, -0.5, 6/16, 0.5, 0.5, 0.5} + } + end + def_opened.selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, 6/16, 0.5, 0.5, 0.5} + } + def_opened.tiles = { + def.tile_side, + def.tile_side .. '^[transform2', + def.tile_side .. '^[transform3', + def.tile_side .. '^[transform1', + def.tile_front .. '^[transform46', + def.tile_front .. '^[transform6' + } + + def_opened.drop = name_closed + def_opened.groups.not_in_creative_inventory = 1 + + minetest.register_node(name_opened, def_opened) + minetest.register_node(name_closed, def_closed) + + doors.registered_trapdoors[name_opened] = true + doors.registered_trapdoors[name_closed] = true +end + +doors.register_trapdoor("doors:trapdoor", { + description = S("Wooden Trapdoor"), + inventory_image = "doors_trapdoor.png", + wield_image = "doors_trapdoor.png", + tile_front = "doors_trapdoor.png", + tile_side = "doors_trapdoor_side.png", + gain_open = 0.06, + gain_close = 0.13, + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, door = 1}, +}) + +doors.register_trapdoor("doors:trapdoor_steel", { + description = S("Steel Trapdoor"), + inventory_image = "doors_trapdoor_steel.png", + wield_image = "doors_trapdoor_steel.png", + tile_front = "doors_trapdoor_steel.png", + tile_side = "doors_trapdoor_steel_side.png", + protected = true, + sounds = default.node_sound_metal_defaults(), + sound_open = "doors_steel_door_open", + sound_close = "doors_steel_door_close", + gain_open = 0.2, + gain_close = 0.2, + groups = {cracky = 1, level = 2, door = 1}, +}) + +minetest.register_craft({ + output = "doors:trapdoor 2", + recipe = { + {'group:wood', 'group:wood', ''}, + {'group:wood', 'group:wood', ''}, + {'', '', ''}, + } +}) + +minetest.register_craft({ + output = "doors:trapdoor_steel", + recipe = { + {"default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot"}, + } +}) + + +----fence gate---- +local fence_collision_extra = minetest.settings:get_bool("enable_fence_tall") and 3/8 or 0 + +function doors.register_fencegate(name, def) + local fence = { + description = def.description, + drawtype = "mesh", + tiles = {}, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + is_ground_content = false, + drop = name .. "_closed", + connect_sides = {"left", "right"}, + groups = def.groups, + sounds = def.sounds, + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + local node_def = minetest.registered_nodes[node.name] + minetest.swap_node(pos, {name = node_def._gate, param2 = node.param2}) + minetest.sound_play(node_def._gate_sound, {pos = pos, gain = 0.15, + max_hear_distance = 8}, true) + return itemstack + end, + selection_box = { + type = "fixed", + fixed = {-1/2, -1/2, -1/4, 1/2, 1/2, 1/4} + }, + } + + + if type(def.texture) == "string" then + fence.tiles[1] = {name = def.texture, backface_culling = true} + elseif def.texture.backface_culling == nil then + fence.tiles[1] = table.copy(def.texture) + fence.tiles[1].backface_culling = true + else + fence.tiles[1] = def.texture + end + + if not fence.sounds then + fence.sounds = default.node_sound_wood_defaults() + end + + fence.groups.fence = 1 + + local fence_closed = table.copy(fence) + fence_closed.mesh = "doors_fencegate_closed.obj" + fence_closed._gate = name .. "_open" + fence_closed._gate_sound = "doors_fencegate_open" + fence_closed.collision_box = { + type = "fixed", + fixed = {-1/2, -1/2, -1/8, 1/2, 1/2 + fence_collision_extra, 1/8} + } + + local fence_open = table.copy(fence) + fence_open.mesh = "doors_fencegate_open.obj" + fence_open._gate = name .. "_closed" + fence_open._gate_sound = "doors_fencegate_close" + fence_open.groups.not_in_creative_inventory = 1 + fence_open.collision_box = { + type = "fixed", + fixed = {{-1/2, -1/2, -1/8, -3/8, 1/2 + fence_collision_extra, 1/8}, + {-1/2, -3/8, -1/2, -3/8, 3/8, 0 }} + } + + minetest.register_node(":" .. name .. "_closed", fence_closed) + minetest.register_node(":" .. name .. "_open", fence_open) + + minetest.register_craft({ + output = name .. "_closed", + recipe = { + {"group:stick", def.material, "group:stick"}, + {"group:stick", def.material, "group:stick"} + } + }) +end + +doors.register_fencegate("doors:gate_wood", { + description = S("Apple Wood Fence Gate"), + texture = "default_wood.png", + material = "default:wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2} +}) + +doors.register_fencegate("doors:gate_acacia_wood", { + description = S("Acacia Wood Fence Gate"), + texture = "default_acacia_wood.png", + material = "default:acacia_wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2} +}) + +doors.register_fencegate("doors:gate_junglewood", { + description = S("Jungle Wood Fence Gate"), + texture = "default_junglewood.png", + material = "default:junglewood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2} +}) + +doors.register_fencegate("doors:gate_pine_wood", { + description = S("Pine Wood Fence Gate"), + texture = "default_pine_wood.png", + material = "default:pine_wood", + groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3} +}) + +doors.register_fencegate("doors:gate_aspen_wood", { + description = S("Aspen Wood Fence Gate"), + texture = "default_aspen_wood.png", + material = "default:aspen_wood", + groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3} +}) + + +----fuels---- + +minetest.register_craft({ + type = "fuel", + recipe = "doors:trapdoor", + burntime = 7, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "doors:door_wood", + burntime = 14, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "doors:gate_wood_closed", + burntime = 7, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "doors:gate_acacia_wood_closed", + burntime = 8, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "doors:gate_junglewood_closed", + burntime = 9, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "doors:gate_pine_wood_closed", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "doors:gate_aspen_wood_closed", + burntime = 5, +}) diff --git a/mods/doors/license.txt b/mods/doors/license.txt new file mode 100644 index 00000000..8ce73c49 --- /dev/null +++ b/mods/doors/license.txt @@ -0,0 +1,164 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2012-2016 PilzAdam +Copyright (C) 2014-2016 BlockMen +Copyright (C) 2015-2016 sofar (sofar@foo-projects.org) +Copyright (C) 2012-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures, models and sounds) +----------------------------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2011-2016 Fernando Zapata +Copyright (C) 2014-2016 celeron55 +Copyright (C) 2012-2016 PilzAdam +Copyright (C) 2014-2016 BlockMen +Copyright (C) 2015-2016 sofar +Copyright (C) 2016 red-001 +Copyright (C) 2016 paramat + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ + +----------------------- + +Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) +Copyright (C) 2014-2016 PenguinDad + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/4.0/ + +----------------------- + +Attribution 3.0 Unported (CC BY 3.0) +Copyright (C) 2014 CGEffex +Copyright (C) 2014 bennstir +Copyright (C) 2016 BarkersPinhead +Copyright (C) 2016 rivernile7 +Copyright (C) 2016 HazMatt + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by/3.0/ + +----------------------- + +CC0 1.0 Universal (CC0 1.0) Public Domain Dedication +mhtaylor67 +SkeetMasterFunk69 + +No Copyright + +The person who associated a work with this deed has dedicated the work to the public +domain by waiving all of his or her rights to the work worldwide under copyright law, +including all related and neighboring rights, to the extent allowed by law. + +You can copy, modify, distribute and perform the work, even for commercial purposes, all +without asking permission. See Other Information below. + +Other Information + +In no way are the patent or trademark rights of any person affected by CC0, nor are the +rights that other persons may have in the work or in how the work is used, such as +publicity or privacy rights. +Unless expressly stated otherwise, the person who associated a work with this deed makes +no warranties about the work, and disclaims liability for all uses of the work, to the +fullest extent permitted by applicable law. +When using or citing the work, you should not imply endorsement by the author or the +affirmer. + +For more details: +https://creativecommons.org/publicdomain/zero/1.0/ diff --git a/mods/doors/locale/doors.de.tr b/mods/doors/locale/doors.de.tr new file mode 100644 index 00000000..79707ce8 --- /dev/null +++ b/mods/doors/locale/doors.de.tr @@ -0,0 +1,18 @@ +# textdomain: doors +Hidden Door Segment=Verborgenes Türsegment +Owned by @1=Eigentum von @1 +You do not own this locked door.=Diese abgeschlossene Tür gehört Ihnen nicht. +a locked door=eine abgeschlossene Tür +Wooden Door=Holztür +Steel Door=Stahltür +Glass Door=Glastür +Obsidian Glass Door=Obsidianglastür +You do not own this trapdoor.=Diese Falltür gehört Ihnen nicht. +a locked trapdoor=eine abgeschlossene Falltür +Wooden Trapdoor=Holzfalltür +Steel Trapdoor=Stahlfalltür +Apple Wood Fence Gate=Apfelholzzauntor +Acacia Wood Fence Gate=Akazienholzzauntor +Jungle Wood Fence Gate=Dschungelholzzauntor +Pine Wood Fence Gate=Kiefernholzzauntor +Aspen Wood Fence Gate=Espenholzzauntor diff --git a/mods/doors/locale/doors.eo.tr b/mods/doors/locale/doors.eo.tr new file mode 100644 index 00000000..8b7a99a6 --- /dev/null +++ b/mods/doors/locale/doors.eo.tr @@ -0,0 +1,18 @@ +# textdomain: doors +Hidden Door Segment=Kaŝita Porda Segmento +Owned by @1=Posedita de @1 +You do not own this locked door.=Vi ne posedas ĉi tiun ŝlositan pordon. +a locked door=ŝlosita pordo +Wooden Door=Ligna Pordo +Steel Door=Ŝtala Pordo +Glass Door=Vitra Pordo +Obsidian Glass Door=Obsidiana Vitra Pordo +You do not own this trapdoor.=Vi ne posedas ĉi tiun plankpordon. +a locked trapdoor=ŝlosita plankpordo +Wooden Trapdoor=Ligna Plankpordo +Steel Trapdoor=Ŝtala Plankpordo +Apple Wood Fence Gate=Poma Ligna Barila Pordo +Acacia Wood Fence Gate=Akacia Ligna Barila Pordo +Jungle Wood Fence Gate=Ĝangala Ligna Barila Pordo +Pine Wood Fence Gate=Pina Ligna Barila Pordo +Aspen Wood Fence Gate=Tremola Ligna Barila Pordo diff --git a/mods/doors/locale/doors.es.tr b/mods/doors/locale/doors.es.tr new file mode 100644 index 00000000..677f2dfd --- /dev/null +++ b/mods/doors/locale/doors.es.tr @@ -0,0 +1,18 @@ +# textdomain: doors +Hidden Door Segment=Segmento de puerta oculta +Owned by @1=Propiedad de @1 +You do not own this locked door.=Esta puerta cerrada no te pertenece. +a locked door=una puerta cerrada +Wooden Door=Puerta de madera +Steel Door=Puerta de acero +Glass Door=Puerta de vidrio +Obsidian Glass Door=Puerta de vidrio de obsidiana +You do not own this trapdoor.=Esta trampilla no te pertenece. +a locked trapdoor=una trampilla cerrada +Wooden Trapdoor=Trampilla de madera +Steel Trapdoor=Trampilla de acero +Apple Wood Fence Gate=Puerta de cerca de manzano +Acacia Wood Fence Gate=Puerta de cerca de acacia +Jungle Wood Fence Gate=Puerta de cerca de madera tropical +Pine Wood Fence Gate=Puerta de cerca de pino +Aspen Wood Fence Gate=Puerta de cerca de álamo diff --git a/mods/doors/locale/doors.fr.tr b/mods/doors/locale/doors.fr.tr new file mode 100644 index 00000000..930f75cc --- /dev/null +++ b/mods/doors/locale/doors.fr.tr @@ -0,0 +1,18 @@ +# textdomain: doors +Hidden Door Segment=Segment de porte cachée +Owned by @1=Possédée par @1 +You do not own this locked door.=Cette porte vérouillée ne vous appartient pas. +a locked door=une porte verouillée +Wooden Door=Porte en bois +Steel Door=Porte en acier +Glass Door=Porte en verre +Obsidian Glass Door=Porte en verre d'obsidienne +You do not own this trapdoor.=Vous ne possédez pas cette trappe. +a locked trapdoor=une trappe verouillée +Wooden Trapdoor=Trappe en bois +Steel Trapdoor=Trappe en acier +Apple Wood Fence Gate=Porte de clôture en bois de pommier +Acacia Wood Fence Gate=Porte de clôture en bois d'acacia +Jungle Wood Fence Gate=Porte de clôture en bois de la jungle +Pine Wood Fence Gate=Porte de clôture en bois de pin +Aspen Wood Fence Gate=Porte de clôture en bois de tremble diff --git a/mods/doors/locale/doors.id.tr b/mods/doors/locale/doors.id.tr new file mode 100644 index 00000000..3b749049 --- /dev/null +++ b/mods/doors/locale/doors.id.tr @@ -0,0 +1,18 @@ +# textdomain: doors +Hidden Door Segment=Bagian Pintu Tersembunyi +Owned by @1=Milik @1 +You do not own this locked door.=Anda bukan pemilik pintu terkunci ini. +a locked door=pintu terkunci +Wooden Door=Pintu Kayu +Steel Door=Pintu Baja +Glass Door=Pintu Kaca +Obsidian Glass Door=Pintu Kaca Obsidian +You do not own this trapdoor.=Anda bukan pemilik pintu kolong ini. +a locked trapdoor=pintu kolong terkunci +Wooden Trapdoor=Pintu Kolong Kayu +Steel Trapdoor=Pintu Kolong Baja +Apple Wood Fence Gate=Gerbang Kayu Pohon Apel +Acacia Wood Fence Gate=Gerbang Kayu Akasia +Jungle Wood Fence Gate=Gerbang Kayu Pohon Rimba +Pine Wood Fence Gate=Gerbang Kayu Pinus +Aspen Wood Fence Gate=Gerbang Kayu Aspen diff --git a/mods/doors/locale/doors.it.tr b/mods/doors/locale/doors.it.tr new file mode 100644 index 00000000..ccd00d36 --- /dev/null +++ b/mods/doors/locale/doors.it.tr @@ -0,0 +1,18 @@ +# textdomain: doors +Hidden Door Segment=Segmento di porta nascosto +Owned by @1=Di proprietà di @1 +You do not own this locked door.=Non sei il proprietario di questa porta chiusa a chiave. +a locked door=una porta chiusa a chiave +Wooden Door=Porta di legno +Steel Door=Porta d'acciaio +Glass Door=Porta di vetro +Obsidian Glass Door=Porta di vetro d'ossidiana +You do not own this trapdoor.=Non sei il proprietario di questa botola. +a locked trapdoor=una botola chiusa a chiave +Wooden Trapdoor=Botola di legno +Steel Trapdoor=Botola d'acciaio +Apple Wood Fence Gate=Cancello della recinzione di legno di melo +Acacia Wood Fence Gate=Cancello della recinzione di legno d'acacia +Jungle Wood Fence Gate=Cancello della recinzione di legno della giungla +Pine Wood Fence Gate=Cancello della recinzione di legno di pino +Aspen Wood Fence Gate=Cancello della recinzione di legno di pioppo diff --git a/mods/doors/locale/doors.ja.tr b/mods/doors/locale/doors.ja.tr new file mode 100644 index 00000000..910e0ae1 --- /dev/null +++ b/mods/doors/locale/doors.ja.tr @@ -0,0 +1,18 @@ +# textdomain: doors +Hidden Door Segment=隠しドアの区切り +Owned by @1=所有者 @1 +You do not own this locked door.=あなたはこのロックされたドアの所有者ではありません。 +a locked door=ロックされたドア +Wooden Door=木のドア +Steel Door=鉄のドア +Glass Door=ガラスのドア +Obsidian Glass Door=黒曜石のガラスのドア +You do not own this trapdoor.=あなたはこのトラップドアの所有者ではありません。 +a locked trapdoor=ロックされたトラップドア +Wooden Trapdoor=木のトラップドア +Steel Trapdoor=鉄のトラップドア +Apple Wood Fence Gate=リンゴのフェンスゲート +Acacia Wood Fence Gate=アカシアのフェンスゲート +Jungle Wood Fence Gate=ジャングルのフェンスゲート +Pine Wood Fence Gate=マツのフェンスゲート +Aspen Wood Fence Gate=ポプラのフェンスゲート diff --git a/mods/doors/locale/doors.jbo.tr b/mods/doors/locale/doors.jbo.tr new file mode 100644 index 00000000..f15854eb --- /dev/null +++ b/mods/doors/locale/doors.jbo.tr @@ -0,0 +1,18 @@ +# textdomain: doors +Hidden Door Segment=lo se mipri pagbu be lo vrogai +Owned by @1=.i ti ponse zoi zo'i.@1.zo'i +You do not own this locked door.=.i do na ponse lo ti selstela vrogai +a locked door=lo selstela vrogai +Wooden Door=lo mudri vrogai +Steel Door=lo gasta vrogai +Glass Door=lo blaci vrogai +Obsidian Glass Door=lo je'erma'ablaci blaci vrogai +You do not own this trapdoor.=.i do na ponse lo ti selstela lolvrogai +a locked trapdoor=lo selstela lolvrogai +Wooden Trapdoor=lo mudri lolvrogai +Steel Trapdoor=lo gasta lolvrogai +Apple Wood Fence Gate=lo plisymudri garbimvrogai +Acacia Wood Fence Gate=lo atkaci,ia mudri garbimvrogai +Jungle Wood Fence Gate=lo glatimdemricfoi mudri garbimvrogai +Pine Wood Fence Gate=lo ku'urmudri garbimvrogai +Aspen Wood Fence Gate=lo mudrpopulu garbimvrogai diff --git a/mods/doors/locale/doors.ms.tr b/mods/doors/locale/doors.ms.tr new file mode 100644 index 00000000..93d6df2e --- /dev/null +++ b/mods/doors/locale/doors.ms.tr @@ -0,0 +1,18 @@ +# textdomain: doors +Hidden Door Segment=Segmen Pintu Tersembunyi +Owned by @1=Milik @1 +You do not own this locked door.=Anda bukan pemilik pintu berkunci ini. +a locked door=pintu berkunci +Wooden Door=Pintu Kayu +Steel Door=Pintu Keluli +Glass Door=Pintu Kaca +Obsidian Glass Door=Pintu Kaca Obsidia +You do not own this trapdoor.=Anda bukan pemilik pintu kolong ini. +a locked trapdoor=pintu kolong berkunci +Wooden Trapdoor=Pintu Kolong Kayu +Steel Trapdoor=Pintu Kolong Keluli +Apple Wood Fence Gate=Pintu Pagar Kayu Epal +Acacia Wood Fence Gate=Pintu Pagar Kayu Akasia +Jungle Wood Fence Gate=Pintu Pagar Kayu Hutan +Pine Wood Fence Gate=Pintu Pagar Kayu Pain +Aspen Wood Fence Gate=Pintu Pagar Kayu Aspen diff --git a/mods/doors/locale/doors.pl.tr b/mods/doors/locale/doors.pl.tr new file mode 100644 index 00000000..6aec2852 --- /dev/null +++ b/mods/doors/locale/doors.pl.tr @@ -0,0 +1,18 @@ +# textdomain: doors +Hidden Door Segment=Ukryty segment drzwi +Owned by @1=Właściciel: @1 +You do not own this locked door.=Nie jesteś właścicielem tych zablokowanych drzwi. +a locked door=zablokowane drzwi +Wooden Door=Drewniane drzwi +Steel Door=Stalowe drzwi +Glass Door=Szklane drzwi +Obsidian Glass Door=Drzwi z obsydianowego szkła +You do not own this trapdoor.=Nie jesteś właścicielem tego włazu. +a locked trapdoor=zablokowany właz +Wooden Trapdoor=Drewniany właz +Steel Trapdoor=Stalowy właz +Apple Wood Fence Gate=Furtka z jabłkowego drzewa +Acacia Wood Fence Gate=Furtka z akacjowego drzewa +Jungle Wood Fence Gate=Furtka z dżunglowego drzewa +Pine Wood Fence Gate=Furtka z sosnowego drzewa +Aspen Wood Fence Gate=Furtka z brzozowego drzewa diff --git a/mods/doors/locale/doors.pt_BR.tr b/mods/doors/locale/doors.pt_BR.tr new file mode 100644 index 00000000..82324424 --- /dev/null +++ b/mods/doors/locale/doors.pt_BR.tr @@ -0,0 +1,18 @@ +# textdomain: doors +Hidden Door Segment=Segmento de Porta Oculto +Owned by @1=Propriedade de @1 +You do not own this locked door.=Você não é dono desta porta trancada. +a locked door=uma porta trancada +Wooden Door=Porta de Madeira +Steel Door=Porta de Aço +Glass Door=Porta de Vidro +Obsidian Glass Door=Porta de Vidro de Obsidiana +You do not own this trapdoor.=Você não é dono deste alçapão. +a locked trapdoor=um alçapão trancado +Wooden Trapdoor=Alçapão de Madeira +Steel Trapdoor=Alçapão de Aço +Apple Wood Fence Gate=Portão de Cerca de Macieira +Acacia Wood Fence Gate=Portão de Cerca de Acácia +Jungle Wood Fence Gate=Portão de Cerca de Madeira da Selva +Pine Wood Fence Gate=Portão de Cerca de Pinheiro +Aspen Wood Fence Gate=Portão de Cerca de Álamo diff --git a/mods/doors/locale/doors.ru.tr b/mods/doors/locale/doors.ru.tr new file mode 100644 index 00000000..dc5c3c09 --- /dev/null +++ b/mods/doors/locale/doors.ru.tr @@ -0,0 +1,18 @@ +# textdomain: doors +Hidden Door Segment=Спрятанная Часть Двери +Owned by @1=Владелец: @1 +You do not own this locked door.=Вы не владелец этой заблокированной двери. +a locked door=заблокированная дверь +Wooden Door=Деревянная Дверь +Steel Door=Стальная Дверь +Glass Door=Стеклянная Дверь +Obsidian Glass Door=Дверь Из Обсидианового Стекла +You do not own this trapdoor.=Вы не владелец этого люка. +a locked trapdoor=заблокированный люк +Wooden Trapdoor=Деревянный Люк +Steel Trapdoor=Стальной Люк +Apple Wood Fence Gate=Яблоневая Деревянная Калитка +Acacia Wood Fence Gate=Деревянная Калитка Из Акации +Jungle Wood Fence Gate=Деревянная Калитка Из Тропического Дерева +Pine Wood Fence Gate=Сосновая Деревянная Калитка +Aspen Wood Fence Gate=Осиновая Деревянная Калитка diff --git a/mods/doors/locale/doors.sk.tr b/mods/doors/locale/doors.sk.tr new file mode 100644 index 00000000..e6943ac3 --- /dev/null +++ b/mods/doors/locale/doors.sk.tr @@ -0,0 +1,18 @@ +# textdomain: doors +Hidden Door Segment=Skrytá časť dverí +Owned by @1=Vlastník - @1 +You do not own this locked door.=Nevlastníš tieto uzamknuté dvere. +a locked door=uzamknuté dvere +Wooden Door=Drevené dvere +Steel Door=Oceľové dvere +Glass Door=Sklenené dvere +Obsidian Glass Door=Obsidiánové sklenené dvere +You do not own this trapdoor.=Nevlastníš tieto padacie dvere. +a locked trapdoor=uzamknuté padacie dvere +Wooden Trapdoor=Drevené padacie dvere +Steel Trapdoor=Oceľové padacie dvere +Apple Wood Fence Gate=Drevený plot z jablone +Acacia Wood Fence Gate=Drevený plot z akácie +Jungle Wood Fence Gate=Drevený plot z džungľového dreva +Pine Wood Fence Gate=Drevený plot z borovice +Aspen Wood Fence Gate=Drevený plot z osiky diff --git a/mods/doors/locale/doors.sv.tr b/mods/doors/locale/doors.sv.tr new file mode 100644 index 00000000..9f31d9c8 --- /dev/null +++ b/mods/doors/locale/doors.sv.tr @@ -0,0 +1,18 @@ +# textdomain: doors +Hidden Door Segment=Dolt dörrsegment +Owned by @1=Ägd av @1 +You do not own this locked door.=Du äger inte denna låsta dörr. +a locked door=en låst dörr +Wooden Door=Trädörr +Steel Door=Ståldörr +Glass Door=Glasdörr +Obsidian Glass Door=Obsidianglasdörr +You do not own this trapdoor.=Du äger inte denna fallucka +a locked trapdoor=en låst fallucka +Wooden Trapdoor=Träfallucka +Steel Trapdoor=Stålfallucka +Apple Wood Fence Gate=Äppleträfallucka +Acacia Wood Fence Gate=Akaciaträfallucka +Jungle Wood Fence Gate=Djungelträfallucka +Pine Wood Fence Gate=Tallträfallucka +Aspen Wood Fence Gate=Aspträfallucka diff --git a/mods/doors/locale/doors.uk.tr b/mods/doors/locale/doors.uk.tr new file mode 100644 index 00000000..ae2ad14e --- /dev/null +++ b/mods/doors/locale/doors.uk.tr @@ -0,0 +1,18 @@ +# textdomain: doors +Hidden Door Segment=Захована Частина Дверей +Owned by @1=Власник: @1 +You do not own this locked door.=Ви не власник цих заблокованих дверей. +a locked door=заблоковані двері +Wooden Door=Дерев'яні двері +Steel Door=Сталеві Двері +Glass Door=Скляні двері +Obsidian Glass Door=Двері З Обсидіанового Скла +You do not own this trapdoor.=Ви не є власником цього люка. +a locked trapdoor=заблокований люк +Wooden Trapdoor=Дерев'яний Люк +Steel Trapdoor=Сталевий Люк +Apple Wood Fence Gate=Яблунева Дерев'яна Хвіртка +Acacia Wood Fence Gate=Дерев'яна Хвіртка З Акації +Jungle Wood Fence Gate=Дерев'яна Хвіртка З Тропічного Дерева +Pine Wood Fence Gate=Соснова Дерев'яна Хвіртка +Aspen Wood Fence Gate=Осикова Дерев'яна Хвіртка diff --git a/mods/doors/locale/doors.zh_CN.tr b/mods/doors/locale/doors.zh_CN.tr new file mode 100644 index 00000000..cf32996e --- /dev/null +++ b/mods/doors/locale/doors.zh_CN.tr @@ -0,0 +1,18 @@ +# textdomain: doors +Hidden Door Segment=隐藏门段 +Owned by @1=由@1所有 +You do not own this locked door.=这个门不属于你。 +a locked door=一扇已上锁的门 +Wooden Door=木门 +Steel Door=铁门 +Glass Door=玻璃门 +Obsidian Glass Door=黑曜石玻璃门 +You do not own this trapdoor.=这个活板门不属于你。 +a locked trapdoor=一扇已上锁的活板门 +Wooden Trapdoor=木活板门 +Steel Trapdoor=铁活板门 +Apple Wood Fence Gate=苹果木栅栏门 +Acacia Wood Fence Gate=相思木栅栏门 +Jungle Wood Fence Gate=丛林木栅栏门 +Pine Wood Fence Gate=松木栅栏门 +Aspen Wood Fence Gate=白杨木栅栏门 diff --git a/mods/doors/locale/doors.zh_TW.tr b/mods/doors/locale/doors.zh_TW.tr new file mode 100644 index 00000000..81e06fcc --- /dev/null +++ b/mods/doors/locale/doors.zh_TW.tr @@ -0,0 +1,18 @@ +# textdomain: doors +Hidden Door Segment=隱藏門段 +Owned by @1=由@1擁有 +You do not own this locked door.=這個門不屬於你所有。 +a locked door=一扇已上鎖的門 +Wooden Door=木門 +Steel Door=鐵門 +Glass Door=玻璃門 +Obsidian Glass Door=黑曜石玻璃門 +You do not own this trapdoor.=這個活板門不屬於你所有。 +a locked trapdoor=一扇已上鎖的活板門 +Wooden Trapdoor=木活板門 +Steel Trapdoor=鐵活板門 +Apple Wood Fence Gate=蘋果木柵欄門 +Acacia Wood Fence Gate=相思木柵欄門 +Jungle Wood Fence Gate=叢林木柵欄門 +Pine Wood Fence Gate=松木柵欄門 +Aspen Wood Fence Gate=白楊木柵欄門 diff --git a/mods/doors/locale/template.txt b/mods/doors/locale/template.txt new file mode 100644 index 00000000..8b5c349c --- /dev/null +++ b/mods/doors/locale/template.txt @@ -0,0 +1,18 @@ +# textdomain: doors +Hidden Door Segment= +Owned by @1= +You do not own this locked door.= +a locked door= +Wooden Door= +Steel Door= +Glass Door= +Obsidian Glass Door= +You do not own this trapdoor.= +a locked trapdoor= +Wooden Trapdoor= +Steel Trapdoor= +Apple Wood Fence Gate= +Acacia Wood Fence Gate= +Jungle Wood Fence Gate= +Pine Wood Fence Gate= +Aspen Wood Fence Gate= diff --git a/mods/doors/mod.conf b/mods/doors/mod.conf new file mode 100644 index 00000000..de053c27 --- /dev/null +++ b/mods/doors/mod.conf @@ -0,0 +1,4 @@ +name = doors +description = Minetest Game mod: doors +depends = default +optional_depends = screwdriver diff --git a/mods/doors/models/door.blend b/mods/doors/models/door.blend new file mode 100644 index 00000000..56047b16 Binary files /dev/null and b/mods/doors/models/door.blend differ diff --git a/mods/doors/models/door_a.b3d b/mods/doors/models/door_a.b3d new file mode 100644 index 00000000..7f9249fe Binary files /dev/null and b/mods/doors/models/door_a.b3d differ diff --git a/mods/doors/models/door_b.b3d b/mods/doors/models/door_b.b3d new file mode 100644 index 00000000..77a1a16c Binary files /dev/null and b/mods/doors/models/door_b.b3d differ diff --git a/mods/doors/models/doors_fencegate_closed.obj b/mods/doors/models/doors_fencegate_closed.obj new file mode 100644 index 00000000..0050f70e --- /dev/null +++ b/mods/doors/models/doors_fencegate_closed.obj @@ -0,0 +1,106 @@ +# Blender v2.76 (sub 0) OBJ File: 'gate_closed.blend' +# www.blender.org +mtllib gate_closed.mtl +o Cube_Cube.001 +v -0.625000 -0.500000 0.125000 +v -0.625000 0.500100 0.125000 +v -0.625000 -0.500000 -0.125000 +v -0.625000 0.500100 -0.125000 +v -0.375000 -0.500000 0.125000 +v -0.375000 0.500100 0.125000 +v -0.375000 -0.500000 -0.125000 +v -0.375000 0.500100 -0.125000 +v 0.375000 -0.500000 0.125000 +v 0.375000 0.500100 0.125000 +v 0.375000 -0.500000 -0.125000 +v 0.375000 0.500100 -0.125000 +v 0.625000 -0.500000 0.125000 +v 0.625000 0.500100 0.125000 +v 0.625000 -0.500000 -0.125000 +v 0.625000 0.500100 -0.125000 +v -0.375000 0.187500 0.062500 +v -0.375000 0.312500 0.062500 +v -0.375000 0.187500 -0.062500 +v -0.375000 0.312500 -0.062500 +v 0.375000 0.187500 0.062500 +v 0.375000 0.312500 0.062500 +v 0.375000 0.187500 -0.062500 +v 0.375000 0.312500 -0.062500 +v -0.374831 0.187348 0.062500 +v -0.156342 0.187363 0.062500 +v -0.374831 0.187348 -0.062500 +v -0.156342 0.187363 -0.062500 +v 0.374981 -0.343683 0.062500 +v 0.375065 -0.187304 0.062500 +v 0.374981 -0.343683 -0.062500 +v 0.375065 -0.187304 -0.062500 +vt 0.000000 0.750000 +vt 0.000000 0.500000 +vt 1.000000 0.500000 +vt 1.000000 0.750000 +vt 1.000000 1.000000 +vt -0.000000 1.000000 +vt 1.000000 -0.000000 +vt 1.000000 0.250000 +vt 0.000000 0.250000 +vt -0.000000 0.000000 +vt 0.250000 0.000000 +vt 0.250000 0.250000 +vt 0.250000 0.750000 +vt 0.250000 1.000000 +vt 0.500000 -0.000000 +vt 0.500000 0.250000 +vt 0.500000 0.750000 +vt 0.500000 1.000000 +vt 1.000000 0.625000 +vt 0.000000 0.625000 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt -0.000000 0.687500 +vt 0.000000 0.562500 +vt 1.000000 0.562500 +vt 1.000000 0.687500 +vt 0.813740 0.249033 +vt 0.201557 0.249293 +vt 0.120995 0.125498 +vt 0.987404 0.125469 +vt 0.125000 0.375000 +vt 0.812500 0.375000 +vt 0.937500 0.500000 +vt 0.062500 0.500000 +vt 0.000000 0.125000 +vt 1.000000 0.125000 +vt 0.312500 0.437500 +vt 0.312500 0.312500 +vt 1.000000 0.312500 +vt 1.000000 0.437500 +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.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn -0.578000 -0.816100 0.000000 +vn 0.576200 0.817300 0.000000 +usemtl None +s off +f 2/1/1 4/2/1 3/3/1 1/4/1 +f 4/4/2 8/5/2 7/6/2 3/1/2 +f 8/7/3 6/8/3 5/9/3 7/10/3 +f 6/2/4 2/9/4 1/8/4 5/3/4 +f 1/9/5 3/10/5 7/11/5 5/12/5 +f 6/6/6 8/1/6 4/13/6 2/14/6 +f 10/1/1 12/2/1 11/3/1 9/4/1 +f 12/2/2 16/9/2 15/8/2 11/3/2 +f 16/7/3 14/8/3 13/9/3 15/10/3 +f 14/4/4 10/5/4 9/6/4 13/1/4 +f 9/12/5 11/11/5 15/15/5 13/16/5 +f 14/14/6 16/13/6 12/17/6 10/18/6 +f 20/2/2 24/3/2 23/19/2 19/20/2 +f 22/1/4 18/4/4 17/21/4 21/22/4 +f 17/23/5 19/24/5 23/25/5 21/26/5 +f 22/21/6 24/5/6 20/6/6 18/22/6 +f 28/27/2 32/28/2 31/29/2 27/30/2 +f 30/31/4 26/32/4 25/33/4 29/34/4 +f 25/35/7 27/10/7 31/7/7 29/36/7 +f 30/37/8 32/38/8 28/39/8 26/40/8 diff --git a/mods/doors/models/doors_fencegate_open.obj b/mods/doors/models/doors_fencegate_open.obj new file mode 100644 index 00000000..3fb727f4 --- /dev/null +++ b/mods/doors/models/doors_fencegate_open.obj @@ -0,0 +1,112 @@ +# Blender v2.76 (sub 0) OBJ File: 'gate_open.blend' +# www.blender.org +mtllib gate_open.mtl +o Cube_Cube.001 +v -0.625000 -0.500000 0.125000 +v -0.625000 0.500100 0.125000 +v -0.625000 -0.500000 -0.125000 +v -0.625000 0.500100 -0.125000 +v -0.375000 -0.500000 0.125000 +v -0.375000 0.500100 0.125000 +v -0.375000 -0.500000 -0.125000 +v -0.375000 0.500100 -0.125000 +v 0.375000 -0.500000 0.125000 +v 0.375000 0.500100 0.125000 +v 0.375000 -0.500000 -0.125000 +v 0.375000 0.500100 -0.125000 +v 0.625000 -0.500000 0.125000 +v 0.625000 0.500100 0.125000 +v 0.625000 -0.500000 -0.125000 +v 0.625000 0.500100 -0.125000 +v 0.434859 0.187500 -0.872359 +v 0.434859 0.312500 -0.872359 +v 0.559859 0.187500 -0.872359 +v 0.559859 0.312500 -0.872359 +v 0.434859 0.187500 -0.122359 +v 0.434859 0.312500 -0.122359 +v 0.559859 0.187500 -0.122359 +v 0.559859 0.312500 -0.122359 +v 0.434859 0.187348 -0.872190 +v 0.434859 0.187363 -0.653701 +v 0.559859 0.187348 -0.872190 +v 0.559859 0.187363 -0.653701 +v 0.434859 -0.343683 -0.122379 +v 0.434859 -0.187304 -0.122294 +v 0.559859 -0.343683 -0.122379 +v 0.559859 -0.187304 -0.122294 +v 0.499560 -0.442900 0.005495 +vt 0.000000 0.750000 +vt 0.000000 0.500000 +vt 1.000000 0.500000 +vt 1.000000 0.750000 +vt 1.000000 1.000000 +vt -0.000000 1.000000 +vt 1.000000 -0.000000 +vt 1.000000 0.250000 +vt 0.000000 0.250000 +vt -0.000000 0.000000 +vt 0.250000 0.000000 +vt 0.250000 0.250000 +vt 0.250000 0.750000 +vt 0.250000 1.000000 +vt 0.500000 -0.000000 +vt 0.500000 0.250000 +vt 0.500000 0.750000 +vt 0.500000 1.000000 +vt 1.000000 0.625000 +vt 0.000000 0.625000 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt -0.000000 0.687500 +vt 0.000000 0.562500 +vt 1.000000 0.562500 +vt 1.000000 0.687500 +vt 0.813740 0.249033 +vt 0.201557 0.249293 +vt 0.120995 0.125498 +vt 0.987404 0.125469 +vt 0.125000 0.375000 +vt 0.812500 0.375000 +vt 0.937500 0.500000 +vt 0.062500 0.500000 +vt 0.000000 0.125000 +vt 1.000000 0.125000 +vt 0.312500 0.437500 +vt 0.312500 0.312500 +vt 1.000000 0.312500 +vt 1.000000 0.437500 +vt 0.312500 0.625000 +vt 0.312500 0.500000 +vt 0.187500 0.500000 +vt 0.187500 0.625000 +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.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -0.816100 -0.578000 +vn 0.000000 0.817300 0.576200 +usemtl None +s off +f 2/1/1 4/2/1 3/3/1 1/4/1 +f 4/4/2 8/5/2 7/6/2 3/1/2 +f 8/7/3 6/8/3 5/9/3 7/10/3 +f 6/2/4 2/9/4 1/8/4 5/3/4 +f 1/9/5 3/10/5 7/11/5 5/12/5 +f 6/6/6 8/1/6 4/13/6 2/14/6 +f 10/1/1 12/2/1 11/3/1 9/4/1 +f 12/2/2 16/9/2 15/8/2 11/3/2 +f 16/7/3 14/8/3 13/9/3 15/10/3 +f 14/4/4 10/5/4 9/6/4 13/1/4 +f 9/12/5 11/11/5 15/15/5 13/16/5 +f 14/14/6 16/13/6 12/17/6 10/18/6 +f 20/2/3 24/3/3 23/19/3 19/20/3 +f 22/1/1 18/4/1 17/21/1 21/22/1 +f 17/23/5 19/24/5 23/25/5 21/26/5 +f 22/21/6 24/5/6 20/6/6 18/22/6 +f 28/27/3 32/28/3 31/29/3 27/30/3 +f 30/31/1 26/32/1 25/33/1 29/34/1 +f 25/35/7 27/10/7 31/7/7 29/36/7 +f 30/37/8 32/38/8 28/39/8 26/40/8 +f 17/41/2 18/42/2 20/43/2 19/44/2 diff --git a/mods/doors/sounds/doors_door_close.ogg b/mods/doors/sounds/doors_door_close.ogg new file mode 100644 index 00000000..fede4af3 Binary files /dev/null and b/mods/doors/sounds/doors_door_close.ogg differ diff --git a/mods/doors/sounds/doors_door_open.ogg b/mods/doors/sounds/doors_door_open.ogg new file mode 100644 index 00000000..9a4c4f11 Binary files /dev/null and b/mods/doors/sounds/doors_door_open.ogg differ diff --git a/mods/doors/sounds/doors_fencegate_close.ogg b/mods/doors/sounds/doors_fencegate_close.ogg new file mode 100644 index 00000000..d42590ff Binary files /dev/null and b/mods/doors/sounds/doors_fencegate_close.ogg differ diff --git a/mods/doors/sounds/doors_fencegate_open.ogg b/mods/doors/sounds/doors_fencegate_open.ogg new file mode 100644 index 00000000..f6dfd1d9 Binary files /dev/null and b/mods/doors/sounds/doors_fencegate_open.ogg differ diff --git a/mods/doors/sounds/doors_glass_door_close.ogg b/mods/doors/sounds/doors_glass_door_close.ogg new file mode 100644 index 00000000..b3c13559 Binary files /dev/null and b/mods/doors/sounds/doors_glass_door_close.ogg differ diff --git a/mods/doors/sounds/doors_glass_door_open.ogg b/mods/doors/sounds/doors_glass_door_open.ogg new file mode 100644 index 00000000..66e6812d Binary files /dev/null and b/mods/doors/sounds/doors_glass_door_open.ogg differ diff --git a/mods/doors/sounds/doors_steel_door_close.ogg b/mods/doors/sounds/doors_steel_door_close.ogg new file mode 100644 index 00000000..aea7be67 Binary files /dev/null and b/mods/doors/sounds/doors_steel_door_close.ogg differ diff --git a/mods/doors/sounds/doors_steel_door_open.ogg b/mods/doors/sounds/doors_steel_door_open.ogg new file mode 100644 index 00000000..de874770 Binary files /dev/null and b/mods/doors/sounds/doors_steel_door_open.ogg differ diff --git a/mods/doors/textures/doors_door_glass.png b/mods/doors/textures/doors_door_glass.png new file mode 100644 index 00000000..ea6fdc1f Binary files /dev/null and b/mods/doors/textures/doors_door_glass.png differ diff --git a/mods/doors/textures/doors_door_obsidian_glass.png b/mods/doors/textures/doors_door_obsidian_glass.png new file mode 100644 index 00000000..fab25b34 Binary files /dev/null and b/mods/doors/textures/doors_door_obsidian_glass.png differ diff --git a/mods/doors/textures/doors_door_steel.png b/mods/doors/textures/doors_door_steel.png new file mode 100644 index 00000000..9e33ff1a Binary files /dev/null and b/mods/doors/textures/doors_door_steel.png differ diff --git a/mods/doors/textures/doors_door_wood.png b/mods/doors/textures/doors_door_wood.png new file mode 100644 index 00000000..c073faf1 Binary files /dev/null and b/mods/doors/textures/doors_door_wood.png differ diff --git a/mods/doors/textures/doors_hidden_segment.png b/mods/doors/textures/doors_hidden_segment.png new file mode 100644 index 00000000..b3b6f34c Binary files /dev/null and b/mods/doors/textures/doors_hidden_segment.png differ diff --git a/mods/doors/textures/doors_item_glass.png b/mods/doors/textures/doors_item_glass.png new file mode 100644 index 00000000..fcdb153d Binary files /dev/null and b/mods/doors/textures/doors_item_glass.png differ diff --git a/mods/doors/textures/doors_item_obsidian_glass.png b/mods/doors/textures/doors_item_obsidian_glass.png new file mode 100644 index 00000000..5780ad8f Binary files /dev/null and b/mods/doors/textures/doors_item_obsidian_glass.png differ diff --git a/mods/doors/textures/doors_item_steel.png b/mods/doors/textures/doors_item_steel.png new file mode 100644 index 00000000..dd99e136 Binary files /dev/null and b/mods/doors/textures/doors_item_steel.png differ diff --git a/mods/doors/textures/doors_item_wood.png b/mods/doors/textures/doors_item_wood.png new file mode 100644 index 00000000..d3a62ab1 Binary files /dev/null and b/mods/doors/textures/doors_item_wood.png differ diff --git a/mods/doors/textures/doors_trapdoor.png b/mods/doors/textures/doors_trapdoor.png new file mode 100644 index 00000000..e92c8b2e Binary files /dev/null and b/mods/doors/textures/doors_trapdoor.png differ diff --git a/mods/doors/textures/doors_trapdoor_side.png b/mods/doors/textures/doors_trapdoor_side.png new file mode 100644 index 00000000..55981ea3 Binary files /dev/null and b/mods/doors/textures/doors_trapdoor_side.png differ diff --git a/mods/doors/textures/doors_trapdoor_steel.png b/mods/doors/textures/doors_trapdoor_steel.png new file mode 100644 index 00000000..4ba507d6 Binary files /dev/null and b/mods/doors/textures/doors_trapdoor_steel.png differ diff --git a/mods/doors/textures/doors_trapdoor_steel_side.png b/mods/doors/textures/doors_trapdoor_steel_side.png new file mode 100644 index 00000000..e29c59e0 Binary files /dev/null and b/mods/doors/textures/doors_trapdoor_steel_side.png differ diff --git a/mods/dungeon_loot/README.txt b/mods/dungeon_loot/README.txt new file mode 100644 index 00000000..c500d255 --- /dev/null +++ b/mods/dungeon_loot/README.txt @@ -0,0 +1,11 @@ +Minetest Game mod: dungeon_loot +=============================== +Adds randomly generated chests with some "loot" to generated dungeons, +an API to register additional loot is provided. +Only works if dungeons are actually enabled in mapgen flags. + +License information can be found in license.txt + +Authors of source code +---------------------- +Originally by sfan5 (MIT) diff --git a/mods/dungeon_loot/init.lua b/mods/dungeon_loot/init.lua new file mode 100644 index 00000000..9d8ac52f --- /dev/null +++ b/mods/dungeon_loot/init.lua @@ -0,0 +1,8 @@ +dungeon_loot = {} + +dungeon_loot.CHESTS_MIN = 0 -- not necessarily in a single dungeon +dungeon_loot.CHESTS_MAX = 2 +dungeon_loot.STACKS_PER_CHEST_MAX = 8 + +dofile(minetest.get_modpath("dungeon_loot") .. "/loot.lua") +dofile(minetest.get_modpath("dungeon_loot") .. "/mapgen.lua") diff --git a/mods/dungeon_loot/license.txt b/mods/dungeon_loot/license.txt new file mode 100644 index 00000000..0af30a0c --- /dev/null +++ b/mods/dungeon_loot/license.txt @@ -0,0 +1,24 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2017 sfan5 + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT diff --git a/mods/dungeon_loot/loot.lua b/mods/dungeon_loot/loot.lua new file mode 100644 index 00000000..a5a40973 --- /dev/null +++ b/mods/dungeon_loot/loot.lua @@ -0,0 +1,60 @@ +-- Loot from the `default` mod is registered here, +-- with the rest being registered in the respective mods + +dungeon_loot.registered_loot = { + -- various items + {name = "default:stick", chance = 0.6, count = {3, 6}}, + {name = "default:flint", chance = 0.4, count = {1, 3}}, + + -- farming / consumable + {name = "default:apple", chance = 0.4, count = {1, 4}}, + {name = "default:cactus", chance = 0.4, count = {1, 4}, + types = {"sandstone", "desert"}}, + + -- minerals + {name = "default:coal_lump", chance = 0.9, count = {1, 12}}, + {name = "default:gold_ingot", chance = 0.5}, + {name = "default:steel_ingot", chance = 0.4, count = {1, 6}}, + {name = "default:mese_crystal", chance = 0.1, count = {2, 3}}, + + -- tools + {name = "default:sword_wood", chance = 0.6}, + {name = "default:pick_stone", chance = 0.3}, + {name = "default:axe_diamond", chance = 0.05}, + + -- natural materials + {name = "default:sand", chance = 0.8, count = {4, 32}, y = {-64, 32768}, + types = {"normal"}}, + {name = "default:desert_sand", chance = 0.8, count = {4, 32}, y = {-64, 32768}, + types = {"sandstone"}}, + {name = "default:desert_cobble", chance = 0.8, count = {4, 32}, + types = {"desert"}}, + {name = "default:snow", chance = 0.8, count = {8, 64}, y = {-64, 32768}, + types = {"ice"}}, + {name = "default:dirt", chance = 0.6, count = {2, 16}, y = {-64, 32768}, + types = {"normal", "sandstone", "desert"}}, + {name = "default:obsidian", chance = 0.25, count = {1, 3}, y = {-32768, -512}}, + {name = "default:mese", chance = 0.15, y = {-32768, -512}}, +} + +function dungeon_loot.register(t) + if t.name ~= nil then + t = {t} -- single entry + end + for _, loot in ipairs(t) do + table.insert(dungeon_loot.registered_loot, loot) + end +end + +function dungeon_loot._internal_get_loot(pos_y, dungeontype) + -- filter by y pos and type + local ret = {} + for _, l in ipairs(dungeon_loot.registered_loot) do + if l.y == nil or (pos_y >= l.y[1] and pos_y <= l.y[2]) then + if l.types == nil or table.indexof(l.types, dungeontype) ~= -1 then + table.insert(ret, l) + end + end + end + return ret +end diff --git a/mods/dungeon_loot/mapgen.lua b/mods/dungeon_loot/mapgen.lua new file mode 100644 index 00000000..b2c80fa8 --- /dev/null +++ b/mods/dungeon_loot/mapgen.lua @@ -0,0 +1,171 @@ +minetest.set_gen_notify({dungeon = true, temple = true}) + +local function noise3d_integer(noise, pos) + return math.abs(math.floor(noise:get_3d(pos) * 0x7fffffff)) +end + +local function random_sample(rand, list, count) + local ret = {} + for n = 1, count do + local idx = rand:next(1, #list) + table.insert(ret, list[idx]) + table.remove(list, idx) + end + return ret +end + +local function find_walls(cpos) + local is_wall = function(node) + return node.name ~= "air" and node.name ~= "ignore" + end + + local dirs = {{x=1, z=0}, {x=-1, z=0}, {x=0, z=1}, {x=0, z=-1}} + local get_node = minetest.get_node + + local ret = {} + local mindist = {x=0, z=0} + local min = function(a, b) return a ~= 0 and math.min(a, b) or b end + for _, dir in ipairs(dirs) do + for i = 1, 9 do -- 9 = max room size / 2 + local pos = vector.add(cpos, {x=dir.x*i, y=0, z=dir.z*i}) + + -- continue in that direction until we find a wall-like node + local node = get_node(pos) + if is_wall(node) then + local front_below = vector.subtract(pos, {x=dir.x, y=1, z=dir.z}) + local above = vector.add(pos, {x=0, y=1, z=0}) + + -- check that it: + --- is at least 2 nodes high (not a staircase) + --- has a floor + if is_wall(get_node(front_below)) and is_wall(get_node(above)) then + table.insert(ret, {pos = pos, facing = {x=-dir.x, y=0, z=-dir.z}}) + if dir.z == 0 then + mindist.x = min(mindist.x, i-1) + else + mindist.z = min(mindist.z, i-1) + end + end + -- abort even if it wasn't a wall cause something is in the way + break + end + end + end + + local biome = minetest.get_biome_data(cpos) + biome = biome and minetest.get_biome_name(biome.biome) or "" + local type = "normal" + if biome:find("desert") == 1 then + type = "desert" + elseif biome:find("sandstone_desert") == 1 then + type = "sandstone" + elseif biome:find("icesheet") == 1 then + type = "ice" + end + + return { + walls = ret, + size = {x=mindist.x*2, z=mindist.z*2}, + type = type, + } +end + +local function populate_chest(pos, rand, dungeontype) + --minetest.chat_send_all("chest placed at " .. minetest.pos_to_string(pos) .. " [" .. dungeontype .. "]") + --minetest.add_node(vector.add(pos, {x=0, y=1, z=0}), {name="default:torch", param2=1}) + + local item_list = dungeon_loot._internal_get_loot(pos.y, dungeontype) + -- take random (partial) sample of all possible items + local sample_n = math.min(#item_list, dungeon_loot.STACKS_PER_CHEST_MAX) + item_list = random_sample(rand, item_list, sample_n) + + -- apply chances / randomized amounts and collect resulting items + local items = {} + for _, loot in ipairs(item_list) do + if rand:next(0, 1000) / 1000 <= loot.chance then + local itemdef = minetest.registered_items[loot.name] + local amount = 1 + if loot.count ~= nil then + amount = rand:next(loot.count[1], loot.count[2]) + end + + if not itemdef then + minetest.log("warning", "Registered loot item " .. loot.name .. " does not exist") + elseif itemdef.tool_capabilities then + for n = 1, amount do + local wear = rand:next(0.20 * 65535, 0.75 * 65535) -- 20% to 75% wear + table.insert(items, ItemStack({name = loot.name, wear = wear})) + end + elseif itemdef.stack_max == 1 then + -- not stackable, add separately + for n = 1, amount do + table.insert(items, loot.name) + end + else + table.insert(items, ItemStack({name = loot.name, count = amount})) + end + end + end + + -- place items at random places in chest + local inv = minetest.get_meta(pos):get_inventory() + local listsz = inv:get_size("main") + assert(listsz >= #items) + for _, item in ipairs(items) do + local index = rand:next(1, listsz) + if inv:get_stack("main", index):is_empty() then + inv:set_stack("main", index, item) + else + inv:add_item("main", item) -- space occupied, just put it anywhere + end + end +end + + +minetest.register_on_generated(function(minp, maxp, blockseed) + local gennotify = minetest.get_mapgen_object("gennotify") + local poslist = gennotify["dungeon"] or {} + for _, entry in ipairs(gennotify["temple"] or {}) do + table.insert(poslist, entry) + end + if #poslist == 0 then return end + + local noise = minetest.get_perlin(10115, 4, 0.5, 1) + local rand = PcgRandom(noise3d_integer(noise, poslist[1])) + + local candidates = {} + -- process at most 8 rooms to keep runtime of this predictable + local num_process = math.min(#poslist, 8) + for i = 1, num_process do + local room = find_walls(poslist[i]) + -- skip small rooms and everything that doesn't at least have 3 walls + if math.min(room.size.x, room.size.z) >= 4 and #room.walls >= 3 then + table.insert(candidates, room) + end + end + + local num_chests = rand:next(dungeon_loot.CHESTS_MIN, dungeon_loot.CHESTS_MAX) + num_chests = math.min(#candidates, num_chests) + local rooms = random_sample(rand, candidates, num_chests) + + for _, room in ipairs(rooms) do + -- choose place somewhere in front of any of the walls + local wall = room.walls[rand:next(1, #room.walls)] + local v, vi -- vector / axis that runs alongside the wall + if wall.facing.x ~= 0 then + v, vi = {x=0, y=0, z=1}, "z" + else + v, vi = {x=1, y=0, z=0}, "x" + end + local chestpos = vector.add(wall.pos, wall.facing) + local off = rand:next(-room.size[vi]/2 + 1, room.size[vi]/2 - 1) + chestpos = vector.add(chestpos, vector.multiply(v, off)) + + if minetest.get_node(chestpos).name == "air" then + -- make it face inwards to the room + local facedir = minetest.dir_to_facedir(vector.multiply(wall.facing, -1)) + minetest.add_node(chestpos, {name = "default:chest", param2 = facedir}) + populate_chest(chestpos, PcgRandom(noise3d_integer(noise, chestpos)), room.type) + end + end +end) diff --git a/mods/dungeon_loot/mod.conf b/mods/dungeon_loot/mod.conf new file mode 100644 index 00000000..79d80899 --- /dev/null +++ b/mods/dungeon_loot/mod.conf @@ -0,0 +1,3 @@ +name = dungeon_loot +description = Minetest Game mod: dungeon_loot +depends = default diff --git a/mods/dye/README.txt b/mods/dye/README.txt new file mode 100644 index 00000000..a2fbdd24 --- /dev/null +++ b/mods/dye/README.txt @@ -0,0 +1,13 @@ +Minetest Game mod: dye +====================== +See license.txt for license information. +See init.lua for documentation. + +Authors of source code +---------------------- +Originally by Perttu Ahola (celeron55) (MIT) +Various Minetest developers and contributors (MIT) + +Authors of media (textures) +--------------------------- +Perttu Ahola (celeron55) (CC BY-SA 3.0) diff --git a/mods/dye/init.lua b/mods/dye/init.lua new file mode 100644 index 00000000..f0affe8b --- /dev/null +++ b/mods/dye/init.lua @@ -0,0 +1,127 @@ +-- dye/init.lua + +dye = {} + +-- Load support for MT game translation. +local S = minetest.get_translator("dye") + +-- Make dye names and descriptions available globally + +dye.dyes = { + {"white", "White"}, + {"grey", "Grey"}, + {"dark_grey", "Dark Grey"}, + {"black", "Black"}, + {"violet", "Violet"}, + {"blue", "Blue"}, + {"cyan", "Cyan"}, + {"dark_green", "Dark Green"}, + {"green", "Green"}, + {"yellow", "Yellow"}, + {"brown", "Brown"}, + {"orange", "Orange"}, + {"red", "Red"}, + {"magenta", "Magenta"}, + {"pink", "Pink"}, +} + +-- Define items + +for _, row in ipairs(dye.dyes) do + local name = row[1] + local description = row[2] + local groups = {dye = 1} + groups["color_" .. name] = 1 + + minetest.register_craftitem("dye:" .. name, { + inventory_image = "dye_" .. name .. ".png", + description = S(description .. " Dye"), + groups = groups + }) + + minetest.register_craft({ + output = "dye:" .. name .. " 4", + recipe = { + {"group:flower,color_" .. name} + }, + }) +end + +-- Manually add coal -> black dye + +minetest.register_craft({ + output = "dye:black 4", + recipe = { + {"group:coal"} + }, +}) + +-- Manually add blueberries->violet dye + +minetest.register_craft({ + output = "dye:violet 2", + recipe = { + {"default:blueberries"} + }, +}) + +-- Mix recipes + +local dye_recipes = { + -- src1, src2, dst + -- RYB mixes + {"red", "blue", "violet"}, -- "purple" + {"yellow", "red", "orange"}, + {"yellow", "blue", "green"}, + -- RYB complementary mixes + {"yellow", "violet", "dark_grey"}, + {"blue", "orange", "dark_grey"}, + -- CMY mixes - approximation + {"cyan", "yellow", "green"}, + {"cyan", "magenta", "blue"}, + {"yellow", "magenta", "red"}, + -- other mixes that result in a color we have + {"red", "green", "brown"}, + {"magenta", "blue", "violet"}, + {"green", "blue", "cyan"}, + {"pink", "violet", "magenta"}, + -- mixes with black + {"white", "black", "grey"}, + {"grey", "black", "dark_grey"}, + {"green", "black", "dark_green"}, + {"orange", "black", "brown"}, + -- mixes with white + {"white", "red", "pink"}, + {"white", "dark_grey", "grey"}, + {"white", "dark_green", "green"}, +} + +for _, mix in pairs(dye_recipes) do + minetest.register_craft({ + type = "shapeless", + output = "dye:" .. mix[3] .. " 2", + recipe = {"dye:" .. mix[1], "dye:" .. mix[2]}, + }) +end + +-- Dummy calls to S() to allow translation scripts to detect the strings. +-- To update this run: +-- for _,e in ipairs(dye.dyes) do print(("S(%q)"):format(e[2].." Dye")) end + +--[[ +S("White Dye") +S("Grey Dye") +S("Dark Grey Dye") +S("Black Dye") +S("Violet Dye") +S("Blue Dye") +S("Cyan Dye") +S("Dark Green Dye") +S("Green Dye") +S("Yellow Dye") +S("Brown Dye") +S("Orange Dye") +S("Red Dye") +S("Magenta Dye") +S("Pink Dye") +--]] diff --git a/mods/dye/license.txt b/mods/dye/license.txt new file mode 100644 index 00000000..bf9d3501 --- /dev/null +++ b/mods/dye/license.txt @@ -0,0 +1,60 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2012-2016 Perttu Ahola (celeron55) +Copyright (C) 2012-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2012-2016 Perttu Ahola (celeron55) + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/dye/locale/dye.de.tr b/mods/dye/locale/dye.de.tr new file mode 100644 index 00000000..f73fb572 --- /dev/null +++ b/mods/dye/locale/dye.de.tr @@ -0,0 +1,16 @@ +# textdomain: dye +White Dye=Weißer Farbstoff +Grey Dye=Grauer Farbstoff +Dark Grey Dye=Dunkelgrauer Farbstoff +Black Dye=Schwarzer Farbstoff +Violet Dye=Violetter Farbstoff +Blue Dye=Blauer Farbstoff +Cyan Dye=Türkiser Farbstoff +Dark Green Dye=Dunkelgrüner Farbstoff +Green Dye=Grüner Farbstoff +Yellow Dye=Gelber Farbstoff +Brown Dye=Brauner Farbstoff +Orange Dye=Orange Farbstoff +Red Dye=Roter Farbstoff +Magenta Dye=Magenta Farbstoff +Pink Dye=Rosa Farbstoff diff --git a/mods/dye/locale/dye.eo.tr b/mods/dye/locale/dye.eo.tr new file mode 100644 index 00000000..e0fda93e --- /dev/null +++ b/mods/dye/locale/dye.eo.tr @@ -0,0 +1,16 @@ +# textdomain: dye +White Dye=Blanka Tinkturo +Grey Dye=Griza Tinkturo +Dark Grey Dye=Malhela Griza Tinkturo +Black Dye=Nigra Tinkturo +Violet Dye=Violkolora Tinkturo +Blue Dye=Blua Tinkturo +Cyan Dye=Bluverda Tinkturo +Dark Green Dye=Malhela Verda Tinkturo +Green Dye=Verda Tinkturo +Yellow Dye=Flava Tinkturo +Brown Dye=Bruna Tinkturo +Orange Dye=Oranĝkolora Tinkturo +Red Dye=Ruĝa Tinkturo +Magenta Dye=Fiksina Tinkturo +Pink Dye=Rozkolora Tinkturo diff --git a/mods/dye/locale/dye.es.tr b/mods/dye/locale/dye.es.tr new file mode 100644 index 00000000..bd04ef45 --- /dev/null +++ b/mods/dye/locale/dye.es.tr @@ -0,0 +1,16 @@ +# textdomain: dye +White Dye=Tinte blanco +Grey Dye=Tinte gris +Dark Grey Dye=Tinte gris oscuro +Black Dye=Tinte negro +Violet Dye=Tinte violeta +Blue Dye=Tinte azul +Cyan Dye=Tinte cián +Dark Green Dye=Tinte verde oscuro +Green Dye=Tinte verde +Yellow Dye=Tinte amarillo +Brown Dye=Tinte marrón +Orange Dye=Tinte naranja +Red Dye=Tinte rojo +Magenta Dye=Tinte magenta +Pink Dye=Tinte rosa diff --git a/mods/dye/locale/dye.fr.tr b/mods/dye/locale/dye.fr.tr new file mode 100644 index 00000000..390fa07c --- /dev/null +++ b/mods/dye/locale/dye.fr.tr @@ -0,0 +1,16 @@ +# textdomain: dye +White Dye=Colorant blanc +Grey Dye=Colorant gris +Dark Grey Dye=Colorant gris foncé +Black Dye=Colorant noir +Violet Dye=Colorant violet +Blue Dye=Colorant bleu +Cyan Dye=Colorant cyan +Dark Green Dye=Colorant vert foncé +Green Dye=Colorant vert +Yellow Dye=Colorant jaune +Brown Dye=Colorant marron +Orange Dye=Colorant orange +Red Dye=Colorant rouge +Magenta Dye=Colorant magenta +Pink Dye=Colorant rose diff --git a/mods/dye/locale/dye.id.tr b/mods/dye/locale/dye.id.tr new file mode 100644 index 00000000..4122875f --- /dev/null +++ b/mods/dye/locale/dye.id.tr @@ -0,0 +1,16 @@ +# textdomain: dye +White Dye=Pewarna Putih +Grey Dye=Pewarna Abu +Dark Grey Dye=Pewarna Abu Tua +Black Dye=Pewarna Hitam +Violet Dye=Pewarna Ungu +Blue Dye=Pewarna Biru +Cyan Dye=Pewarna Sian +Dark Green Dye=Pewarna Hijau Tua +Green Dye=Pewarna Hijau +Yellow Dye=Pewarna Kuning +Brown Dye=Pewarna Cokelat +Orange Dye=Pewarna Oranye +Red Dye=Pewarna Merah +Magenta Dye=Pewarna Magenta +Pink Dye=Pewarna Merah Jambu diff --git a/mods/dye/locale/dye.it.tr b/mods/dye/locale/dye.it.tr new file mode 100644 index 00000000..9deb385e --- /dev/null +++ b/mods/dye/locale/dye.it.tr @@ -0,0 +1,16 @@ +# textdomain: dye +White Dye=Tintura bianca +Grey Dye=Tintura grigia +Dark Grey Dye=Tintura grigia scura +Black Dye=Tintura nera +Violet Dye=Tintura viola +Blue Dye=Tintura blu +Cyan Dye=Tintura ciano +Dark Green Dye=Tintura verde scura +Green Dye=Tintura verde +Yellow Dye=Tintura gialla +Brown Dye=Tintura marrone +Orange Dye=Tintura arancione +Red Dye=Tintura rossa +Magenta Dye=Tintura magenta +Pink Dye=Tintura rosa diff --git a/mods/dye/locale/dye.ja.tr b/mods/dye/locale/dye.ja.tr new file mode 100644 index 00000000..d7ae3068 --- /dev/null +++ b/mods/dye/locale/dye.ja.tr @@ -0,0 +1,16 @@ +# textdomain: dye +White Dye=白色の染料 +Grey Dye=灰色の染料 +Dark Grey Dye=濃灰色の染料 +Black Dye=黒色の染料 +Violet Dye=紫色の染料 +Blue Dye=青色の染料 +Cyan Dye=青緑色の染料 +Dark Green Dye=濃緑色の染料 +Green Dye=緑色の染料 +Yellow Dye=黄色の染料 +Brown Dye=茶色の染料 +Orange Dye=橙色の染料 +Red Dye=赤色の染料 +Magenta Dye=赤紫色の染料 +Pink Dye=桃色の染料 diff --git a/mods/dye/locale/dye.jbo.tr b/mods/dye/locale/dye.jbo.tr new file mode 100644 index 00000000..39ec7ab2 --- /dev/null +++ b/mods/dye/locale/dye.jbo.tr @@ -0,0 +1,16 @@ +# textdomain: dye +White Dye=lo blabi xinmo +Grey Dye=lo grusi xinmo +Dark Grey Dye=lo xekri grusi xinmo +Black Dye=lo xekri xinmo +Violet Dye=lo zirpu xinmo +Blue Dye=lo blanu xinmo +Cyan Dye=lo cicna xinmo +Dark Green Dye=lo xekri crino xinmo +Green Dye=lo crino xinmo +Yellow Dye=lo pelxu xinmo +Brown Dye=lo bunre xinmo +Orange Dye=lo narju xinmo +Red Dye=lo xunre xinmo +Magenta Dye=lo nukni xinmo +Pink Dye=lo xunblabi xinmo diff --git a/mods/dye/locale/dye.ms.tr b/mods/dye/locale/dye.ms.tr new file mode 100644 index 00000000..50c04730 --- /dev/null +++ b/mods/dye/locale/dye.ms.tr @@ -0,0 +1,16 @@ +# textdomain: dye +White Dye=Pewarna Putih +Grey Dye=Pewarna Kelabu +Dark Grey Dye=Pewarna Kelabu Gelap +Black Dye=Pewarna Hitam +Violet Dye=Pewarna Ungu +Blue Dye=Pewarna Biru +Cyan Dye=Pewarna Biru Kehijauan +Dark Green Dye=Pewarna Hijau Gelap +Green Dye=Pewarna Hijau +Yellow Dye=Pewarna Kuning +Brown Dye=Pewarna Perang +Orange Dye=Pewarna Jingga +Red Dye=Pewarna Merah +Magenta Dye=Pewarna Merah Lembayung +Pink Dye=Pewarna Merah Jambu diff --git a/mods/dye/locale/dye.pl.tr b/mods/dye/locale/dye.pl.tr new file mode 100644 index 00000000..a4bfa640 --- /dev/null +++ b/mods/dye/locale/dye.pl.tr @@ -0,0 +1,16 @@ +# textdomain: dye +White Dye=Biały barwnik +Grey Dye=Szary barwnik +Dark Grey Dye=Ciemnoszary barwnik +Black Dye=Czarny barwnik +Violet Dye=Fioletowy barwnik +Blue Dye=Niebieski barwnik +Cyan Dye=Cyjanowy barwnik +Dark Green Dye=Ciemnozielony barwnik +Green Dye=Zielony barwnik +Yellow Dye=Żółty barwnik +Brown Dye=Brązowy barwnik +Orange Dye=Pomarańczowy barwnik +Red Dye=Czerwony barwnik +Magenta Dye=Karmazynowy barwnik +Pink Dye=Różowy barwnik diff --git a/mods/dye/locale/dye.pt_BR.tr b/mods/dye/locale/dye.pt_BR.tr new file mode 100644 index 00000000..29e98dac --- /dev/null +++ b/mods/dye/locale/dye.pt_BR.tr @@ -0,0 +1,16 @@ +# textdomain: dye +White Dye=Tinta Branca +Grey Dye=Tinta Cinza +Dark Grey Dye=Tinta Cinza-escuro +Black Dye=Tinta Preta +Violet Dye=Tinta Violeta +Blue Dye=Tinta Azul +Cyan Dye=Tinta Ciano +Dark Green Dye=Tinta Verde-escuro +Green Dye=Tinta Verde +Yellow Dye=Tinta Amarela +Brown Dye=Tinta Marrom +Orange Dye=Tinta Laranja +Red Dye=Tinta Vermelha +Magenta Dye=Tinta Magenta +Pink Dye=Tinta Rosa diff --git a/mods/dye/locale/dye.ru.tr b/mods/dye/locale/dye.ru.tr new file mode 100644 index 00000000..fa3c5c44 --- /dev/null +++ b/mods/dye/locale/dye.ru.tr @@ -0,0 +1,16 @@ +# textdomain: dye +White Dye=Белая Краска +Grey Dye=Серая Краска +Dark Grey Dye=Тёмно-Серая Краска +Black Dye=Черная Краска +Violet Dye=Фиолетовая Краска +Blue Dye=Синяя Краска +Cyan Dye=Голубая Краска +Dark Green Dye=Тёмно-Зелёная Краска +Green Dye=Зелёная Краска +Yellow Dye=Жёлтая Краска +Brown Dye=Бурая Краска +Orange Dye=Оранжевая Краска +Red Dye=Красная Краска +Magenta Dye=Пурпурная Краска +Pink Dye=Розовая Краска diff --git a/mods/dye/locale/dye.sk.tr b/mods/dye/locale/dye.sk.tr new file mode 100644 index 00000000..625804c3 --- /dev/null +++ b/mods/dye/locale/dye.sk.tr @@ -0,0 +1,16 @@ +# textdomain: dye +White Dye=Biele farbivo +Grey Dye=Šedé farbivo +Dark Grey Dye=Tmavo šedé farbivo +Black Dye=Čierne farbivo +Violet Dye=Fialové farbivo +Blue Dye=Modré farbivo +Cyan Dye=Tyrkysové farbivo +Dark Green Dye=Tmavozelené farbivo +Green Dye=Zelené farbivo +Yellow Dye=Žlté farbivo +Brown Dye=Hnedé farbivo +Orange Dye=Oranžové farbivo +Red Dye=Červené farbivo +Magenta Dye=Purpurové farbivo +Pink Dye=Ružové farbivo diff --git a/mods/dye/locale/dye.sv.tr b/mods/dye/locale/dye.sv.tr new file mode 100644 index 00000000..ecde4433 --- /dev/null +++ b/mods/dye/locale/dye.sv.tr @@ -0,0 +1,16 @@ +# textdomain: dye +White Dye=Vit färg +Grey Dye=Grå färg +Dark Grey Dye=Mörkgrå färg +Black Dye=Svart färg +Violet Dye=Violett färg +Blue Dye=Blå färg +Cyan Dye=Cyan färg +Dark Green Dye=Mörkgrön färg +Green Dye=Grön färg +Yellow Dye=Gul färg +Brown Dye=Brun färg +Orange Dye=Orange färg +Red Dye=Röd färg +Magenta Dye=Magenta färg +Pink Dye=Rosa färg diff --git a/mods/dye/locale/dye.uk.tr b/mods/dye/locale/dye.uk.tr new file mode 100644 index 00000000..e3698b03 --- /dev/null +++ b/mods/dye/locale/dye.uk.tr @@ -0,0 +1,16 @@ +# textdomain: dye +White Dye=Біла Фарба +Grey Dye=Сіра Фарба +Dark Grey Dye=Темно-Сіра фарба +Black Dye=Чорна Фарба +Violet Dye=Фіолетова Фарба +Blue Dye=Синя Фарба +Cyan Dye=Синьо-Зелена Фарба +Dark Green Dye=Темно-Зелена Фарба +Green Dye=Зелена Фарба +Yellow Dye=Жовта Фарба +Brown Dye=Коричнева Фарба +Orange Dye=Помаранчева Фарба +Red Dye=Червона Фарба +Magenta Dye=Пурпурна Фарба +Pink Dye=Рожева Фарба diff --git a/mods/dye/locale/dye.zh_CN.tr b/mods/dye/locale/dye.zh_CN.tr new file mode 100644 index 00000000..11bf9cb2 --- /dev/null +++ b/mods/dye/locale/dye.zh_CN.tr @@ -0,0 +1,16 @@ +# textdomain: dye +White Dye=白色染料 +Grey Dye=灰色染料 +Dark Grey Dye=暗灰染料 +Black Dye=黑色染料 +Violet Dye=紫色染料 +Blue Dye=蓝色染料 +Cyan Dye=青色染料 +Dark Green Dye=暗绿染料 +Green Dye=绿色染料 +Yellow Dye=黄色染料 +Brown Dye=棕色染料 +Orange Dye=橙色染料 +Red Dye=红色染料 +Magenta Dye=品红染料 +Pink Dye=粉红染料 diff --git a/mods/dye/locale/dye.zh_TW.tr b/mods/dye/locale/dye.zh_TW.tr new file mode 100644 index 00000000..b84d07e1 --- /dev/null +++ b/mods/dye/locale/dye.zh_TW.tr @@ -0,0 +1,16 @@ +# textdomain: dye +White Dye=白色染料 +Grey Dye=灰色染料 +Dark Grey Dye=暗灰染料 +Black Dye=黑色染料 +Violet Dye=紫色染料 +Blue Dye=藍色染料 +Cyan Dye=青色染料 +Dark Green Dye=暗綠染料 +Green Dye=綠色染料 +Yellow Dye=黃色染料 +Brown Dye=棕色染料 +Orange Dye=橙色染料 +Red Dye=紅色染料 +Magenta Dye=品紅染料 +Pink Dye=粉紅染料 diff --git a/mods/dye/locale/template.txt b/mods/dye/locale/template.txt new file mode 100644 index 00000000..c20bab5f --- /dev/null +++ b/mods/dye/locale/template.txt @@ -0,0 +1,16 @@ +# textdomain: dye +White Dye= +Grey Dye= +Dark Grey Dye= +Black Dye= +Violet Dye= +Blue Dye= +Cyan Dye= +Dark Green Dye= +Green Dye= +Yellow Dye= +Brown Dye= +Orange Dye= +Red Dye= +Magenta Dye= +Pink Dye= diff --git a/mods/dye/mod.conf b/mods/dye/mod.conf new file mode 100644 index 00000000..32bb816c --- /dev/null +++ b/mods/dye/mod.conf @@ -0,0 +1,2 @@ +name = dye +description = Minetest Game mod: dye diff --git a/mods/dye/textures/dye_black.png b/mods/dye/textures/dye_black.png new file mode 100644 index 00000000..1055b6c2 Binary files /dev/null and b/mods/dye/textures/dye_black.png differ diff --git a/mods/dye/textures/dye_blue.png b/mods/dye/textures/dye_blue.png new file mode 100644 index 00000000..d1377c6b Binary files /dev/null and b/mods/dye/textures/dye_blue.png differ diff --git a/mods/dye/textures/dye_brown.png b/mods/dye/textures/dye_brown.png new file mode 100644 index 00000000..77d475cd Binary files /dev/null and b/mods/dye/textures/dye_brown.png differ diff --git a/mods/dye/textures/dye_cyan.png b/mods/dye/textures/dye_cyan.png new file mode 100644 index 00000000..239d66ce Binary files /dev/null and b/mods/dye/textures/dye_cyan.png differ diff --git a/mods/dye/textures/dye_dark_green.png b/mods/dye/textures/dye_dark_green.png new file mode 100644 index 00000000..9606ccf4 Binary files /dev/null and b/mods/dye/textures/dye_dark_green.png differ diff --git a/mods/dye/textures/dye_dark_grey.png b/mods/dye/textures/dye_dark_grey.png new file mode 100644 index 00000000..060737ba Binary files /dev/null and b/mods/dye/textures/dye_dark_grey.png differ diff --git a/mods/dye/textures/dye_green.png b/mods/dye/textures/dye_green.png new file mode 100644 index 00000000..0d99ee1c Binary files /dev/null and b/mods/dye/textures/dye_green.png differ diff --git a/mods/dye/textures/dye_grey.png b/mods/dye/textures/dye_grey.png new file mode 100644 index 00000000..5efb0280 Binary files /dev/null and b/mods/dye/textures/dye_grey.png differ diff --git a/mods/dye/textures/dye_magenta.png b/mods/dye/textures/dye_magenta.png new file mode 100644 index 00000000..c84df62c Binary files /dev/null and b/mods/dye/textures/dye_magenta.png differ diff --git a/mods/dye/textures/dye_orange.png b/mods/dye/textures/dye_orange.png new file mode 100644 index 00000000..08449073 Binary files /dev/null and b/mods/dye/textures/dye_orange.png differ diff --git a/mods/dye/textures/dye_pink.png b/mods/dye/textures/dye_pink.png new file mode 100644 index 00000000..c3dec22a Binary files /dev/null and b/mods/dye/textures/dye_pink.png differ diff --git a/mods/dye/textures/dye_red.png b/mods/dye/textures/dye_red.png new file mode 100644 index 00000000..14eafbf4 Binary files /dev/null and b/mods/dye/textures/dye_red.png differ diff --git a/mods/dye/textures/dye_violet.png b/mods/dye/textures/dye_violet.png new file mode 100644 index 00000000..600cbb44 Binary files /dev/null and b/mods/dye/textures/dye_violet.png differ diff --git a/mods/dye/textures/dye_white.png b/mods/dye/textures/dye_white.png new file mode 100644 index 00000000..2a840a41 Binary files /dev/null and b/mods/dye/textures/dye_white.png differ diff --git a/mods/dye/textures/dye_yellow.png b/mods/dye/textures/dye_yellow.png new file mode 100644 index 00000000..fe75775e Binary files /dev/null and b/mods/dye/textures/dye_yellow.png differ diff --git a/mods/env_sounds/README.txt b/mods/env_sounds/README.txt new file mode 100644 index 00000000..3b3d2755 --- /dev/null +++ b/mods/env_sounds/README.txt @@ -0,0 +1,17 @@ +Minetest Game mod: env_sounds +============================= +See license.txt for license information. + +Authors of source code +---------------------- +paramat (MIT) + +Authors of media (sounds) +------------------------- +Yuval (CC0 1.0) +https://freesound.org/people/Yuval/sounds/197023/ + env_sounds_water.*.ogg + +Halion (CC0 1.0) +https://freesound.org/people/Halion/sounds/17785/ + env_sounds_lava.*.ogg diff --git a/mods/env_sounds/init.lua b/mods/env_sounds/init.lua new file mode 100644 index 00000000..31cc483e --- /dev/null +++ b/mods/env_sounds/init.lua @@ -0,0 +1,112 @@ +-- Parameters + +-- Node search radius around player +local radius = 8 + +local allsounds = { + ["env_sounds_water"] = { + trigger = {"default:water_flowing", "default:river_water_flowing"}, + base_volume = 0.04, + max_volume = 0.4, + per_node = 0.004, + }, + ["env_sounds_lava"] = { + trigger = {"default:lava_source", "default:lava_flowing"}, + base_volume = 0, + max_volume = 0.6, + per_node = { + ["default:lava_source"] = 0.008, + ["default:lava_flowing"] = 0.002, + }, + }, +} + +if minetest.settings:get_bool("river_source_sounds") then + table.insert(allsounds["env_sounds_water"].trigger, + "default:river_water_source") +end + + +-- Cache the union of all trigger nodes + +local cache_triggers = {} + +for sound, def in pairs(allsounds) do + for _, name in ipairs(def.trigger) do + table.insert(cache_triggers, name) + end +end + + +-- Update sound for player + +local function update_sound(player) + local player_name = player:get_player_name() + local ppos = player:get_pos() + ppos = vector.add(ppos, player:get_properties().eye_height) + local areamin = vector.subtract(ppos, radius) + local areamax = vector.add(ppos, radius) + + local pos = minetest.find_nodes_in_area(areamin, areamax, cache_triggers, true) + if next(pos) == nil then -- If table empty + return + end + for sound, def in pairs(allsounds) do + -- Find average position + local posav = {0, 0, 0} + local count = 0 + for _, name in ipairs(def.trigger) do + if pos[name] then + for _, p in ipairs(pos[name]) do + posav[1] = posav[1] + p.x + posav[2] = posav[2] + p.y + posav[3] = posav[3] + p.z + end + count = count + #pos[name] + end + end + + if count > 0 then + posav = vector.new(posav[1] / count, posav[2] / count, + posav[3] / count) + + -- Calculate gain + local gain = def.base_volume + if type(def.per_node) == 'table' then + for name, multiplier in pairs(def.per_node) do + if pos[name] then + gain = gain + #pos[name] * multiplier + end + end + else + gain = gain + count * def.per_node + end + gain = math.min(gain, def.max_volume) + + minetest.sound_play(sound, { + pos = posav, + to_player = player_name, + gain = gain, + }, true) + end + end +end + + +-- Update sound when player joins + +minetest.register_on_joinplayer(function(player) + update_sound(player) +end) + + +-- Cyclic sound update + +local function cyclic_update() + for _, player in pairs(minetest.get_connected_players()) do + update_sound(player) + end + minetest.after(3.5, cyclic_update) +end + +minetest.after(0, cyclic_update) diff --git a/mods/env_sounds/license.txt b/mods/env_sounds/license.txt new file mode 100644 index 00000000..ff8867dd --- /dev/null +++ b/mods/env_sounds/license.txt @@ -0,0 +1,57 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2019 paramat + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (sounds) +-------------------------- + +CC0 1.0 Universal (CC0 1.0) Public Domain Dedication +Yuval + +No Copyright + +The person who associated a work with this deed has dedicated the work to the +public domain by waiving all of his or her rights to the work worldwide under +copyright law, including all related and neighboring rights, to the extent +allowed by law. + +You can copy, modify, distribute and perform the work, even for commercial +purposes, all without asking permission. See Other Information below. + +Other Information: + +In no way are the patent or trademark rights of any person affected by CC0, nor +are the rights that other persons may have in the work or in how the work is +used, such as publicity or privacy rights. + +Unless expressly stated otherwise, the person who associated a work with this +deed makes no warranties about the work, and disclaims liability for all uses +of the work, to the fullest extent permitted by applicable law. + +When using or citing the work, you should not imply endorsement by the author +or the affirmer. + +For more details: +https://creativecommons.org/publicdomain/zero/1.0/ diff --git a/mods/env_sounds/mod.conf b/mods/env_sounds/mod.conf new file mode 100644 index 00000000..ad6feb31 --- /dev/null +++ b/mods/env_sounds/mod.conf @@ -0,0 +1,3 @@ +name = env_sounds +description = Minetest Game mod: env_sounds +depends = default diff --git a/mods/env_sounds/sounds/env_sounds_lava.1.ogg b/mods/env_sounds/sounds/env_sounds_lava.1.ogg new file mode 100644 index 00000000..3eafce2d Binary files /dev/null and b/mods/env_sounds/sounds/env_sounds_lava.1.ogg differ diff --git a/mods/env_sounds/sounds/env_sounds_lava.2.ogg b/mods/env_sounds/sounds/env_sounds_lava.2.ogg new file mode 100644 index 00000000..8648f17f Binary files /dev/null and b/mods/env_sounds/sounds/env_sounds_lava.2.ogg differ diff --git a/mods/env_sounds/sounds/env_sounds_water.1.ogg b/mods/env_sounds/sounds/env_sounds_water.1.ogg new file mode 100644 index 00000000..aa808825 Binary files /dev/null and b/mods/env_sounds/sounds/env_sounds_water.1.ogg differ diff --git a/mods/env_sounds/sounds/env_sounds_water.2.ogg b/mods/env_sounds/sounds/env_sounds_water.2.ogg new file mode 100644 index 00000000..b3ff114f Binary files /dev/null and b/mods/env_sounds/sounds/env_sounds_water.2.ogg differ diff --git a/mods/env_sounds/sounds/env_sounds_water.3.ogg b/mods/env_sounds/sounds/env_sounds_water.3.ogg new file mode 100644 index 00000000..431a6ed3 Binary files /dev/null and b/mods/env_sounds/sounds/env_sounds_water.3.ogg differ diff --git a/mods/env_sounds/sounds/env_sounds_water.4.ogg b/mods/env_sounds/sounds/env_sounds_water.4.ogg new file mode 100644 index 00000000..56c2ee21 Binary files /dev/null and b/mods/env_sounds/sounds/env_sounds_water.4.ogg differ diff --git a/mods/ethereal b/mods/ethereal new file mode 160000 index 00000000..fd3ef9e0 --- /dev/null +++ b/mods/ethereal @@ -0,0 +1 @@ +Subproject commit fd3ef9e07886ab9d3c8d31ec50d285562d9f31ca diff --git a/mods/eventkeys b/mods/eventkeys new file mode 160000 index 00000000..bb20c725 --- /dev/null +++ b/mods/eventkeys @@ -0,0 +1 @@ +Subproject commit bb20c725ab280ac137468823e4d1662bb31f6104 diff --git a/mods/external_legacy/README.txt b/mods/external_legacy/README.txt deleted file mode 100644 index 6451fec3..00000000 --- a/mods/external_legacy/README.txt +++ /dev/null @@ -1,18 +0,0 @@ -Minetest 0.4 mod: external_legacy -================================= - -License of source code: ------------------------ -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -http://www.gnu.org/licenses/lgpl-2.1.html - -License of media (textures and sounds) --------------------------------------- -Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) -http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/external_legacy/init.lua b/mods/external_legacy/init.lua deleted file mode 100644 index 2160f3ee..00000000 --- a/mods/external_legacy/init.lua +++ /dev/null @@ -1,23 +0,0 @@ --- Minetest 0.4 mod: external_legacy --- See README.txt for licensing and other information. - --- Aliases to support moreores' ores -minetest.register_alias("moreores:mineral_gold", "default:stone_with_gold") -minetest.register_alias("moreores:gold_block", "default:goldblock") -minetest.register_alias("moreores:gold_lump", "default:gold_lump") -minetest.register_alias("moreores:gold_ingot", "default:gold_ingot") -minetest.register_alias("moreores:mineral_copper", "default:stone_with_copper") -minetest.register_alias("moreores:copper_lump", "default:copper_lump") -minetest.register_alias("moreores:copper_ingot", "default:copper_ingot") -minetest.register_alias("moreores:bronze_ingot", "default:bronze_ingot") -minetest.register_alias("moreores:bronze_block", "default:bronzeblock") - --- Aliases for the diamonds mod by InfinityProject -minetest.register_alias("diamonds:diamond_in_ground:", "default:stone_with_diamond") -minetest.register_alias("diamonds:block", "default:diamondblock") -minetest.register_alias("diamonds:sword", "default:sword_diamond") -minetest.register_alias("diamonds:pick", "default:pick_diamond") -minetest.register_alias("diamonds:shovel", "default:shovel_diamond") -minetest.register_alias("diamonds:axe", "default:axe_diamond") -minetest.register_alias("diamonds:diamond", "default:diamond") -minetest.register_alias("diamonds:ingot", "default:diamond") diff --git a/mods/farming/README.txt b/mods/farming/README.txt new file mode 100644 index 00000000..a6427d04 --- /dev/null +++ b/mods/farming/README.txt @@ -0,0 +1,43 @@ +Minetest Game mod: farming +========================== +See license.txt for license information. + +Authors of source code +---------------------- +Originally by PilzAdam (MIT) +webdesigner97 (MIT) +Various Minetest developers and contributors (MIT) + +Authors of media (textures) +--------------------------- +Created by PilzAdam (CC BY 3.0): + farming_bread.png + farming_soil.png + farming_soil_wet.png + farming_soil_wet_side.png + farming_string.png + +Created by BlockMen (CC BY 3.0): + farming_tool_diamondhoe.png + farming_tool_mesehoe.png + farming_tool_bronzehoe.png + farming_tool_steelhoe.png + farming_tool_stonehoe.png + farming_tool_woodhoe.png + +Created by MasterGollum (CC BY 3.0): + farming_straw.png + +Created by Gambit (CC BY 3.0): + farming_wheat.png + farming_wheat_*.png + farming_cotton_*.png + farming_flour.png + farming_cotton_seed.png + farming_wheat_seed.png + +Created by Napiophelios (CC BY-SA 3.0): + farming_cotton.png + +Created by Extex101 (CC BY-SA 3.0): + farming_cotton_wild.png diff --git a/mods/farming/api.lua b/mods/farming/api.lua new file mode 100644 index 00000000..414ebc0f --- /dev/null +++ b/mods/farming/api.lua @@ -0,0 +1,400 @@ +-- farming/api.lua + +-- support for MT game translation. +local S = farming.get_translator + +-- Wear out hoes, place soil +-- TODO Ignore group:flower +farming.registered_plants = {} + +farming.hoe_on_use = function(itemstack, user, pointed_thing, uses) + local pt = pointed_thing + -- check if pointing at a node + if not pt then + return + end + if pt.type ~= "node" then + return + end + + local under = minetest.get_node(pt.under) + local p = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z} + local above = minetest.get_node(p) + + -- return if any of the nodes is not registered + if not minetest.registered_nodes[under.name] then + return + end + if not minetest.registered_nodes[above.name] then + return + end + + -- check if the node above the pointed thing is air + if above.name ~= "air" then + return + end + + -- check if pointing at soil + if minetest.get_item_group(under.name, "soil") ~= 1 then + return + end + + -- check if (wet) soil defined + local regN = minetest.registered_nodes + if regN[under.name].soil == nil or regN[under.name].soil.wet == nil or regN[under.name].soil.dry == nil then + return + end + + local player_name = user and user:get_player_name() or "" + + if minetest.is_protected(pt.under, player_name) then + minetest.record_protection_violation(pt.under, player_name) + return + end + if minetest.is_protected(pt.above, player_name) then + minetest.record_protection_violation(pt.above, player_name) + return + end + + -- turn the node into soil and play sound + minetest.set_node(pt.under, {name = regN[under.name].soil.dry}) + minetest.sound_play("default_dig_crumbly", { + pos = pt.under, + gain = 0.3, + }, true) + + if not minetest.is_creative_enabled(player_name) then + -- wear tool + local wdef = itemstack:get_definition() + itemstack:add_wear_by_uses(uses) + -- tool break sound + if itemstack:get_count() == 0 and wdef.sound and wdef.sound.breaks then + minetest.sound_play(wdef.sound.breaks, {pos = pt.above, + gain = 0.5}, true) + end + end + return itemstack +end + +-- Register new hoes +farming.register_hoe = function(name, def) + -- Check for : prefix (register new hoes in your mod's namespace) + if name:sub(1,1) ~= ":" then + name = ":" .. name + end + -- Check def table + if def.description == nil then + def.description = S("Hoe") + end + if def.inventory_image == nil then + def.inventory_image = "unknown_item.png" + end + if def.max_uses == nil then + def.max_uses = 30 + end + -- Register the tool + minetest.register_tool(name, { + description = def.description, + inventory_image = def.inventory_image, + on_use = function(itemstack, user, pointed_thing) + return farming.hoe_on_use(itemstack, user, pointed_thing, def.max_uses) + end, + groups = def.groups, + sound = {breaks = "default_tool_breaks"}, + }) + -- Register its recipe + if def.recipe then + minetest.register_craft({ + output = name:sub(2), + recipe = def.recipe + }) + elseif def.material then + minetest.register_craft({ + output = name:sub(2), + recipe = { + {def.material, def.material}, + {"", "group:stick"}, + {"", "group:stick"} + } + }) + end +end + +-- how often node timers for plants will tick, +/- some random value +local function tick(pos) + minetest.get_node_timer(pos):start(math.random(166, 286)) +end +-- how often a growth failure tick is retried (e.g. too dark) +local function tick_again(pos) + minetest.get_node_timer(pos):start(math.random(40, 80)) +end + +-- Seed placement +farming.place_seed = function(itemstack, placer, pointed_thing, plantname) + local pt = pointed_thing + -- check if pointing at a node + if not pt then + return itemstack + end + if pt.type ~= "node" then + return itemstack + end + + local under = minetest.get_node(pt.under) + local above = minetest.get_node(pt.above) + + local player_name = placer and placer:get_player_name() or "" + + if minetest.is_protected(pt.under, player_name) then + minetest.record_protection_violation(pt.under, player_name) + return + end + if minetest.is_protected(pt.above, player_name) then + minetest.record_protection_violation(pt.above, player_name) + return + end + + -- return if any of the nodes is not registered + if not minetest.registered_nodes[under.name] then + return itemstack + end + if not minetest.registered_nodes[above.name] then + return itemstack + end + + -- check if pointing at the top of the node + if pt.above.y ~= pt.under.y+1 then + return itemstack + end + + -- check if you can replace the node above the pointed node + if not minetest.registered_nodes[above.name].buildable_to then + return itemstack + end + + -- check if pointing at soil + if minetest.get_item_group(under.name, "soil") < 2 then + return itemstack + end + + -- add the node and remove 1 item from the itemstack + default.log_player_action(placer, "places node", plantname, "at", pt.above) + minetest.add_node(pt.above, {name = plantname, param2 = 1}) + tick(pt.above) + if not minetest.is_creative_enabled(player_name) then + itemstack:take_item() + end + return itemstack +end + +farming.grow_plant = function(pos, elapsed) + local node = minetest.get_node(pos) + local name = node.name + local def = minetest.registered_nodes[name] + + if not def.next_plant then + -- disable timer for fully grown plant + return + end + + -- grow seed + if minetest.get_item_group(node.name, "seed") and def.fertility then + local soil_node = minetest.get_node_or_nil({x = pos.x, y = pos.y - 1, z = pos.z}) + if not soil_node then + tick_again(pos) + return + end + -- omitted is a check for light, we assume seeds can germinate in the dark. + for _, v in pairs(def.fertility) do + if minetest.get_item_group(soil_node.name, v) ~= 0 then + local placenode = {name = def.next_plant} + if def.place_param2 then + placenode.param2 = def.place_param2 + end + minetest.swap_node(pos, placenode) + if minetest.registered_nodes[def.next_plant].next_plant then + tick(pos) + return + end + end + end + + return + end + + -- check if on wet soil + local below = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) + if minetest.get_item_group(below.name, "soil") < 3 then + tick_again(pos) + return + end + + -- check light + local light = minetest.get_node_light(pos) + if not light or light < def.minlight or light > def.maxlight then + tick_again(pos) + return + end + + -- grow + local placenode = {name = def.next_plant} + if def.place_param2 then + placenode.param2 = def.place_param2 + end + minetest.swap_node(pos, placenode) + + -- new timer needed? + if minetest.registered_nodes[def.next_plant].next_plant then + tick(pos) + end + return +end + +-- Register plants +farming.register_plant = function(name, def) + local mname = name:split(":")[1] + local pname = name:split(":")[2] + + -- Check def table + if not def.description then + def.description = S("Seed") + end + if not def.harvest_description then + def.harvest_description = pname:gsub("^%l", string.upper) + end + if not def.inventory_image then + def.inventory_image = "unknown_item.png" + end + if not def.steps then + return nil + end + if not def.minlight then + def.minlight = 1 + end + if not def.maxlight then + def.maxlight = 14 + end + if not def.fertility then + def.fertility = {} + end + + farming.registered_plants[pname] = def + + -- Register seed + local lbm_nodes = {mname .. ":seed_" .. pname} + local g = {seed = 1, snappy = 3, attached_node = 1, flammable = 2} + for k, v in pairs(def.fertility) do + g[v] = 1 + end + minetest.register_node(":" .. mname .. ":seed_" .. pname, { + description = def.description, + tiles = {def.inventory_image}, + inventory_image = def.inventory_image, + wield_image = def.inventory_image, + drawtype = "signlike", + groups = g, + paramtype = "light", + paramtype2 = "wallmounted", + place_param2 = def.place_param2 or nil, -- this isn't actually used for placement + walkable = false, + sunlight_propagates = true, + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + }, + fertility = def.fertility, + sounds = default.node_sound_dirt_defaults({ + dig = {name = "", gain = 0}, + dug = {name = "default_grass_footstep", gain = 0.2}, + place = {name = "default_place_node", gain = 0.25}, + }), + + on_place = function(itemstack, placer, pointed_thing) + local under = pointed_thing.under + local node = minetest.get_node(under) + local udef = minetest.registered_nodes[node.name] + if udef and udef.on_rightclick and + not (placer and placer:is_player() and + placer:get_player_control().sneak) then + return udef.on_rightclick(under, node, placer, itemstack, + pointed_thing) or itemstack + end + + return farming.place_seed(itemstack, placer, pointed_thing, mname .. ":seed_" .. pname) + end, + next_plant = mname .. ":" .. pname .. "_1", + on_timer = farming.grow_plant, + minlight = def.minlight, + maxlight = def.maxlight, + }) + + -- Register harvest + minetest.register_craftitem(":" .. mname .. ":" .. pname, { + description = def.harvest_description, + inventory_image = mname .. "_" .. pname .. ".png", + groups = def.groups or {flammable = 2}, + }) + + -- Register growing steps + for i = 1, def.steps do + local base_rarity = 1 + if def.steps ~= 1 then + base_rarity = 8 - (i - 1) * 7 / (def.steps - 1) + end + local drop = { + items = { + {items = {mname .. ":" .. pname}, rarity = base_rarity}, + {items = {mname .. ":" .. pname}, rarity = base_rarity * 2}, + {items = {mname .. ":seed_" .. pname}, rarity = base_rarity}, + {items = {mname .. ":seed_" .. pname}, rarity = base_rarity * 2}, + } + } + local nodegroups = {snappy = 3, flammable = 2, plant = 1, not_in_creative_inventory = 1, attached_node = 1} + nodegroups[pname] = i + + local next_plant = nil + + if i < def.steps then + next_plant = mname .. ":" .. pname .. "_" .. (i + 1) + lbm_nodes[#lbm_nodes + 1] = mname .. ":" .. pname .. "_" .. i + end + + minetest.register_node(":" .. mname .. ":" .. pname .. "_" .. i, { + drawtype = "plantlike", + waving = 1, + tiles = {mname .. "_" .. pname .. "_" .. i .. ".png"}, + paramtype = "light", + paramtype2 = def.paramtype2 or nil, + place_param2 = def.place_param2 or nil, + walkable = false, + buildable_to = true, + drop = drop, + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + }, + groups = nodegroups, + sounds = default.node_sound_leaves_defaults(), + next_plant = next_plant, + on_timer = farming.grow_plant, + minlight = def.minlight, + maxlight = def.maxlight, + }) + end + + -- replacement LBM for pre-nodetimer plants + minetest.register_lbm({ + name = ":" .. mname .. ":start_nodetimer_" .. pname, + nodenames = lbm_nodes, + action = function(pos, node) + tick_again(pos) + end, + }) + + -- Return + local r = { + seed = mname .. ":seed_" .. pname, + harvest = mname .. ":" .. pname + } + return r +end diff --git a/mods/farming/hoes.lua b/mods/farming/hoes.lua new file mode 100644 index 00000000..d005f6d0 --- /dev/null +++ b/mods/farming/hoes.lua @@ -0,0 +1,54 @@ +-- farming/hoes.lua + +-- support for MT game translation. +local S = farming.get_translator + +farming.register_hoe(":farming:hoe_wood", { + description = S("Wooden Hoe"), + inventory_image = "farming_tool_woodhoe.png", + max_uses = 30, + material = "group:wood", + groups = {hoe = 1, flammable = 2}, +}) + +farming.register_hoe(":farming:hoe_stone", { + description = S("Stone Hoe"), + inventory_image = "farming_tool_stonehoe.png", + max_uses = 90, + material = "group:stone", + groups = {hoe = 1} +}) + +farming.register_hoe(":farming:hoe_steel", { + description = S("Steel Hoe"), + inventory_image = "farming_tool_steelhoe.png", + max_uses = 500, + material = "default:steel_ingot", + groups = {hoe = 1} +}) + +-- The following are deprecated by removing the 'material' field to prevent +-- crafting and removing from creative inventory, to cause them to eventually +-- disappear from worlds. The registrations should be removed in a future +-- release. + +farming.register_hoe(":farming:hoe_bronze", { + description = S("Bronze Hoe"), + inventory_image = "farming_tool_bronzehoe.png", + max_uses = 220, + groups = {hoe = 1, not_in_creative_inventory = 1}, +}) + +farming.register_hoe(":farming:hoe_mese", { + description = S("Mese Hoe"), + inventory_image = "farming_tool_mesehoe.png", + max_uses = 350, + groups = {hoe = 1, not_in_creative_inventory = 1}, +}) + +farming.register_hoe(":farming:hoe_diamond", { + description = S("Diamond Hoe"), + inventory_image = "farming_tool_diamondhoe.png", + max_uses = 500, + groups = {hoe = 1, not_in_creative_inventory = 1}, +}) diff --git a/mods/farming/init.lua b/mods/farming/init.lua new file mode 100644 index 00000000..d328cb4a --- /dev/null +++ b/mods/farming/init.lua @@ -0,0 +1,171 @@ +-- farming/init.lua + +-- Load support for MT game translation. +local S = minetest.get_translator("farming") + +-- Global farming namespace + +farming = {} +farming.path = minetest.get_modpath("farming") +farming.get_translator = S + +-- Load files + +dofile(farming.path .. "/api.lua") +dofile(farming.path .. "/nodes.lua") +dofile(farming.path .. "/hoes.lua") + + +-- Wheat + +farming.register_plant("farming:wheat", { + description = S("Wheat Seed"), + harvest_description = S("Wheat"), + paramtype2 = "meshoptions", + inventory_image = "farming_wheat_seed.png", + steps = 8, + minlight = 13, + maxlight = default.LIGHT_MAX, + fertility = {"grassland"}, + groups = {food_wheat = 1, flammable = 4}, + place_param2 = 3, +}) + +minetest.register_craftitem("farming:flour", { + description = S("Flour"), + inventory_image = "farming_flour.png", + groups = {food_flour = 1, flammable = 1}, +}) + +minetest.register_craftitem("farming:bread", { + description = S("Bread"), + inventory_image = "farming_bread.png", + on_use = minetest.item_eat(5), + groups = {food_bread = 1, flammable = 2}, +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:flour", + recipe = {"farming:wheat", "farming:wheat", "farming:wheat", "farming:wheat"} +}) + +minetest.register_craft({ + type = "cooking", + cooktime = 15, + output = "farming:bread", + recipe = "farming:flour" +}) + + +-- Cotton + +farming.register_plant("farming:cotton", { + description = S("Cotton Seed"), + harvest_description = S("Cotton"), + inventory_image = "farming_cotton_seed.png", + steps = 8, + minlight = 13, + maxlight = default.LIGHT_MAX, + fertility = {"grassland", "desert"}, + groups = {flammable = 4}, +}) + +minetest.register_decoration({ + name = "farming:cotton_wild", + deco_type = "simple", + place_on = {"default:dry_dirt_with_dry_grass"}, + sidelen = 16, + noise_params = { + offset = -0.1, + scale = 0.1, + spread = {x = 50, y = 50, z = 50}, + seed = 4242, + octaves = 3, + persist = 0.7 + }, + biomes = {"savanna"}, + y_max = 31000, + y_min = 1, + decoration = "farming:cotton_wild", +}) + +minetest.register_craftitem("farming:string", { + description = S("String"), + inventory_image = "farming_string.png", + groups = {flammable = 2}, +}) + +minetest.register_craft({ + output = "wool:white", + recipe = { + {"farming:cotton", "farming:cotton"}, + {"farming:cotton", "farming:cotton"}, + } +}) + +minetest.register_craft({ + output = "farming:string 2", + recipe = { + {"farming:cotton"}, + {"farming:cotton"}, + } +}) + + +-- Straw + +minetest.register_craft({ + output = "farming:straw 3", + recipe = { + {"farming:wheat", "farming:wheat", "farming:wheat"}, + {"farming:wheat", "farming:wheat", "farming:wheat"}, + {"farming:wheat", "farming:wheat", "farming:wheat"}, + } +}) + +minetest.register_craft({ + output = "farming:wheat 3", + recipe = { + {"farming:straw"}, + } +}) + + +-- Fuels + +minetest.register_craft({ + type = "fuel", + recipe = "farming:wheat", + burntime = 1, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:cotton", + burntime = 1, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:string", + burntime = 1, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:hoe_wood", + burntime = 5, +}) + + +-- Register farming items as dungeon loot + +if minetest.global_exists("dungeon_loot") then + dungeon_loot.register({ + {name = "farming:string", chance = 0.5, count = {1, 8}}, + {name = "farming:wheat", chance = 0.5, count = {2, 5}}, + {name = "farming:seed_cotton", chance = 0.4, count = {1, 4}, + types = {"normal"}}, + }) +end diff --git a/mods/farming/license.txt b/mods/farming/license.txt new file mode 100644 index 00000000..b9708de3 --- /dev/null +++ b/mods/farming/license.txt @@ -0,0 +1,95 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2012-2016 PilzAdam +Copyright (C) 2014-2016 webdesigner97 +Copyright (C) 2012-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +License of media (textures) +--------------------------- + +Attribution 3.0 Unported (CC BY 3.0) +Copyright (C) 2012-2016 PilzAdam +Copyright (C) 2014-2016 BlockMen +Copyright (C) 2015-2016 MasterGollum +Copyright (C) 2015-2016 Gambit + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by/3.0/ + +----------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2017 Napiophelios +Copyright (C) 2020 Extex101 + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/farming/locale/farming.de.tr b/mods/farming/locale/farming.de.tr new file mode 100644 index 00000000..b16748db --- /dev/null +++ b/mods/farming/locale/farming.de.tr @@ -0,0 +1,28 @@ +# textdomain: farming +Hoe=Hacke +Seed=Samen +Wooden Hoe=Holzhacke +Stone Hoe=Steinhacke +Steel Hoe=Stahlhacke +Bronze Hoe=Bronzehacke +Mese Hoe=Mesehacke +Diamond Hoe=Diamanthacke +Wheat Seed=Weizensamen +Wheat=Weizen +Flour=Mehl +Bread=Brot +Cotton Seed=Baumwollsamen +Cotton=Baumwolle +String=Faden +Soil=Ackerboden +Wet Soil=Nasser Ackerboden +Savanna Soil=Savannenackerboden +Wet Savanna Soil=Nasser Savannenackerboden +Desert Sand Soil=Wüstensandackerboden +Wet Desert Sand Soil=Nasser Wüstensandackerboden +Straw=Stroh +Straw Stair=Strohtreppe +Inner Straw Stair=Innere Strohtreppe +Outer Straw Stair=Äußere Strohtreppe +Straw Slab=Strohplatte +Wild Cotton=Wilde Baumwolle diff --git a/mods/farming/locale/farming.eo.tr b/mods/farming/locale/farming.eo.tr new file mode 100644 index 00000000..6ccef7d8 --- /dev/null +++ b/mods/farming/locale/farming.eo.tr @@ -0,0 +1,28 @@ +# textdomain: farming +Hoe=Sarkilo +Seed=Semo +Wooden Hoe=Ligna Sarkilo +Stone Hoe=Ŝtona Sarkilo +Steel Hoe=Ŝtala Sarkilo +Bronze Hoe=Bronza Sarkilo +Mese Hoe=Mesea Sarkilo +Diamond Hoe=Diamanta Sarkilo +Wheat Seed=Tritika Semo +Wheat=Tritiko +Flour=Faruno +Bread=Pano +Cotton Seed=Katuna Semo +Cotton=Katuno +String=Ŝnuro +Soil=Tero +Wet Soil=Malseka Tero +Savanna Soil=Savana Tero +Wet Savanna Soil=Malseka Savana Tero +Desert Sand Soil=Dezerta Sablo Tero +Wet Desert Sand Soil=Malseka Dezerta Sablo Tero +Straw=Pajlo +Straw Stair=Pajla Ŝtupo +Inner Straw Stair=Interna Pajla Ŝtupo +Outer Straw Stair=Ekstera Pajla Ŝtupo +Straw Slab=Pajla Plato +Wild Cotton=Sovaĝa Kotonujo diff --git a/mods/farming/locale/farming.es.tr b/mods/farming/locale/farming.es.tr new file mode 100644 index 00000000..b17a4524 --- /dev/null +++ b/mods/farming/locale/farming.es.tr @@ -0,0 +1,34 @@ +# textdomain: farming +Hoe= +Seed= +Wooden Hoe=Azada de madera +Stone Hoe=Azada de piedra +Steel Hoe=Azada de acero +Bronze Hoe=Azada de bronce +Mese Hoe=Azada de mese +Diamond Hoe=Azada de diamante +Wheat Seed=Semilla de trigo +Wheat=Trigo +Flour=Harina +Bread=Pan +Cotton Seed=Semilla de algodón +Cotton=Algodón +String=Hilo +Soil=Tierra de cultivo +Wet Soil=Tierra de cultivo humeda +Savanna Soil= +Wet Savanna Soil= +Desert Sand Soil=Tierra de cultivo de arena de desierto +Wet Desert Sand Soil=Tierra de cultivo de arena de desierto humeda +Straw=Paja +Straw Stair=Escalera de paja +Inner Straw Stair=Escalera de paja interior +Outer Straw Stair=Escalera de paja exterior +Straw Slab=Losa de paja +Wild Cotton=Algodón silvestre + + +##### not used anymore ##### + +Dry Soil=Tierra de cultivo seca +Wet Dry Soil=Tierra de cultivo seca-humeda diff --git a/mods/farming/locale/farming.fr.tr b/mods/farming/locale/farming.fr.tr new file mode 100644 index 00000000..826949e1 --- /dev/null +++ b/mods/farming/locale/farming.fr.tr @@ -0,0 +1,34 @@ +# textdomain: farming +Hoe=Houe +Seed=Grain +Wooden Hoe=Houe en bois +Stone Hoe=Houe en pierre +Steel Hoe=Houe en acier +Bronze Hoe=Houe en bronze +Mese Hoe=Houe en Mese +Diamond Hoe=Houe en diamant +Wheat Seed=Grain de blé +Wheat=Blé +Flour=Farine +Bread=Pain +Cotton Seed=Graine de coton +Cotton=Coton +String=Ficelle +Soil=Sol +Wet Soil=Sol humide +Savanna Soil=Sol de la savanne +Wet Savanna Soil=Sol de la savanne humide +Desert Sand Soil=Sol de sable du désert +Wet Desert Sand Soil=Sol de sable du désert humide +Straw=Paille +Straw Stair=Escalier de paille +Inner Straw Stair=Escalier intérieur en paille +Outer Straw Stair=Escalier extérieur en paille +Straw Slab=Dalle de paille +Wild Cotton=Coton sauvage + + +##### not used anymore ##### + +Dry Soil=Sol sec +Wet Dry Soil=Sol sec et humide diff --git a/mods/farming/locale/farming.id.tr b/mods/farming/locale/farming.id.tr new file mode 100644 index 00000000..7b276801 --- /dev/null +++ b/mods/farming/locale/farming.id.tr @@ -0,0 +1,28 @@ +# textdomain: farming +Hoe=Cangkul +Seed=Benih +Wooden Hoe=Cangkul Kayu +Stone Hoe=Cangkul Batu +Steel Hoe=Cangkul Baja +Bronze Hoe=Cangkul Perunggu +Mese Hoe=Cangkul Mese +Diamond Hoe=Cangkul Berlian +Wheat Seed=Benih Gandum +Wheat=Gandum +Flour=Tepung +Bread=Roti +Cotton Seed=Benih Kapas +Cotton=Kapas +String=Benang +Soil=Tanah Tanam +Wet Soil=Tanah Tanam Basah +Savanna Soil=Tanah Tanam Sabana +Wet Savanna Soil=Tanah Tanam Sabana Basah +Desert Sand Soil=Pasir Tanam Gurun +Wet Desert Sand Soil=Pasir Tanam Gurun Basah +Straw=Jerami +Straw Stair=Tangga Jerami +Inner Straw Stair=Tangga Jerami Dalam +Outer Straw Stair=Tangga Jerami Luar +Straw Slab=Lempengan Jerami +Wild Cotton=Kapas Liar diff --git a/mods/farming/locale/farming.it.tr b/mods/farming/locale/farming.it.tr new file mode 100644 index 00000000..aeb9c0a7 --- /dev/null +++ b/mods/farming/locale/farming.it.tr @@ -0,0 +1,34 @@ +# textdomain: farming +Hoe= +Seed= +Wooden Hoe=Zappa di legno +Stone Hoe=Zappa di pietra +Steel Hoe=Zappa d'acciaio +Bronze Hoe=Zappa di bronzo +Mese Hoe=Zappa di mese +Diamond Hoe=Zappa di diamante +Wheat Seed=Seme di grano +Wheat=Grano +Flour=Farina +Bread=Pane +Cotton Seed=Seme di cotone +Cotton=Cotone +String=Filo +Soil=Terreno +Wet Soil=Terreno bagnato +Savanna Soil= +Wet Savanna Soil= +Desert Sand Soil=Terreno di sabbia del deserto +Wet Desert Sand Soil=Terreno bagnato di sabbia del deserto +Straw=Paglia +Straw Stair=Scala di paglia +Inner Straw Stair=Scala di paglia interna +Outer Straw Stair=Scala di paglia esterna +Straw Slab=Lastra di paglia +Wild Cotton= + + +##### not used anymore ##### + +Dry Soil=Terreno asciutto +Wet Dry Soil=Terreno asciutto bagnato diff --git a/mods/farming/locale/farming.ja.tr b/mods/farming/locale/farming.ja.tr new file mode 100644 index 00000000..a95d40c8 --- /dev/null +++ b/mods/farming/locale/farming.ja.tr @@ -0,0 +1,28 @@ +# textdomain: farming +Hoe=クワ +Seed=種 +Wooden Hoe=木のクワ +Stone Hoe=石のクワ +Steel Hoe=鉄のクワ +Bronze Hoe=青銅のクワ +Mese Hoe=メセのクワ +Diamond Hoe=ダイヤモンドのクワ +Wheat Seed=小麦の種 +Wheat=小麦 +Flour=小麦粉 +Bread=パン +Cotton Seed=綿の種 +Cotton=綿 +String=糸 +Soil=土壌 +Wet Soil=湿った土壌 +Savanna Soil=サバンナの土壌 +Wet Savanna Soil=湿ったサバンナの土壌 +Desert Sand Soil=砂漠の砂の土壌 +Wet Desert Sand Soil=湿った砂漠の砂の土壌 +Straw=ワラ +Straw Stair=ワラの階段 +Inner Straw Stair=へっこんだワラの階段 +Outer Straw Stair=でっぱったワラの階段 +Straw Slab=ワラのハーフブロック +Wild Cotton=天然綿 diff --git a/mods/farming/locale/farming.jbo.tr b/mods/farming/locale/farming.jbo.tr new file mode 100644 index 00000000..51bb9db9 --- /dev/null +++ b/mods/farming/locale/farming.jbo.tr @@ -0,0 +1,28 @@ +# textdomain: farming +Hoe=lo te plixa +Seed=lo tsiju +Wooden Hoe=lo mudri te plixa +Stone Hoe=lo rokci te plixa +Steel Hoe=lo gasta te plixa +Bronze Hoe=lo ransu te plixa +Mese Hoe=lo za'e kunrmese te plixa +Diamond Hoe=lo tabjme te plixa +Wheat Seed=lo tsiju be lo maxri +Wheat=lo maxri +Flour=lo grupu'o +Bread=lo nanba +Cotton Seed=lo tsiju be lo mapni +Cotton=lo mapni +String=lo skori +Soil=lo ferti dertu +Wet Soil=lo cilmo ke ferti dertu +Savanna Soil=lo ferti ke sudytu'a dertu +Wet Savanna Soil=lo cilmo ke ferti ke sudytu'a dertu +Desert Sand Soil=lo ferti ke cantu'a canre +Wet Desert Sand Soil=lo cilmo ke ferti ke cantu'a canre +Straw=lo sudysrasu +Straw Stair=lo sudysrasu serti +Inner Straw Stair=lo zo'i sudysrasu serti +Outer Straw Stair=lo ze'o sudysrasu serti +Straw Slab=lo sudysrasu ke xadba bliku +Wild Cotton=lo cilce ke mapni spati diff --git a/mods/farming/locale/farming.ms.tr b/mods/farming/locale/farming.ms.tr new file mode 100644 index 00000000..95b8709d --- /dev/null +++ b/mods/farming/locale/farming.ms.tr @@ -0,0 +1,34 @@ +# textdomain: farming +Hoe= +Seed= +Wooden Hoe=Cangkul Kayu +Stone Hoe=Cangkul Batu +Steel Hoe=Cangkul Keluli +Bronze Hoe=Cangkul Gangsa +Mese Hoe=Cangkul Mese +Diamond Hoe=Cangkul Intan +Wheat Seed=Benih Gandum +Wheat=Gandum +Flour=Tepung +Bread=Roti +Cotton Seed=Benih Kapas +Cotton=Kapas +String=Benang +Soil=Tanih +Wet Soil=Tanih Lembap +Savanna Soil= +Wet Savanna Soil= +Desert Sand Soil=Tanih Pasir Gurun +Wet Desert Sand Soil=Tanih Pasir Gurun Lembap +Straw=Jerami +Straw Stair=Tangga Jerami +Inner Straw Stair=Tangga Jerami Dalaman +Outer Straw Stair=Tangga Jerami Luaran +Straw Slab=Papak Jerami +Wild Cotton= + + +##### not used anymore ##### + +Dry Soil=Tanih Kering +Wet Dry Soil=Tanih Kering Lembap diff --git a/mods/farming/locale/farming.pl.tr b/mods/farming/locale/farming.pl.tr new file mode 100644 index 00000000..ffde3b76 --- /dev/null +++ b/mods/farming/locale/farming.pl.tr @@ -0,0 +1,28 @@ +# textdomain: farming +Hoe=Motyka +Seed=Nasiona +Wooden Hoe=Drewniana motyka +Stone Hoe=Kamienna motyka +Steel Hoe=Stalowa motyka +Bronze Hoe=Brązowa motyka +Mese Hoe=Mesowa motyka +Diamond Hoe=Diamentowa motyka +Wheat Seed=Nasiona pszenicy +Wheat=Pszenica +Flour=Mąka +Bread=Chleb +Cotton Seed=Nasiona bawełny +Cotton=Bawełna +String=Nić +Soil=Gleba +Wet Soil=Mokra gleba +Savanna Soil=Sawannowa gleba +Wet Savanna Soil=Mokra sawannowa gleba +Desert Sand Soil=Pustynno-piaszczysta gleba +Wet Desert Sand Soil=Mokra pustynno-piaszczysta gleba +Straw=Słoma +Straw Stair=Słomiane schody +Inner Straw Stair=Wewnętrzne słomiane schody +Outer Straw Stair=Zewnętrzne słomiane schody +Straw Slab=Słomiany półblok +Wild Cotton=Dzika bawełna diff --git a/mods/farming/locale/farming.pt_BR.tr b/mods/farming/locale/farming.pt_BR.tr new file mode 100644 index 00000000..fb0a83c1 --- /dev/null +++ b/mods/farming/locale/farming.pt_BR.tr @@ -0,0 +1,28 @@ +# textdomain: farming +Hoe=Enxada +Seed=Semente +Wooden Hoe=Enxada de Madeira +Stone Hoe=Enxada de Pedra +Steel Hoe=Enxada de Aço +Bronze Hoe=Enxada de Bronze +Mese Hoe=Enxada de Mese +Diamond Hoe=Enxada de Diamante +Wheat Seed=Semente de Trigo +Wheat=Trigo +Flour=Farinha +Bread=Pão +Cotton Seed=Semente de Algodão +Cotton=Algodão +String=Fio +Soil=Solo +Wet Soil=Solo Molhado +Savanna Soil=Solo da Savana +Wet Savanna Soil=Solo da Savana Molhado +Desert Sand Soil=Solo Arenoso do Deserto +Wet Desert Sand Soil=Solo Arenoso do Deserto Molhado +Straw=Palha +Straw Stair=Escada de Palha +Inner Straw Stair=Escada de Palha Externa +Outer Straw Stair=Escada de Palha Interna +Straw Slab=Laje de Palha +Wild Cotton=Algodão Selvagem diff --git a/mods/farming/locale/farming.ru.tr b/mods/farming/locale/farming.ru.tr new file mode 100644 index 00000000..4da864e9 --- /dev/null +++ b/mods/farming/locale/farming.ru.tr @@ -0,0 +1,34 @@ +# textdomain: farming +Hoe=Мотыга +Seed=Семя +Wooden Hoe=Деревянная Мотыга +Stone Hoe=Каменная Мотыга +Steel Hoe=Стальная Мотыга +Bronze Hoe=Бронзовая Мотыга +Mese Hoe=Месе Мотыга +Diamond Hoe=Алмазная Мотыга +Wheat Seed=Семена Пшеницы +Wheat=Пшеница +Flour=Мука +Bread=Хлеб +Cotton Seed=Семена Хлопчатника +Cotton=Хлопок +String=Нить +Soil=Почва +Wet Soil=Влажная Почва +Savanna Soil=Саванная Почва +Wet Savanna Soil=Влажная Саванная Почва +Desert Sand Soil=Пустынная Песчаная Почва +Wet Desert Sand Soil=Влажная Пустынная Песчаная Почва +Straw=Солома +Straw Stair=Соломенная Ступень +Inner Straw Stair=Угловая Соломенная Ступень (Внутренний Угол) +Outer Straw Stair=Угловая Соломенная Ступень (Внешний Угол) +Straw Slab=Соломенная Плита +Wild Cotton=Неокультуренный Хлопчатник + + +##### not used anymore ##### + +Dry Soil=Сухая Почва +Wet Dry Soil=Влажная Сухая Почва diff --git a/mods/farming/locale/farming.sk.tr b/mods/farming/locale/farming.sk.tr new file mode 100644 index 00000000..2caa4b57 --- /dev/null +++ b/mods/farming/locale/farming.sk.tr @@ -0,0 +1,28 @@ +# textdomain: farming +Hoe=Motyka +Seed=Semienko +Wooden Hoe=Drevená motyka +Stone Hoe=Kamenná motyka +Steel Hoe=Oceľová motyka +Bronze Hoe=Bronzová motyka +Mese Hoe=Mese motyka +Diamond Hoe=Diamantová motyka +Wheat Seed=Pšeničné semienko +Wheat=Pšenica +Flour=Múka +Bread=Chlieb +Cotton Seed=Bavlnené semienko +Cotton=Bavlna +String=Šňúra +Soil=Zemina +Wet Soil=Mokrá zemina +Savanna Soil=Zemina zo savany +Wet Savanna Soil=Morká zemina zo savany +Desert Sand Soil=Zemina s púšte +Wet Desert Sand Soil=Mokrá zemina s púšte +Straw=Slama +Straw Stair=Slamenné schody +Inner Straw Stair=Vnútorné slamenné schodisko +Outer Straw Stair=Vonkajšie slamenné schodisko +Straw Slab=Slamenná doska +Wild Cotton=Divoká bavlna diff --git a/mods/farming/locale/farming.sv.tr b/mods/farming/locale/farming.sv.tr new file mode 100644 index 00000000..e6c9e685 --- /dev/null +++ b/mods/farming/locale/farming.sv.tr @@ -0,0 +1,28 @@ +# textdomain: farming +Hoe=Kratta +Seed=Frö +Wooden Hoe=Träkratta +Stone Hoe=Stenkratta +Steel Hoe=Stålkratta +Bronze Hoe=Bronskratta +Mese Hoe=Mesekratta +Diamond Hoe=Diamantkratta +Wheat Seed=Vetefrö +Wheat=Vete +Flour=Mjöl +Bread=Bröd +Cotton Seed=Bomullfrö +Cotton=Bomull +String=Snöre +Soil=Odlinngsmark +Wet Soil=Våt Odlingsmark +Savanna Soil=Savannodlingsmark +Wet Savanna Soil=Våt savannodlingsmark +Desert Sand Soil=Ökensandsodlingsmark +Wet Desert Sand Soil=Våt ökensandsodlingsmark +Straw=Halm +Straw Stair=Halmtrappa +Inner Straw Stair=Inre halmtrappa +Outer Straw Stair=Yttre halmtrappa +Straw Slab=Halmplatta +Wild Cotton= diff --git a/mods/farming/locale/farming.uk.tr b/mods/farming/locale/farming.uk.tr new file mode 100644 index 00000000..854491c1 --- /dev/null +++ b/mods/farming/locale/farming.uk.tr @@ -0,0 +1,28 @@ +# textdomain: farming +Hoe=Мотига +Seed=Насіння +Wooden Hoe=Дерев'яна Мотига +Stone Hoe=Кам'яна Мотига +Steel Hoe=Сталева Мотига +Bronze Hoe=Бронзова Мотига +Mese Hoe=Месе Мотига +Diamond Hoe=Алмазна Мотига +Wheat Seed=Насіння Пшениці +Wheat=Пшениця +Flour=Мука +Bread=Хліб +Cotton Seed=Насіння Бавовнику +Cotton=Бавовна +String=Нитка +Soil=Ґрунт +Wet Soil=Вологий Ґрунт +Savanna Soil=Саванновий Ґрунт +Wet Savanna Soil=Вологий Саванновий Ґрунт +Desert Sand Soil=Пустинний Піщаний Ґрунт +Wet Desert Sand Soil=Вологий Пустельний Піщаний Ґрунт +Straw=Солома +Straw Stair=Солом'яна Сходинка +Inner Straw Stair=Кутова Солом'яна Сходинка (Внутрішній Кут) +Outer Straw Stair=Кутова Солом'яна Сходинка (Зовнішній Кут) +Straw Slab=Солом'яна Плита +Wild Cotton=Дикий Бавовник diff --git a/mods/farming/locale/farming.zh_CN.tr b/mods/farming/locale/farming.zh_CN.tr new file mode 100644 index 00000000..33ad9be4 --- /dev/null +++ b/mods/farming/locale/farming.zh_CN.tr @@ -0,0 +1,34 @@ +# textdomain: farming +Hoe=锄头 +Seed=种子 +Wooden Hoe=木锄头 +Stone Hoe=石锄头 +Steel Hoe=铁锄头 +Bronze Hoe=青铜锄头 +Mese Hoe=黄石锄头 +Diamond Hoe=钻石锄头 +Wheat Seed=小麦种子 +Wheat=小麦 +Flour=面粉 +Bread=面包 +Cotton Seed=棉花种子 +Cotton=棉 +String=线 +Soil=土 +Wet Soil=湿土 +Savanna Soil=草原土 +Wet Savanna Soil=湿草原土 +Desert Sand Soil=沙漠沙土 +Wet Desert Sand Soil=湿沙漠沙土 +Straw=稻草 +Straw Stair=稻草台阶 +Inner Straw Stair=稻草内楼梯 +Outer Straw Stair=稻草外楼梯 +Straw Slab=稻草板 +Wild Cotton=野棉花 + + +##### not used anymore ##### + +Dry Soil=干土 +Wet Dry Soil=湿干土 diff --git a/mods/farming/locale/farming.zh_TW.tr b/mods/farming/locale/farming.zh_TW.tr new file mode 100644 index 00000000..e6a1f35d --- /dev/null +++ b/mods/farming/locale/farming.zh_TW.tr @@ -0,0 +1,34 @@ +# textdomain: farming +Hoe= +Seed= +Wooden Hoe=木鋤頭 +Stone Hoe=石鋤頭 +Steel Hoe=鐵鋤頭 +Bronze Hoe=青銅鋤頭 +Mese Hoe=黃石鋤頭 +Diamond Hoe=鑽石鋤頭 +Wheat Seed=小麥種子 +Wheat=小麥 +Flour=麵粉 +Bread=麵包 +Cotton Seed=棉花種子 +Cotton=棉 +String=線 +Soil=土 +Wet Soil=溼土 +Savanna Soil= +Wet Savanna Soil= +Desert Sand Soil=沙漠沙土 +Wet Desert Sand Soil=溼沙漠沙土 +Straw=稻草 +Straw Stair=稻草臺階 +Inner Straw Stair=稻草內樓梯 +Outer Straw Stair=稻草外樓梯 +Straw Slab=稻草板 +Wild Cotton= + + +##### not used anymore ##### + +Dry Soil=乾土 +Wet Dry Soil=溼乾土 diff --git a/mods/farming/locale/template.txt b/mods/farming/locale/template.txt new file mode 100644 index 00000000..af923474 --- /dev/null +++ b/mods/farming/locale/template.txt @@ -0,0 +1,28 @@ +# textdomain: farming +Hoe= +Seed= +Wooden Hoe= +Stone Hoe= +Steel Hoe= +Bronze Hoe= +Mese Hoe= +Diamond Hoe= +Wheat Seed= +Wheat= +Flour= +Bread= +Cotton Seed= +Cotton= +String= +Soil= +Wet Soil= +Savanna Soil= +Wet Savanna Soil= +Desert Sand Soil= +Wet Desert Sand Soil= +Straw= +Straw Stair= +Inner Straw Stair= +Outer Straw Stair= +Straw Slab= +Wild Cotton= diff --git a/mods/farming/mod.conf b/mods/farming/mod.conf new file mode 100644 index 00000000..9a76a6a7 --- /dev/null +++ b/mods/farming/mod.conf @@ -0,0 +1,4 @@ +name = farming +description = Minetest Game mod: farming +depends = default, wool, stairs +optional_depends = dungeon_loot diff --git a/mods/farming/nodes.lua b/mods/farming/nodes.lua new file mode 100644 index 00000000..b5f90f96 --- /dev/null +++ b/mods/farming/nodes.lua @@ -0,0 +1,282 @@ +-- farming/nodes.lua + +-- support for MT game translation. +local S = farming.get_translator + +minetest.override_item("default:dirt", { + soil = { + base = "default:dirt", + dry = "farming:soil", + wet = "farming:soil_wet" + } +}) + +minetest.override_item("default:dirt_with_grass", { + soil = { + base = "default:dirt_with_grass", + dry = "farming:soil", + wet = "farming:soil_wet" + } +}) + +minetest.override_item("default:dirt_with_dry_grass", { + soil = { + base = "default:dirt_with_dry_grass", + dry = "farming:soil", + wet = "farming:soil_wet" + } +}) + +minetest.override_item("default:dirt_with_rainforest_litter", { + soil = { + base = "default:dirt_with_rainforest_litter", + dry = "farming:soil", + wet = "farming:soil_wet" + } +}) + +minetest.override_item("default:dirt_with_coniferous_litter", { + soil = { + base = "default:dirt_with_coniferous_litter", + dry = "farming:soil", + wet = "farming:soil_wet" + } +}) + +minetest.override_item("default:dry_dirt", { + soil = { + base = "default:dry_dirt", + dry = "farming:dry_soil", + wet = "farming:dry_soil_wet" + } +}) + +minetest.override_item("default:dry_dirt_with_dry_grass", { + soil = { + base = "default:dry_dirt_with_dry_grass", + dry = "farming:dry_soil", + wet = "farming:dry_soil_wet" + } +}) + +minetest.register_node("farming:soil", { + description = S("Soil"), + tiles = {"default_dirt.png^farming_soil.png", "default_dirt.png"}, + drop = "default:dirt", + groups = {crumbly=3, not_in_creative_inventory=1, soil=2, grassland = 1, field = 1}, + sounds = default.node_sound_dirt_defaults(), + soil = { + base = "default:dirt", + dry = "farming:soil", + wet = "farming:soil_wet" + } +}) + +minetest.register_node("farming:soil_wet", { + description = S("Wet Soil"), + tiles = {"default_dirt.png^farming_soil_wet.png", "default_dirt.png^farming_soil_wet_side.png"}, + drop = "default:dirt", + groups = {crumbly=3, not_in_creative_inventory=1, soil=3, wet = 1, grassland = 1, field = 1}, + sounds = default.node_sound_dirt_defaults(), + soil = { + base = "default:dirt", + dry = "farming:soil", + wet = "farming:soil_wet" + } +}) + +minetest.register_node("farming:dry_soil", { + description = S("Savanna Soil"), + tiles = {"default_dry_dirt.png^farming_soil.png", "default_dry_dirt.png"}, + drop = "default:dry_dirt", + groups = {crumbly=3, not_in_creative_inventory=1, soil=2, grassland = 1, field = 1}, + sounds = default.node_sound_dirt_defaults(), + soil = { + base = "default:dry_dirt", + dry = "farming:dry_soil", + wet = "farming:dry_soil_wet" + } +}) + +minetest.register_node("farming:dry_soil_wet", { + description = S("Wet Savanna Soil"), + tiles = {"default_dry_dirt.png^farming_soil_wet.png", "default_dry_dirt.png^farming_soil_wet_side.png"}, + drop = "default:dry_dirt", + groups = {crumbly=3, not_in_creative_inventory=1, soil=3, wet = 1, grassland = 1, field = 1}, + sounds = default.node_sound_dirt_defaults(), + soil = { + base = "default:dry_dirt", + dry = "farming:dry_soil", + wet = "farming:dry_soil_wet" + } +}) + +minetest.override_item("default:desert_sand", { + groups = {crumbly=3, falling_node=1, sand=1, soil = 1}, + soil = { + base = "default:desert_sand", + dry = "farming:desert_sand_soil", + wet = "farming:desert_sand_soil_wet" + } +}) +minetest.register_node("farming:desert_sand_soil", { + description = S("Desert Sand Soil"), + drop = "default:desert_sand", + tiles = {"farming_desert_sand_soil.png", "default_desert_sand.png"}, + groups = {crumbly=3, not_in_creative_inventory = 1, falling_node=1, sand=1, soil = 2, desert = 1, field = 1}, + sounds = default.node_sound_sand_defaults(), + soil = { + base = "default:desert_sand", + dry = "farming:desert_sand_soil", + wet = "farming:desert_sand_soil_wet" + } +}) + +minetest.register_node("farming:desert_sand_soil_wet", { + description = S("Wet Desert Sand Soil"), + drop = "default:desert_sand", + tiles = {"farming_desert_sand_soil_wet.png", "farming_desert_sand_soil_wet_side.png"}, + groups = {crumbly=3, falling_node=1, sand=1, not_in_creative_inventory=1, soil=3, wet = 1, desert = 1, field = 1}, + sounds = default.node_sound_sand_defaults(), + soil = { + base = "default:desert_sand", + dry = "farming:desert_sand_soil", + wet = "farming:desert_sand_soil_wet" + } +}) + +minetest.register_node("farming:straw", { + description = S("Straw"), + tiles = {"farming_straw.png"}, + is_ground_content = false, + groups = {snappy=3, flammable=4, fall_damage_add_percent=-30}, + sounds = default.node_sound_leaves_defaults(), +}) + +-- Registered before the stairs so the stairs get fuel recipes. +minetest.register_craft({ + type = "fuel", + recipe = "farming:straw", + burntime = 3, +}) + +do + local recipe = "farming:straw" + local groups = {snappy = 3, flammable = 4} + local images = {"farming_straw.png"} + local sounds = default.node_sound_leaves_defaults() + + stairs.register_stair("straw", recipe, groups, images, S("Straw Stair"), + sounds, true) + stairs.register_stair_inner("straw", recipe, groups, images, "", + sounds, true, S("Inner Straw Stair")) + stairs.register_stair_outer("straw", recipe, groups, images, "", + sounds, true, S("Outer Straw Stair")) + stairs.register_slab("straw", recipe, groups, images, S("Straw Slab"), + sounds, true) +end + +minetest.register_abm({ + label = "Farming soil", + nodenames = {"group:field"}, + interval = 15, + chance = 4, + action = function(pos, node) + local n_def = minetest.registered_nodes[node.name] or nil + local wet = n_def.soil.wet or nil + local base = n_def.soil.base or nil + local dry = n_def.soil.dry or nil + if not n_def or not n_def.soil or not wet or not base or not dry then + return + end + + pos.y = pos.y + 1 + local nn = minetest.get_node_or_nil(pos) + if not nn or not nn.name then + return + end + local nn_def = minetest.registered_nodes[nn.name] or nil + pos.y = pos.y - 1 + + if nn_def and nn_def.walkable and minetest.get_item_group(nn.name, "plant") == 0 then + minetest.set_node(pos, {name = base}) + return + end + -- check if there is water nearby + local wet_lvl = minetest.get_item_group(node.name, "wet") + if minetest.find_node_near(pos, 3, {"group:water"}) then + -- if it is dry soil and not base node, turn it into wet soil + if wet_lvl == 0 then + minetest.set_node(pos, {name = wet}) + end + else + -- only turn back if there are no unloaded blocks (and therefore + -- possible water sources) nearby + if not minetest.find_node_near(pos, 3, {"ignore"}) then + -- turn it back into base if it is already dry + if wet_lvl == 0 then + -- only turn it back if there is no plant/seed on top of it + if minetest.get_item_group(nn.name, "plant") == 0 and minetest.get_item_group(nn.name, "seed") == 0 then + minetest.set_node(pos, {name = base}) + end + + -- if its wet turn it back into dry soil + elseif wet_lvl == 1 then + minetest.set_node(pos, {name = dry}) + end + end + end + end, +}) + + +-- Make default:grass_* occasionally drop wheat seed + +for i = 1, 5 do + minetest.override_item("default:grass_"..i, {drop = { + max_items = 1, + items = { + {items = {"farming:seed_wheat"}, rarity = 5}, + {items = {"default:grass_1"}}, + } + }}) +end + + +-- Make default:junglegrass occasionally drop cotton seed. + +-- This is the old source of cotton seeds that makes no sense. It is a leftover +-- from Mapgen V6 where junglegrass was the only plant available to be a source. +-- This source is kept for now to avoid disruption but should probably be +-- removed in future as players get used to the new source. + +minetest.override_item("default:junglegrass", {drop = { + max_items = 1, + items = { + {items = {"farming:seed_cotton"}, rarity = 8}, + {items = {"default:junglegrass"}}, + } +}}) + + +-- Wild cotton as a source of cotton seed + +minetest.register_node("farming:cotton_wild", { + description = S("Wild Cotton"), + drawtype = "plantlike", + waving = 1, + tiles = {"farming_cotton_wild.png"}, + inventory_image = "farming_cotton_wild.png", + wield_image = "farming_cotton_wild.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy = 3, attached_node = 1, flammable = 4}, + drop = "farming:seed_cotton", + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -8 / 16, -6 / 16, 6 / 16, 5 / 16, 6 / 16}, + }, +}) diff --git a/mods/farming/textures/farming_bread.png b/mods/farming/textures/farming_bread.png new file mode 100644 index 00000000..16b25f19 Binary files /dev/null and b/mods/farming/textures/farming_bread.png differ diff --git a/mods/farming/textures/farming_cotton.png b/mods/farming/textures/farming_cotton.png new file mode 100644 index 00000000..8aa50e4e Binary files /dev/null and b/mods/farming/textures/farming_cotton.png differ diff --git a/mods/farming/textures/farming_cotton_1.png b/mods/farming/textures/farming_cotton_1.png new file mode 100644 index 00000000..5fc21807 Binary files /dev/null and b/mods/farming/textures/farming_cotton_1.png differ diff --git a/mods/farming/textures/farming_cotton_2.png b/mods/farming/textures/farming_cotton_2.png new file mode 100644 index 00000000..db4f4a3e Binary files /dev/null and b/mods/farming/textures/farming_cotton_2.png differ diff --git a/mods/farming/textures/farming_cotton_3.png b/mods/farming/textures/farming_cotton_3.png new file mode 100644 index 00000000..df3d7a77 Binary files /dev/null and b/mods/farming/textures/farming_cotton_3.png differ diff --git a/mods/farming/textures/farming_cotton_4.png b/mods/farming/textures/farming_cotton_4.png new file mode 100644 index 00000000..f314b07b Binary files /dev/null and b/mods/farming/textures/farming_cotton_4.png differ diff --git a/mods/farming/textures/farming_cotton_5.png b/mods/farming/textures/farming_cotton_5.png new file mode 100644 index 00000000..520e8f6c Binary files /dev/null and b/mods/farming/textures/farming_cotton_5.png differ diff --git a/mods/farming/textures/farming_cotton_6.png b/mods/farming/textures/farming_cotton_6.png new file mode 100644 index 00000000..f4bd4fb3 Binary files /dev/null and b/mods/farming/textures/farming_cotton_6.png differ diff --git a/mods/farming/textures/farming_cotton_7.png b/mods/farming/textures/farming_cotton_7.png new file mode 100644 index 00000000..11c0cf6d Binary files /dev/null and b/mods/farming/textures/farming_cotton_7.png differ diff --git a/mods/farming/textures/farming_cotton_8.png b/mods/farming/textures/farming_cotton_8.png new file mode 100644 index 00000000..4450a2c4 Binary files /dev/null and b/mods/farming/textures/farming_cotton_8.png differ diff --git a/mods/farming/textures/farming_cotton_seed.png b/mods/farming/textures/farming_cotton_seed.png new file mode 100644 index 00000000..f1d5b8ab Binary files /dev/null and b/mods/farming/textures/farming_cotton_seed.png differ diff --git a/mods/farming/textures/farming_cotton_wild.png b/mods/farming/textures/farming_cotton_wild.png new file mode 100644 index 00000000..fba344c7 Binary files /dev/null and b/mods/farming/textures/farming_cotton_wild.png differ diff --git a/mods/farming/textures/farming_desert_sand_soil.png b/mods/farming/textures/farming_desert_sand_soil.png new file mode 100644 index 00000000..3c09ef0c Binary files /dev/null and b/mods/farming/textures/farming_desert_sand_soil.png differ diff --git a/mods/farming/textures/farming_desert_sand_soil_wet.png b/mods/farming/textures/farming_desert_sand_soil_wet.png new file mode 100644 index 00000000..facc83e1 Binary files /dev/null and b/mods/farming/textures/farming_desert_sand_soil_wet.png differ diff --git a/mods/farming/textures/farming_desert_sand_soil_wet_side.png b/mods/farming/textures/farming_desert_sand_soil_wet_side.png new file mode 100644 index 00000000..41e5a04a Binary files /dev/null and b/mods/farming/textures/farming_desert_sand_soil_wet_side.png differ diff --git a/mods/farming/textures/farming_flour.png b/mods/farming/textures/farming_flour.png new file mode 100644 index 00000000..b1a97836 Binary files /dev/null and b/mods/farming/textures/farming_flour.png differ diff --git a/mods/farming/textures/farming_soil.png b/mods/farming/textures/farming_soil.png new file mode 100644 index 00000000..31504258 Binary files /dev/null and b/mods/farming/textures/farming_soil.png differ diff --git a/mods/farming/textures/farming_soil_wet.png b/mods/farming/textures/farming_soil_wet.png new file mode 100644 index 00000000..2eb2c3cd Binary files /dev/null and b/mods/farming/textures/farming_soil_wet.png differ diff --git a/mods/farming/textures/farming_soil_wet_side.png b/mods/farming/textures/farming_soil_wet_side.png new file mode 100644 index 00000000..f0b1bd45 Binary files /dev/null and b/mods/farming/textures/farming_soil_wet_side.png differ diff --git a/mods/farming/textures/farming_straw.png b/mods/farming/textures/farming_straw.png new file mode 100644 index 00000000..f9f5fe7c Binary files /dev/null and b/mods/farming/textures/farming_straw.png differ diff --git a/mods/farming/textures/farming_string.png b/mods/farming/textures/farming_string.png new file mode 100644 index 00000000..e2bbfd7a Binary files /dev/null and b/mods/farming/textures/farming_string.png differ diff --git a/mods/farming/textures/farming_tool_bronzehoe.png b/mods/farming/textures/farming_tool_bronzehoe.png new file mode 100644 index 00000000..2802d11d Binary files /dev/null and b/mods/farming/textures/farming_tool_bronzehoe.png differ diff --git a/mods/farming/textures/farming_tool_diamondhoe.png b/mods/farming/textures/farming_tool_diamondhoe.png new file mode 100644 index 00000000..66f1042a Binary files /dev/null and b/mods/farming/textures/farming_tool_diamondhoe.png differ diff --git a/mods/farming/textures/farming_tool_mesehoe.png b/mods/farming/textures/farming_tool_mesehoe.png new file mode 100644 index 00000000..4534fbaf Binary files /dev/null and b/mods/farming/textures/farming_tool_mesehoe.png differ diff --git a/mods/farming/textures/farming_tool_steelhoe.png b/mods/farming/textures/farming_tool_steelhoe.png new file mode 100644 index 00000000..d057af24 Binary files /dev/null and b/mods/farming/textures/farming_tool_steelhoe.png differ diff --git a/mods/farming/textures/farming_tool_stonehoe.png b/mods/farming/textures/farming_tool_stonehoe.png new file mode 100644 index 00000000..55d8123f Binary files /dev/null and b/mods/farming/textures/farming_tool_stonehoe.png differ diff --git a/mods/farming/textures/farming_tool_woodhoe.png b/mods/farming/textures/farming_tool_woodhoe.png new file mode 100644 index 00000000..a287152c Binary files /dev/null and b/mods/farming/textures/farming_tool_woodhoe.png differ diff --git a/mods/farming/textures/farming_wheat.png b/mods/farming/textures/farming_wheat.png new file mode 100644 index 00000000..435d5df5 Binary files /dev/null and b/mods/farming/textures/farming_wheat.png differ diff --git a/mods/farming/textures/farming_wheat_1.png b/mods/farming/textures/farming_wheat_1.png new file mode 100644 index 00000000..c16ad94b Binary files /dev/null and b/mods/farming/textures/farming_wheat_1.png differ diff --git a/mods/farming/textures/farming_wheat_2.png b/mods/farming/textures/farming_wheat_2.png new file mode 100644 index 00000000..baddb4c5 Binary files /dev/null and b/mods/farming/textures/farming_wheat_2.png differ diff --git a/mods/farming/textures/farming_wheat_3.png b/mods/farming/textures/farming_wheat_3.png new file mode 100644 index 00000000..9d90ac14 Binary files /dev/null and b/mods/farming/textures/farming_wheat_3.png differ diff --git a/mods/farming/textures/farming_wheat_4.png b/mods/farming/textures/farming_wheat_4.png new file mode 100644 index 00000000..14d055fb Binary files /dev/null and b/mods/farming/textures/farming_wheat_4.png differ diff --git a/mods/farming/textures/farming_wheat_5.png b/mods/farming/textures/farming_wheat_5.png new file mode 100644 index 00000000..5b88c578 Binary files /dev/null and b/mods/farming/textures/farming_wheat_5.png differ diff --git a/mods/farming/textures/farming_wheat_6.png b/mods/farming/textures/farming_wheat_6.png new file mode 100644 index 00000000..e9c78e00 Binary files /dev/null and b/mods/farming/textures/farming_wheat_6.png differ diff --git a/mods/farming/textures/farming_wheat_7.png b/mods/farming/textures/farming_wheat_7.png new file mode 100644 index 00000000..6b7bb4b9 Binary files /dev/null and b/mods/farming/textures/farming_wheat_7.png differ diff --git a/mods/farming/textures/farming_wheat_8.png b/mods/farming/textures/farming_wheat_8.png new file mode 100644 index 00000000..d0500934 Binary files /dev/null and b/mods/farming/textures/farming_wheat_8.png differ diff --git a/mods/farming/textures/farming_wheat_seed.png b/mods/farming/textures/farming_wheat_seed.png new file mode 100644 index 00000000..a9031fba Binary files /dev/null and b/mods/farming/textures/farming_wheat_seed.png differ diff --git a/mods/fire/README.txt b/mods/fire/README.txt new file mode 100644 index 00000000..25ba26ef --- /dev/null +++ b/mods/fire/README.txt @@ -0,0 +1,35 @@ +Minetest Game mod: fire +======================= +See license.txt for license information. + +Authors of source code +---------------------- +Originally by Perttu Ahola (celeron55) (LGPLv2.1+) +Various Minetest developers and contributors (LGPLv2.1+) + +Authors of media (textures and sounds) +-------------------------------------- +Everything not listed in here: +Copyright (C) 2012 Perttu Ahola (celeron55) (CC BY-SA 3.0) + +Muadtralk (CC BY-SA 3.0) + fire_basic_flame_animated.png + +Gambit (CC BY-SA 3.0) + fire_flint_steel.png + +dobroide (CC BY 3.0) +http://www.freesound.org/people/dobroide/sounds/4211/ + fire_small.ogg + +Dynamicell (CC BY 3.0) +http://www.freesound.org/people/Dynamicell/sounds/17548/ + fire_large.ogg + fire_fire.*.ogg + +fire_small.ogg and fire_large.ogg are unused but kept temporarily to not break +other mods that may use them. + +Benboncan (CC BY 3.0) +https://www.freesound.org/people/Benboncan/sounds/66457/ + fire_flint_and_steel.ogg diff --git a/mods/fire/init.lua b/mods/fire/init.lua new file mode 100755 index 00000000..3069aa80 --- /dev/null +++ b/mods/fire/init.lua @@ -0,0 +1,307 @@ +-- fire/init.lua + +-- Global namespace for functions +fire = {} + +-- Load support for MT game translation. +local S = minetest.get_translator("fire") + +-- 'Enable fire' setting +local fire_enabled = minetest.settings:get_bool("enable_fire") +if fire_enabled == nil then + -- enable_fire setting not specified, check for disable_fire + local fire_disabled = minetest.settings:get_bool("disable_fire") + if fire_disabled == nil then + -- Neither setting specified, check whether singleplayer + fire_enabled = minetest.is_singleplayer() + else + fire_enabled = not fire_disabled + end +end + +-- +-- Items +-- + +-- Flood flame function +local function flood_flame(pos, _, newnode) + -- Play flame extinguish sound if liquid is not an 'igniter' + if minetest.get_item_group(newnode.name, "igniter") == 0 then + minetest.sound_play("fire_extinguish_flame", + {pos = pos, max_hear_distance = 16, gain = 0.15}, true) + end + -- Remove the flame + return false +end + +-- Flame nodes +local fire_node = { + drawtype = "firelike", + tiles = {{ + name = "fire_basic_flame_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1 + }} + }, + inventory_image = "fire_basic_flame.png", + paramtype = "light", + light_source = 13, + walkable = false, + buildable_to = true, + sunlight_propagates = true, + floodable = true, + damage_per_second = 4, + groups = {igniter = 2, dig_immediate = 3, fire = 1}, + drop = "", + on_flood = flood_flame +} + +-- Basic flame node +local flame_fire_node = table.copy(fire_node) +flame_fire_node.description = S("Fire") +flame_fire_node.groups.not_in_creative_inventory = 1 +flame_fire_node.on_timer = function(pos) + if not minetest.find_node_near(pos, 1, {"group:flammable"}) then + minetest.remove_node(pos) + return + end + -- Restart timer + return true +end +flame_fire_node.on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(30, 60)) +end + +minetest.register_node("fire:basic_flame", flame_fire_node) + +-- Permanent flame node +local permanent_fire_node = table.copy(fire_node) +permanent_fire_node.description = S("Permanent Fire") + +minetest.register_node("fire:permanent_flame", permanent_fire_node) + +-- Flint and Steel +minetest.register_tool("fire:flint_and_steel", { + description = S("Flint and Steel"), + inventory_image = "fire_flint_steel.png", + sound = {breaks = "default_tool_breaks"}, + + on_use = function(itemstack, user, pointed_thing) + local sound_pos = pointed_thing.above or user:get_pos() + minetest.sound_play("fire_flint_and_steel", + {pos = sound_pos, gain = 0.2, max_hear_distance = 8}, true) + local player_name = user:get_player_name() + if pointed_thing.type == "node" then + local node_under = minetest.get_node(pointed_thing.under).name + local nodedef = minetest.registered_nodes[node_under] + if not nodedef then + return + end + if minetest.is_protected(pointed_thing.under, player_name) then + minetest.chat_send_player(player_name, "This area is protected") + return + end + if nodedef.on_ignite then + nodedef.on_ignite(pointed_thing.under, user) + elseif minetest.get_item_group(node_under, "flammable") >= 1 + and minetest.get_node(pointed_thing.above).name == "air" then + minetest.set_node(pointed_thing.above, {name = "fire:basic_flame"}) + end + end + if not minetest.is_creative_enabled(player_name) then + -- Wear tool + local wdef = itemstack:get_definition() + itemstack:add_wear_by_uses(66) + + -- Tool break sound + if itemstack:get_count() == 0 and wdef.sound and wdef.sound.breaks then + minetest.sound_play(wdef.sound.breaks, + {pos = sound_pos, gain = 0.5}, true) + end + return itemstack + end + end +}) + +minetest.register_craft({ + output = "fire:flint_and_steel", + recipe = { + {"default:flint", "default:steel_ingot"} + } +}) + +-- Override coalblock to enable permanent flame above +-- Coalblock is non-flammable to avoid unwanted basic_flame nodes +minetest.override_item("default:coalblock", { + after_destruct = function(pos) + pos.y = pos.y + 1 + if minetest.get_node(pos).name == "fire:permanent_flame" then + minetest.remove_node(pos) + end + end, + on_ignite = function(pos) + local flame_pos = {x = pos.x, y = pos.y + 1, z = pos.z} + if minetest.get_node(flame_pos).name == "air" then + minetest.set_node(flame_pos, {name = "fire:permanent_flame"}) + end + end +}) + + +-- +-- Sound +-- + +-- Enable if no setting present +local flame_sound = minetest.settings:get_bool("flame_sound", true) + +if flame_sound then + local handles = {} + local timer = 0 + + -- Parameters + local radius = 8 -- Flame node search radius around player + local cycle = 3 -- Cycle time for sound updates + + -- Update sound for player + function fire.update_player_sound(player) + local player_name = player:get_player_name() + -- Search for flame nodes in radius around player + local ppos = player:get_pos() + local areamin = vector.subtract(ppos, radius) + local areamax = vector.add(ppos, radius) + local fpos, num = minetest.find_nodes_in_area( + areamin, + areamax, + {"fire:basic_flame", "fire:permanent_flame"} + ) + -- Total number of flames in radius + local flames = (num["fire:basic_flame"] or 0) + + (num["fire:permanent_flame"] or 0) + -- Stop previous sound + if handles[player_name] then + minetest.sound_stop(handles[player_name]) + handles[player_name] = nil + end + -- If flames + if flames > 0 then + -- Find centre of flame positions + local fposmid = fpos[1] + -- If more than 1 flame + if #fpos > 1 then + local fposmin = areamax + local fposmax = areamin + for i = 1, #fpos do + local fposi = fpos[i] + if fposi.x > fposmax.x then + fposmax.x = fposi.x + end + if fposi.y > fposmax.y then + fposmax.y = fposi.y + end + if fposi.z > fposmax.z then + fposmax.z = fposi.z + end + if fposi.x < fposmin.x then + fposmin.x = fposi.x + end + if fposi.y < fposmin.y then + fposmin.y = fposi.y + end + if fposi.z < fposmin.z then + fposmin.z = fposi.z + end + end + fposmid = vector.divide(vector.add(fposmin, fposmax), 2) + end + -- Play sound + local handle = minetest.sound_play("fire_fire", { + pos = fposmid, + to_player = player_name, + gain = math.min(0.06 * (1 + flames * 0.125), 0.18), + max_hear_distance = 32, + loop = true -- In case of lag + }) + -- Store sound handle for this player + if handle then + handles[player_name] = handle + end + end + end + + -- Cycle for updating players sounds + minetest.register_globalstep(function(dtime) + timer = timer + dtime + if timer < cycle then + return + end + + timer = 0 + local players = minetest.get_connected_players() + for n = 1, #players do + fire.update_player_sound(players[n]) + end + end) + + -- Stop sound and clear handle on player leave + minetest.register_on_leaveplayer(function(player) + local player_name = player:get_player_name() + if handles[player_name] then + minetest.sound_stop(handles[player_name]) + handles[player_name] = nil + end + end) +end + + +-- Deprecated function kept temporarily to avoid crashes if mod fire nodes call it +function fire.update_sounds_around() end + +-- +-- ABMs +-- + +if fire_enabled then + -- Ignite neighboring nodes, add basic flames + minetest.register_abm({ + label = "Ignite flame", + nodenames = {"group:flammable"}, + neighbors = {"group:igniter"}, + interval = 7, + chance = 12, + catch_up = false, + action = function(pos) + local p = minetest.find_node_near(pos, 1, {"air"}) + if p then + minetest.set_node(p, {name = "fire:basic_flame"}) + end + end + }) + + -- Remove flammable nodes around basic flame + minetest.register_abm({ + label = "Remove flammable nodes", + nodenames = {"fire:basic_flame"}, + neighbors = "group:flammable", + interval = 5, + chance = 18, + catch_up = false, + action = function(pos) + local p = minetest.find_node_near(pos, 1, {"group:flammable"}) + if not p then + return + end + local flammable_node = minetest.get_node(p) + local def = minetest.registered_nodes[flammable_node.name] + if def.on_burn then + def.on_burn(p) + else + minetest.remove_node(p) + minetest.check_for_falling(p) + end + end + }) +end diff --git a/mods/fire/license.txt b/mods/fire/license.txt new file mode 100644 index 00000000..43f9cd7f --- /dev/null +++ b/mods/fire/license.txt @@ -0,0 +1,84 @@ +License of source code +---------------------- + +GNU Lesser General Public License, version 2.1 +Copyright (C) 2012-2016 celeron55, Perttu Ahola +Copyright (C) 2012-2016 Various Minetest developers and contributors + +This program is free software; you can redistribute it and/or modify it under the terms +of the GNU Lesser General Public License as published by the Free Software Foundation; +either version 2.1 of the License, or (at your option) any later version. + +This program 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 Lesser General Public License for more details: +https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + + +Licenses of media (textures and sounds) +--------------------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2012-2016 Perttu Ahola (celeron55) +Copyright (C) 2012-2016 Muadtralk +Copyright (C) 2013-2016 Gambit + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ + +----------------------- + +Attribution 3.0 Unported (CC BY 3.0) +Copyright (C) 2005 dobroide +Copyright (C) 2006 Dynamicell +Copyright (C) 2009 Benboncan + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by/3.0/ diff --git a/mods/fire/locale/fire.de.tr b/mods/fire/locale/fire.de.tr new file mode 100644 index 00000000..dad7c34a --- /dev/null +++ b/mods/fire/locale/fire.de.tr @@ -0,0 +1,4 @@ +# textdomain: fire +Fire=Feuer +Permanent Fire=Permanentes Feuer +Flint and Steel=Feuerstein und Stahl diff --git a/mods/fire/locale/fire.eo.tr b/mods/fire/locale/fire.eo.tr new file mode 100644 index 00000000..2fc0679a --- /dev/null +++ b/mods/fire/locale/fire.eo.tr @@ -0,0 +1,4 @@ +# textdomain: fire +Fire=Fajro +Permanent Fire=Ĉiama Fajro +Flint and Steel=Siliko kaj Ŝtalo diff --git a/mods/fire/locale/fire.es.tr b/mods/fire/locale/fire.es.tr new file mode 100644 index 00000000..4ce3f328 --- /dev/null +++ b/mods/fire/locale/fire.es.tr @@ -0,0 +1,4 @@ +# textdomain: fire +Fire=Fuego +Permanent Fire=Fuego permanente +Flint and Steel=Yesca y pedernal diff --git a/mods/fire/locale/fire.fr.tr b/mods/fire/locale/fire.fr.tr new file mode 100644 index 00000000..4d5d08ac --- /dev/null +++ b/mods/fire/locale/fire.fr.tr @@ -0,0 +1,10 @@ +# textdomain: fire +Fire=Feu +Permanent Fire=Feu qui brûle en permanence +Flint and Steel=Briquet à silex en acier + + +##### not used anymore ##### + +# textdomain: fire +Permanent Flame=Flamme permanente diff --git a/mods/fire/locale/fire.id.tr b/mods/fire/locale/fire.id.tr new file mode 100644 index 00000000..a6d2da55 --- /dev/null +++ b/mods/fire/locale/fire.id.tr @@ -0,0 +1,4 @@ +# textdomain: fire +Fire=Api +Permanent Fire=Api Abadi +Flint and Steel=Pemantik Api diff --git a/mods/fire/locale/fire.it.tr b/mods/fire/locale/fire.it.tr new file mode 100644 index 00000000..61eae452 --- /dev/null +++ b/mods/fire/locale/fire.it.tr @@ -0,0 +1,10 @@ +# textdomain: fire +Fire= +Permanent Fire= +Flint and Steel=Acciarino + + +##### not used anymore ##### + +# textdomain: fire +Permanent Flame=Fiamma permanente diff --git a/mods/fire/locale/fire.ja.tr b/mods/fire/locale/fire.ja.tr new file mode 100644 index 00000000..bf5fec4e --- /dev/null +++ b/mods/fire/locale/fire.ja.tr @@ -0,0 +1,4 @@ +# textdomain: fire +Fire=炎 +Permanent Fire=燃え続ける炎 +Flint and Steel=火打ち石と打ち金 diff --git a/mods/fire/locale/fire.jbo.tr b/mods/fire/locale/fire.jbo.tr new file mode 100644 index 00000000..b081236d --- /dev/null +++ b/mods/fire/locale/fire.jbo.tr @@ -0,0 +1,4 @@ +# textdomain: fire +Fire=lo fagri +Permanent Fire=lo vitno fagri +Flint and Steel=lo fakro'i jo'u gasta diff --git a/mods/fire/locale/fire.ms.tr b/mods/fire/locale/fire.ms.tr new file mode 100644 index 00000000..fdd20a51 --- /dev/null +++ b/mods/fire/locale/fire.ms.tr @@ -0,0 +1,10 @@ +# textdomain: fire +Fire= +Permanent Fire= +Flint and Steel=Pemetik Api + + +##### not used anymore ##### + +# textdomain: fire +Permanent Flame=Api Abadi diff --git a/mods/fire/locale/fire.pl.tr b/mods/fire/locale/fire.pl.tr new file mode 100644 index 00000000..a19e6aff --- /dev/null +++ b/mods/fire/locale/fire.pl.tr @@ -0,0 +1,4 @@ +# textdomain: fire +Fire=Ogień +Permanent Fire=Stały ogień +Flint and Steel=Zapalniczka diff --git a/mods/fire/locale/fire.pt_BR.tr b/mods/fire/locale/fire.pt_BR.tr new file mode 100644 index 00000000..8a37359b --- /dev/null +++ b/mods/fire/locale/fire.pt_BR.tr @@ -0,0 +1,4 @@ +# textdomain: fire +Fire=Fogo +Permanent Fire=Fogo Permanente +Flint and Steel=Sílex e Fogo diff --git a/mods/fire/locale/fire.ru.tr b/mods/fire/locale/fire.ru.tr new file mode 100644 index 00000000..496e81c1 --- /dev/null +++ b/mods/fire/locale/fire.ru.tr @@ -0,0 +1,10 @@ +# textdomain: fire +Fire=Огонь +Permanent Fire=Вечный Огонь +Flint and Steel=Огниво + + +##### not used anymore ##### + +# textdomain: fire +Permanent Flame=Вечный Огонь diff --git a/mods/fire/locale/fire.sk.tr b/mods/fire/locale/fire.sk.tr new file mode 100644 index 00000000..125c8603 --- /dev/null +++ b/mods/fire/locale/fire.sk.tr @@ -0,0 +1,4 @@ +# textdomain: fire +Fire=Oheň +Permanent Fire=Stály oheň +Flint and Steel=Pazúrik a ocieľka diff --git a/mods/fire/locale/fire.sv.tr b/mods/fire/locale/fire.sv.tr new file mode 100644 index 00000000..28e9a4a2 --- /dev/null +++ b/mods/fire/locale/fire.sv.tr @@ -0,0 +1,4 @@ +# textdomain: fire +Fire=Eld +Permanent Fire=Permanent eld +Flint and Steel=Flinta och stål diff --git a/mods/fire/locale/fire.uk.tr b/mods/fire/locale/fire.uk.tr new file mode 100644 index 00000000..9da0beb6 --- /dev/null +++ b/mods/fire/locale/fire.uk.tr @@ -0,0 +1,4 @@ +# textdomain: fire +Fire=Вогонь +Permanent Fire=Вічний Вогонь +Flint and Steel=Кремінь і Сталь diff --git a/mods/fire/locale/fire.zh_CN.tr b/mods/fire/locale/fire.zh_CN.tr new file mode 100644 index 00000000..7b0a4727 --- /dev/null +++ b/mods/fire/locale/fire.zh_CN.tr @@ -0,0 +1,4 @@ +# textdomain: fire +Fire=火焰 +Permanent Fire=永久火焰 +Flint and Steel=火石和划片 diff --git a/mods/fire/locale/fire.zh_TW.tr b/mods/fire/locale/fire.zh_TW.tr new file mode 100644 index 00000000..9e3d7663 --- /dev/null +++ b/mods/fire/locale/fire.zh_TW.tr @@ -0,0 +1,4 @@ +# textdomain: fire +Fire=火焰 +Permanent Fire=永久火焰 +Flint and Steel=火石和鋼 diff --git a/mods/fire/locale/template.txt b/mods/fire/locale/template.txt new file mode 100644 index 00000000..e4e44e79 --- /dev/null +++ b/mods/fire/locale/template.txt @@ -0,0 +1,4 @@ +# textdomain: fire +Fire= +Permanent Fire= +Flint and Steel= diff --git a/mods/fire/mod.conf b/mods/fire/mod.conf new file mode 100644 index 00000000..c70f23b7 --- /dev/null +++ b/mods/fire/mod.conf @@ -0,0 +1,3 @@ +name = fire +description = Minetest Game mod: fire +depends = default diff --git a/mods/fire/sounds/fire_extinguish_flame.1.ogg b/mods/fire/sounds/fire_extinguish_flame.1.ogg new file mode 100644 index 00000000..42506ddf Binary files /dev/null and b/mods/fire/sounds/fire_extinguish_flame.1.ogg differ diff --git a/mods/fire/sounds/fire_extinguish_flame.2.ogg b/mods/fire/sounds/fire_extinguish_flame.2.ogg new file mode 100644 index 00000000..2747ab81 Binary files /dev/null and b/mods/fire/sounds/fire_extinguish_flame.2.ogg differ diff --git a/mods/fire/sounds/fire_extinguish_flame.3.ogg b/mods/fire/sounds/fire_extinguish_flame.3.ogg new file mode 100644 index 00000000..8baeac32 Binary files /dev/null and b/mods/fire/sounds/fire_extinguish_flame.3.ogg differ diff --git a/mods/fire/sounds/fire_fire.1.ogg b/mods/fire/sounds/fire_fire.1.ogg new file mode 100644 index 00000000..cbfee4c6 Binary files /dev/null and b/mods/fire/sounds/fire_fire.1.ogg differ diff --git a/mods/fire/sounds/fire_fire.2.ogg b/mods/fire/sounds/fire_fire.2.ogg new file mode 100644 index 00000000..e8d0eb13 Binary files /dev/null and b/mods/fire/sounds/fire_fire.2.ogg differ diff --git a/mods/fire/sounds/fire_fire.3.ogg b/mods/fire/sounds/fire_fire.3.ogg new file mode 100644 index 00000000..5cad3d9b Binary files /dev/null and b/mods/fire/sounds/fire_fire.3.ogg differ diff --git a/mods/fire/sounds/fire_flint_and_steel.ogg b/mods/fire/sounds/fire_flint_and_steel.ogg new file mode 100644 index 00000000..6996e16f Binary files /dev/null and b/mods/fire/sounds/fire_flint_and_steel.ogg differ diff --git a/mods/fire/sounds/fire_large.ogg b/mods/fire/sounds/fire_large.ogg new file mode 100644 index 00000000..fe78e625 Binary files /dev/null and b/mods/fire/sounds/fire_large.ogg differ diff --git a/mods/fire/sounds/fire_small.ogg b/mods/fire/sounds/fire_small.ogg new file mode 100644 index 00000000..5aac595b Binary files /dev/null and b/mods/fire/sounds/fire_small.ogg differ diff --git a/mods/fire/textures/fire_basic_flame.png b/mods/fire/textures/fire_basic_flame.png new file mode 100644 index 00000000..484bcb19 Binary files /dev/null and b/mods/fire/textures/fire_basic_flame.png differ diff --git a/mods/fire/textures/fire_basic_flame_animated.png b/mods/fire/textures/fire_basic_flame_animated.png new file mode 100644 index 00000000..b01f7036 Binary files /dev/null and b/mods/fire/textures/fire_basic_flame_animated.png differ diff --git a/mods/fire/textures/fire_flint_steel.png b/mods/fire/textures/fire_flint_steel.png new file mode 100644 index 00000000..9d32d85b Binary files /dev/null and b/mods/fire/textures/fire_flint_steel.png differ diff --git a/mods/fireflies/README.txt b/mods/fireflies/README.txt new file mode 100644 index 00000000..7382578d --- /dev/null +++ b/mods/fireflies/README.txt @@ -0,0 +1,22 @@ +Minetest Game mod: fireflies +============================ +Adds fireflies to the world on mapgen, which can then be caught in a net and placed in +bottles to provide light. + +Authors of source code +---------------------- +Shara RedCat (MIT) + +Authors of media (textures) +--------------------------- +Shara RedCat (CC BY-SA 3.0): + fireflies_firefly.png + fireflies_firefly_animated.png + fireflies_bugnet.png + fireflies_bottle.png + fireflies_bottle_animated.png + +fireflies_bugnet.png is modified from a texture by tenplus1 (CC0) + +fireflies_bottle.png and fireflies_bottle_animated.png are +modified from a texture by Vanessa Ezekowitz (CC BY-SA 3.0) \ No newline at end of file diff --git a/mods/fireflies/init.lua b/mods/fireflies/init.lua new file mode 100644 index 00000000..5593afe4 --- /dev/null +++ b/mods/fireflies/init.lua @@ -0,0 +1,291 @@ +-- firefly/init.lua + +-- Load support for MT game translation. +local S = minetest.get_translator("fireflies") + + +minetest.register_node("fireflies:firefly", { + description = S("Firefly"), + drawtype = "plantlike", + tiles = {{ + name = "fireflies_firefly_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1.5 + }, + }}, + inventory_image = "fireflies_firefly.png", + wield_image = "fireflies_firefly.png", + waving = 1, + paramtype = "light", + sunlight_propagates = true, + buildable_to = true, + walkable = false, + groups = {catchable = 1}, + selection_box = { + type = "fixed", + fixed = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1}, + }, + light_source = 6, + floodable = true, + on_place = function(itemstack, placer, pointed_thing) + local player_name = placer:get_player_name() + local pos = pointed_thing.above + + if not minetest.is_protected(pos, player_name) and + not minetest.is_protected(pointed_thing.under, player_name) and + minetest.get_node(pos).name == "air" then + minetest.set_node(pos, {name = "fireflies:firefly"}) + minetest.get_node_timer(pos):start(1) + itemstack:take_item() + end + return itemstack + end, + on_timer = function(pos, elapsed) + if minetest.get_node_light(pos) > 11 then + minetest.set_node(pos, {name = "fireflies:hidden_firefly"}) + end + minetest.get_node_timer(pos):start(30) + end +}) + +minetest.register_node("fireflies:hidden_firefly", { + description = S("Hidden Firefly"), + drawtype = "airlike", + inventory_image = "fireflies_firefly.png^default_invisible_node_overlay.png", + wield_image = "fireflies_firefly.png^default_invisible_node_overlay.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + drop = "", + groups = {not_in_creative_inventory = 1}, + floodable = true, + on_place = function(itemstack, placer, pointed_thing) + local player_name = placer:get_player_name() + local pos = pointed_thing.above + + if not minetest.is_protected(pos, player_name) and + not minetest.is_protected(pointed_thing.under, player_name) and + minetest.get_node(pos).name == "air" then + minetest.set_node(pos, {name = "fireflies:hidden_firefly"}) + minetest.get_node_timer(pos):start(1) + itemstack:take_item() + end + return itemstack + end, + on_timer = function(pos, elapsed) + if minetest.get_node_light(pos) <= 11 then + minetest.set_node(pos, {name = "fireflies:firefly"}) + end + minetest.get_node_timer(pos):start(30) + end +}) + + +-- bug net +minetest.register_tool("fireflies:bug_net", { + description = S("Bug Net"), + inventory_image = "fireflies_bugnet.png", + on_use = function(itemstack, player, pointed_thing) + local player_name = player and player:get_player_name() or "" + if not pointed_thing or pointed_thing.type ~= "node" or + minetest.is_protected(pointed_thing.under, player_name) then + return + end + local node_name = minetest.get_node(pointed_thing.under).name + local inv = player:get_inventory() + if minetest.get_item_group(node_name, "catchable") == 1 then + minetest.set_node(pointed_thing.under, {name = "air"}) + local stack = ItemStack(node_name.." 1") + local leftover = inv:add_item("main", stack) + if leftover:get_count() > 0 then + minetest.add_item(pointed_thing.under, node_name.." 1") + end + end + if not minetest.is_creative_enabled(player_name) then + itemstack:add_wear_by_uses(256) + return itemstack + end + end +}) + +minetest.register_craft( { + output = "fireflies:bug_net", + recipe = { + {"farming:string", "farming:string"}, + {"farming:string", "farming:string"}, + {"group:stick", ""} + } +}) + + +-- firefly in a bottle +minetest.register_node("fireflies:firefly_bottle", { + description = S("Firefly in a Bottle"), + inventory_image = "fireflies_bottle.png", + wield_image = "fireflies_bottle.png", + tiles = {{ + name = "fireflies_bottle_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1.5 + }, + }}, + drawtype = "plantlike", + paramtype = "light", + sunlight_propagates = true, + light_source = 9, + walkable = false, + groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + }, + sounds = default.node_sound_glass_defaults(), + on_rightclick = function(pos, node, player, itemstack, pointed_thing) + local lower_pos = {x = pos.x, y = pos.y + 1, z = pos.z} + if minetest.is_protected(pos, player:get_player_name()) or + minetest.get_node(lower_pos).name ~= "air" then + return + end + + local upper_pos = {x = pos.x, y = pos.y + 2, z = pos.z} + local firefly_pos + + if not minetest.is_protected(upper_pos, player:get_player_name()) and + minetest.get_node(upper_pos).name == "air" then + firefly_pos = upper_pos + elseif not minetest.is_protected(lower_pos, player:get_player_name()) then + firefly_pos = lower_pos + end + + if firefly_pos then + minetest.set_node(pos, {name = "vessels:glass_bottle"}) + minetest.set_node(firefly_pos, {name = "fireflies:firefly"}) + minetest.get_node_timer(firefly_pos):start(1) + end + end +}) + +minetest.register_craft( { + output = "fireflies:firefly_bottle", + recipe = { + {"fireflies:firefly"}, + {"vessels:glass_bottle"} + } +}) + + +-- register fireflies as decorations + +if minetest.get_mapgen_setting("mg_name") == "v6" then + + minetest.register_decoration({ + name = "fireflies:firefly_low", + deco_type = "simple", + place_on = "default:dirt_with_grass", + place_offset_y = 2, + sidelen = 80, + fill_ratio = 0.0002, + y_max = 31000, + y_min = 1, + decoration = "fireflies:hidden_firefly", + }) + + minetest.register_decoration({ + name = "fireflies:firefly_high", + deco_type = "simple", + place_on = "default:dirt_with_grass", + place_offset_y = 3, + sidelen = 80, + fill_ratio = 0.0002, + y_max = 31000, + y_min = 1, + decoration = "fireflies:hidden_firefly", + }) + +else + + minetest.register_decoration({ + name = "fireflies:firefly_low", + deco_type = "simple", + place_on = { + "default:dirt_with_grass", + "default:dirt_with_coniferous_litter", + "default:dirt_with_rainforest_litter", + "default:dirt" + }, + place_offset_y = 2, + sidelen = 80, + fill_ratio = 0.0005, + biomes = { + "deciduous_forest", + "coniferous_forest", + "rainforest", + "rainforest_swamp" + }, + y_max = 31000, + y_min = -1, + decoration = "fireflies:hidden_firefly", + }) + + minetest.register_decoration({ + name = "fireflies:firefly_high", + deco_type = "simple", + place_on = { + "default:dirt_with_grass", + "default:dirt_with_coniferous_litter", + "default:dirt_with_rainforest_litter", + "default:dirt" + }, + place_offset_y = 3, + sidelen = 80, + fill_ratio = 0.0005, + biomes = { + "deciduous_forest", + "coniferous_forest", + "rainforest", + "rainforest_swamp" + }, + y_max = 31000, + y_min = -1, + decoration = "fireflies:hidden_firefly", + }) + +end + + +-- get decoration IDs +local firefly_low = minetest.get_decoration_id("fireflies:firefly_low") +local firefly_high = minetest.get_decoration_id("fireflies:firefly_high") + +minetest.set_gen_notify({decoration = true}, {firefly_low, firefly_high}) + +-- start nodetimers +minetest.register_on_generated(function(minp, maxp, blockseed) + local gennotify = minetest.get_mapgen_object("gennotify") + local poslist = {} + + for _, pos in ipairs(gennotify["decoration#"..firefly_low] or {}) do + local firefly_low_pos = {x = pos.x, y = pos.y + 3, z = pos.z} + table.insert(poslist, firefly_low_pos) + end + for _, pos in ipairs(gennotify["decoration#"..firefly_high] or {}) do + local firefly_high_pos = {x = pos.x, y = pos.y + 4, z = pos.z} + table.insert(poslist, firefly_high_pos) + end + + if #poslist ~= 0 then + for i = 1, #poslist do + local pos = poslist[i] + minetest.get_node_timer(pos):start(1) + end + end +end) diff --git a/mods/fireflies/license.txt b/mods/fireflies/license.txt new file mode 100644 index 00000000..eebdad63 --- /dev/null +++ b/mods/fireflies/license.txt @@ -0,0 +1,58 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (c) 2018 Shara RedCat + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2018 Shara RedCat + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ \ No newline at end of file diff --git a/mods/fireflies/locale/fireflies.de.tr b/mods/fireflies/locale/fireflies.de.tr new file mode 100644 index 00000000..c5d116a7 --- /dev/null +++ b/mods/fireflies/locale/fireflies.de.tr @@ -0,0 +1,5 @@ +# textdomain: fireflies +Firefly=Glühwürmchen +Hidden Firefly=Verborgenes Glühwürmchen +Bug Net=Insektennetz +Firefly in a Bottle=Glühwürmchen in einer Flasche diff --git a/mods/fireflies/locale/fireflies.eo.tr b/mods/fireflies/locale/fireflies.eo.tr new file mode 100644 index 00000000..d4402ee2 --- /dev/null +++ b/mods/fireflies/locale/fireflies.eo.tr @@ -0,0 +1,5 @@ +# textdomain: fireflies +Firefly=Lampiro +Hidden Firefly=Kaŝita Lampiro +Bug Net=Insekta Reto +Firefly in a Bottle=Lampiro en Botelo diff --git a/mods/fireflies/locale/fireflies.es.tr b/mods/fireflies/locale/fireflies.es.tr new file mode 100644 index 00000000..95d053e1 --- /dev/null +++ b/mods/fireflies/locale/fireflies.es.tr @@ -0,0 +1,5 @@ +# textdomain: fireflies +Firefly=Luciérnaga +Hidden Firefly=Luciérnaga oculta +Bug Net=Red de insectos +Firefly in a Bottle=Luciérnaga en botella diff --git a/mods/fireflies/locale/fireflies.fr.tr b/mods/fireflies/locale/fireflies.fr.tr new file mode 100644 index 00000000..3deda664 --- /dev/null +++ b/mods/fireflies/locale/fireflies.fr.tr @@ -0,0 +1,5 @@ +# textdomain: fireflies +Firefly=Luciole +Hidden Firefly=Luciole cachée +Bug Net=Filet à papillon +Firefly in a Bottle=Luciole en bouteille diff --git a/mods/fireflies/locale/fireflies.id.tr b/mods/fireflies/locale/fireflies.id.tr new file mode 100644 index 00000000..bc6434ee --- /dev/null +++ b/mods/fireflies/locale/fireflies.id.tr @@ -0,0 +1,5 @@ +# textdomain: fireflies +Firefly=Kunang-Kunang +Hidden Firefly=Kunang-Kunang Tersembunyi +Bug Net=Jaring Serangga +Firefly in a Bottle=Kunang-Kunang dalam Botol diff --git a/mods/fireflies/locale/fireflies.it.tr b/mods/fireflies/locale/fireflies.it.tr new file mode 100644 index 00000000..22ad57b3 --- /dev/null +++ b/mods/fireflies/locale/fireflies.it.tr @@ -0,0 +1,5 @@ +# textdomain: fireflies +Firefly=Lucciola +Hidden Firefly=Lucciola nascosta +Bug Net=Retino +Firefly in a Bottle=Lucciola imbottigliata diff --git a/mods/fireflies/locale/fireflies.ja.tr b/mods/fireflies/locale/fireflies.ja.tr new file mode 100644 index 00000000..4116ca2f --- /dev/null +++ b/mods/fireflies/locale/fireflies.ja.tr @@ -0,0 +1,5 @@ +# textdomain: fireflies +Firefly=ホタル +Hidden Firefly=隠されたホタル +Bug Net=虫取り網 +Firefly in a Bottle=ホタルの入った瓶 diff --git a/mods/fireflies/locale/fireflies.jbo.tr b/mods/fireflies/locale/fireflies.jbo.tr new file mode 100644 index 00000000..4e69ab49 --- /dev/null +++ b/mods/fireflies/locale/fireflies.jbo.tr @@ -0,0 +1,5 @@ +# textdomain: fireflies +Firefly=lo gusycinki +Hidden Firefly=lo se mipri gusycinki +Bug Net=lo cinki julne +Firefly in a Bottle=lo gusycinki poi nenri lo botpi diff --git a/mods/fireflies/locale/fireflies.ms.tr b/mods/fireflies/locale/fireflies.ms.tr new file mode 100644 index 00000000..509d03d3 --- /dev/null +++ b/mods/fireflies/locale/fireflies.ms.tr @@ -0,0 +1,5 @@ +# textdomain: fireflies +Firefly=Kelip-Kelip +Hidden Firefly=Kelip-Kelip Tersembunyi +Bug Net=Jaring Pepijat +Firefly in a Bottle=Kelip-Kelip dalam Botol diff --git a/mods/fireflies/locale/fireflies.pl.tr b/mods/fireflies/locale/fireflies.pl.tr new file mode 100644 index 00000000..b07152b9 --- /dev/null +++ b/mods/fireflies/locale/fireflies.pl.tr @@ -0,0 +1,5 @@ +# textdomain: fireflies +Firefly=Świetlik +Hidden Firefly=Ukryty świetlik +Bug Net=Siatka na owady +Firefly in a Bottle=Świetlik w butelce diff --git a/mods/fireflies/locale/fireflies.pt_BR.tr b/mods/fireflies/locale/fireflies.pt_BR.tr new file mode 100644 index 00000000..543c00b7 --- /dev/null +++ b/mods/fireflies/locale/fireflies.pt_BR.tr @@ -0,0 +1,5 @@ +# textdomain: fireflies +Firefly=Vaga-lume +Hidden Firefly=Vaga-lume escondido +Bug Net=Rede de Insetos +Firefly in a Bottle=Vaga-lume em uma garrafa diff --git a/mods/fireflies/locale/fireflies.ru.tr b/mods/fireflies/locale/fireflies.ru.tr new file mode 100644 index 00000000..c05f2884 --- /dev/null +++ b/mods/fireflies/locale/fireflies.ru.tr @@ -0,0 +1,5 @@ +# textdomain: fireflies +Firefly=Светлячок +Hidden Firefly=Притаившийся Светлячок +Bug Net=Сачок Для Ловли Насекомых +Firefly in a Bottle=Светлячок в Бутылке diff --git a/mods/fireflies/locale/fireflies.sk.tr b/mods/fireflies/locale/fireflies.sk.tr new file mode 100644 index 00000000..b68674dd --- /dev/null +++ b/mods/fireflies/locale/fireflies.sk.tr @@ -0,0 +1,5 @@ +# textdomain: fireflies +Firefly=Svetluška +Hidden Firefly=Skrytá svetluška +Bug Net=Sieťka na hmyz +Firefly in a Bottle=Svetluška vo fľaši diff --git a/mods/fireflies/locale/fireflies.sv.tr b/mods/fireflies/locale/fireflies.sv.tr new file mode 100644 index 00000000..d8016f99 --- /dev/null +++ b/mods/fireflies/locale/fireflies.sv.tr @@ -0,0 +1,5 @@ +# textdomain: fireflies +Firefly=Eldfluga +Hidden Firefly=Gömd eldfluga +Bug Net=Insektshåv +Firefly in a Bottle=Eldfluga i en flaska diff --git a/mods/fireflies/locale/fireflies.uk.tr b/mods/fireflies/locale/fireflies.uk.tr new file mode 100644 index 00000000..f1aa265f --- /dev/null +++ b/mods/fireflies/locale/fireflies.uk.tr @@ -0,0 +1,5 @@ +# textdomain: fireflies +Firefly=Світлячок +Hidden Firefly=Світлячок, що причаївся +Bug Net=Сачок Для Ловлі Комах +Firefly in a Bottle=Світлячок у Пляшці diff --git a/mods/fireflies/locale/fireflies.zh_CN.tr b/mods/fireflies/locale/fireflies.zh_CN.tr new file mode 100644 index 00000000..5971785a --- /dev/null +++ b/mods/fireflies/locale/fireflies.zh_CN.tr @@ -0,0 +1,5 @@ +# textdomain: fireflies +Firefly=萤火虫 +Hidden Firefly=隐藏的萤火虫 +Bug Net=虫网 +Firefly in a Bottle=放在瓶子里的萤火虫 diff --git a/mods/fireflies/locale/fireflies.zh_TW.tr b/mods/fireflies/locale/fireflies.zh_TW.tr new file mode 100644 index 00000000..af754a91 --- /dev/null +++ b/mods/fireflies/locale/fireflies.zh_TW.tr @@ -0,0 +1,5 @@ +# textdomain: fireflies +Firefly=螢火蟲 +Hidden Firefly=隱藏的螢火蟲 +Bug Net=蟲網 +Firefly in a Bottle=放在瓶子裡的螢火蟲 diff --git a/mods/fireflies/locale/template.txt b/mods/fireflies/locale/template.txt new file mode 100644 index 00000000..91aa8ffa --- /dev/null +++ b/mods/fireflies/locale/template.txt @@ -0,0 +1,5 @@ +# textdomain: fireflies +Firefly= +Hidden Firefly= +Bug Net= +Firefly in a Bottle= diff --git a/mods/fireflies/mod.conf b/mods/fireflies/mod.conf new file mode 100644 index 00000000..a5335880 --- /dev/null +++ b/mods/fireflies/mod.conf @@ -0,0 +1,3 @@ +name = fireflies +description = Minetest Game mod: fireflies +depends = default, vessels diff --git a/mods/fireflies/textures/fireflies_bottle.png b/mods/fireflies/textures/fireflies_bottle.png new file mode 100644 index 00000000..ecca0363 Binary files /dev/null and b/mods/fireflies/textures/fireflies_bottle.png differ diff --git a/mods/fireflies/textures/fireflies_bottle_animated.png b/mods/fireflies/textures/fireflies_bottle_animated.png new file mode 100644 index 00000000..294ff974 Binary files /dev/null and b/mods/fireflies/textures/fireflies_bottle_animated.png differ diff --git a/mods/fireflies/textures/fireflies_bugnet.png b/mods/fireflies/textures/fireflies_bugnet.png new file mode 100644 index 00000000..8ec3d33b Binary files /dev/null and b/mods/fireflies/textures/fireflies_bugnet.png differ diff --git a/mods/fireflies/textures/fireflies_firefly.png b/mods/fireflies/textures/fireflies_firefly.png new file mode 100644 index 00000000..c0866894 Binary files /dev/null and b/mods/fireflies/textures/fireflies_firefly.png differ diff --git a/mods/fireflies/textures/fireflies_firefly_animated.png b/mods/fireflies/textures/fireflies_firefly_animated.png new file mode 100644 index 00000000..e6932e37 Binary files /dev/null and b/mods/fireflies/textures/fireflies_firefly_animated.png differ diff --git a/mods/flowers/README.txt b/mods/flowers/README.txt new file mode 100644 index 00000000..4b3149c4 --- /dev/null +++ b/mods/flowers/README.txt @@ -0,0 +1,30 @@ +Minetest Game mod: flowers +========================== +See license.txt for license information. + +Authors of source code +---------------------- +Originally by Ironzorg (MIT) and VanessaE (MIT) +Various Minetest developers and contributors (MIT) + +Authors of media (textures) +--------------------------- +RHRhino (CC BY-SA 3.0): + flowers_dandelion_white.png + flowers_geranium.png + flowers_rose.png + flowers_tulip.png + flowers_viola.png + +Gambit (CC BY-SA 3.0): + flowers_mushroom_brown.png + flowers_mushroom_red.png + flowers_waterlily.png + +yyt16384 (CC BY-SA 3.0): + flowers_waterlily_bottom.png -- Derived from Gambit's texture + +paramat (CC BY-SA 3.0): + flowers_dandelion_yellow.png -- Derived from RHRhino's texture + flowers_tulip_black.png -- Derived from RHRhino's texture + flowers_chrysanthemum_green.png diff --git a/mods/flowers/init.lua b/mods/flowers/init.lua new file mode 100644 index 00000000..b551e65c --- /dev/null +++ b/mods/flowers/init.lua @@ -0,0 +1,335 @@ +-- flowers/init.lua + +-- Minetest 0.4 mod: default +-- See README.txt for licensing and other information. + + +-- Namespace for functions + +flowers = {} + +-- Load support for MT game translation. +local S = minetest.get_translator("flowers") + + +-- Map Generation + +dofile(minetest.get_modpath("flowers") .. "/mapgen.lua") + + +-- +-- Flowers +-- + +-- Aliases for original flowers mod + +minetest.register_alias("flowers:flower_rose", "flowers:rose") +minetest.register_alias("flowers:flower_tulip", "flowers:tulip") +minetest.register_alias("flowers:flower_dandelion_yellow", "flowers:dandelion_yellow") +minetest.register_alias("flowers:flower_geranium", "flowers:geranium") +minetest.register_alias("flowers:flower_viola", "flowers:viola") +minetest.register_alias("flowers:flower_dandelion_white", "flowers:dandelion_white") + + +-- Flower registration + +local function add_simple_flower(name, desc, box, f_groups) + -- Common flowers' groups + f_groups.snappy = 3 + f_groups.flower = 1 + f_groups.flora = 1 + f_groups.attached_node = 1 + + minetest.register_node("flowers:" .. name, { + description = desc, + drawtype = "plantlike", + waving = 1, + tiles = {"flowers_" .. name .. ".png"}, + inventory_image = "flowers_" .. name .. ".png", + wield_image = "flowers_" .. name .. ".png", + sunlight_propagates = true, + paramtype = "light", + walkable = false, + buildable_to = true, + groups = f_groups, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = box + } + }) +end + +flowers.datas = { + { + "rose", + S("Red Rose"), + {-2 / 16, -0.5, -2 / 16, 2 / 16, 5 / 16, 2 / 16}, + {color_red = 1, flammable = 1} + }, + { + "tulip", + S("Orange Tulip"), + {-2 / 16, -0.5, -2 / 16, 2 / 16, 3 / 16, 2 / 16}, + {color_orange = 1, flammable = 1} + }, + { + "dandelion_yellow", + S("Yellow Dandelion"), + {-4 / 16, -0.5, -4 / 16, 4 / 16, -2 / 16, 4 / 16}, + {color_yellow = 1, flammable = 1} + }, + { + "chrysanthemum_green", + S("Green Chrysanthemum"), + {-4 / 16, -0.5, -4 / 16, 4 / 16, -1 / 16, 4 / 16}, + {color_green = 1, flammable = 1} + }, + { + "geranium", + S("Blue Geranium"), + {-2 / 16, -0.5, -2 / 16, 2 / 16, 2 / 16, 2 / 16}, + {color_blue = 1, flammable = 1} + }, + { + "viola", + S("Viola"), + {-5 / 16, -0.5, -5 / 16, 5 / 16, -1 / 16, 5 / 16}, + {color_violet = 1, flammable = 1} + }, + { + "dandelion_white", + S("White Dandelion"), + {-5 / 16, -0.5, -5 / 16, 5 / 16, -2 / 16, 5 / 16}, + {color_white = 1, flammable = 1} + }, + { + "tulip_black", + S("Black Tulip"), + {-2 / 16, -0.5, -2 / 16, 2 / 16, 3 / 16, 2 / 16}, + {color_black = 1, flammable = 1} + }, +} + +for _,item in pairs(flowers.datas) do + add_simple_flower(unpack(item)) +end + + +-- Flower spread +-- Public function to enable override by mods + +function flowers.flower_spread(pos, node) + pos.y = pos.y - 1 + local under = minetest.get_node(pos) + pos.y = pos.y + 1 + -- Replace flora with dry shrub in desert sand and silver sand, + -- as this is the only way to generate them. + -- However, preserve grasses in sand dune biomes. + if minetest.get_item_group(under.name, "sand") == 1 and + under.name ~= "default:sand" then + minetest.set_node(pos, {name = "default:dry_shrub"}) + return + end + + if minetest.get_item_group(under.name, "soil") == 0 then + return + end + + local light = minetest.get_node_light(pos) + if not light or light < 13 then + return + end + + local pos0 = vector.subtract(pos, 4) + local pos1 = vector.add(pos, 4) + -- Testing shows that a threshold of 3 results in an appropriate maximum + -- density of approximately 7 flora per 9x9 area. + if #minetest.find_nodes_in_area(pos0, pos1, "group:flora") > 3 then + return + end + + local soils = minetest.find_nodes_in_area_under_air( + pos0, pos1, "group:soil") + local num_soils = #soils + if num_soils >= 1 then + for si = 1, math.min(3, num_soils) do + local soil = soils[math.random(num_soils)] + local soil_name = minetest.get_node(soil).name + local soil_above = {x = soil.x, y = soil.y + 1, z = soil.z} + light = minetest.get_node_light(soil_above) + if light and light >= 13 and + -- Only spread to same surface node + soil_name == under.name and + -- Desert sand is in the soil group + soil_name ~= "default:desert_sand" then + minetest.set_node(soil_above, {name = node.name}) + end + end + end +end + +minetest.register_abm({ + label = "Flower spread", + nodenames = {"group:flora"}, + interval = 13, + chance = 300, + action = function(...) + flowers.flower_spread(...) + end, +}) + + +-- +-- Mushrooms +-- + +minetest.register_node("flowers:mushroom_red", { + description = S("Red Mushroom"), + tiles = {"flowers_mushroom_red.png"}, + inventory_image = "flowers_mushroom_red.png", + wield_image = "flowers_mushroom_red.png", + drawtype = "plantlike", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {mushroom = 1, snappy = 3, attached_node = 1, flammable = 1}, + sounds = default.node_sound_leaves_defaults(), + on_use = minetest.item_eat(-5), + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, -1 / 16, 4 / 16}, + } +}) + +minetest.register_node("flowers:mushroom_brown", { + description = S("Brown Mushroom"), + tiles = {"flowers_mushroom_brown.png"}, + inventory_image = "flowers_mushroom_brown.png", + wield_image = "flowers_mushroom_brown.png", + drawtype = "plantlike", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {mushroom = 1, food_mushroom = 1, snappy = 3, attached_node = 1, flammable = 1}, + sounds = default.node_sound_leaves_defaults(), + on_use = minetest.item_eat(1), + selection_box = { + type = "fixed", + fixed = {-3 / 16, -0.5, -3 / 16, 3 / 16, -2 / 16, 3 / 16}, + } +}) + + +-- Mushroom spread and death + +function flowers.mushroom_spread(pos, node) + if minetest.get_node_light(pos, 0.5) > 3 then + if minetest.get_node_light(pos, nil) == 15 then + minetest.remove_node(pos) + end + return + end + local positions = minetest.find_nodes_in_area_under_air( + {x = pos.x - 1, y = pos.y - 2, z = pos.z - 1}, + {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, + {"group:soil", "group:tree"}) + if #positions == 0 then + return + end + local pos2 = positions[math.random(#positions)] + pos2.y = pos2.y + 1 + if minetest.get_node_light(pos2, 0.5) <= 3 then + minetest.set_node(pos2, {name = node.name}) + end +end + +minetest.register_abm({ + label = "Mushroom spread", + nodenames = {"group:mushroom"}, + interval = 11, + chance = 150, + action = function(...) + flowers.mushroom_spread(...) + end, +}) + + +-- These old mushroom related nodes can be simplified now + +minetest.register_alias("flowers:mushroom_spores_brown", "flowers:mushroom_brown") +minetest.register_alias("flowers:mushroom_spores_red", "flowers:mushroom_red") +minetest.register_alias("flowers:mushroom_fertile_brown", "flowers:mushroom_brown") +minetest.register_alias("flowers:mushroom_fertile_red", "flowers:mushroom_red") +minetest.register_alias("mushroom:brown_natural", "flowers:mushroom_brown") +minetest.register_alias("mushroom:red_natural", "flowers:mushroom_red") + + +-- +-- Waterlily +-- + +local waterlily_def = { + description = S("Waterlily"), + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + tiles = {"flowers_waterlily.png", "flowers_waterlily_bottom.png"}, + inventory_image = "flowers_waterlily.png", + wield_image = "flowers_waterlily.png", + use_texture_alpha = "clip", + liquids_pointable = true, + walkable = false, + buildable_to = true, + floodable = true, + groups = {snappy = 3, flower = 1, flammable = 1}, + sounds = default.node_sound_leaves_defaults(), + node_placement_prediction = "", + node_box = { + type = "fixed", + fixed = {-0.5, -31 / 64, -0.5, 0.5, -15 / 32, 0.5} + }, + selection_box = { + type = "fixed", + fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, -15 / 32, 7 / 16} + }, + + on_place = function(itemstack, placer, pointed_thing) + local pos = pointed_thing.above + local node = minetest.get_node(pointed_thing.under) + local def = minetest.registered_nodes[node.name] + + if def and def.on_rightclick then + return def.on_rightclick(pointed_thing.under, node, placer, itemstack, + pointed_thing) + end + + if def and def.liquidtype == "source" and + minetest.get_item_group(node.name, "water") > 0 then + local player_name = placer and placer:get_player_name() or "" + if not minetest.is_protected(pos, player_name) then + minetest.set_node(pos, {name = "flowers:waterlily" .. + (def.waving == 3 and "_waving" or ""), + param2 = math.random(0, 3)}) + if not minetest.is_creative_enabled(player_name) then + itemstack:take_item() + end + else + minetest.chat_send_player(player_name, "Node is protected") + minetest.record_protection_violation(pos, player_name) + end + end + return itemstack + end +} + +local waterlily_waving_def = table.copy(waterlily_def) +waterlily_waving_def.waving = 3 +waterlily_waving_def.drop = "flowers:waterlily" +waterlily_waving_def.groups.not_in_creative_inventory = 1 + +minetest.register_node("flowers:waterlily", waterlily_def) +minetest.register_node("flowers:waterlily_waving", waterlily_waving_def) + diff --git a/mods/flowers/license.txt b/mods/flowers/license.txt new file mode 100644 index 00000000..419ebe5a --- /dev/null +++ b/mods/flowers/license.txt @@ -0,0 +1,63 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2012-2016 Ironzorg, VanessaE +Copyright (C) 2012-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2014-2016 RHRhino +Copyright (C) 2015-2016 Gambit +Copyright (C) 2016 yyt16384 +Copyright (C) 2017 paramat + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/flowers/locale/flowers.de.tr b/mods/flowers/locale/flowers.de.tr new file mode 100644 index 00000000..18afb2af --- /dev/null +++ b/mods/flowers/locale/flowers.de.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Rote Rose +Orange Tulip=Orange Tulpe +Yellow Dandelion=Gelber Löwenzahn +Green Chrysanthemum=Grüne Chrysantheme +Blue Geranium=Blaue Geranie +Viola=Veilchen +White Dandelion=Weißer Löwenzahn +Black Tulip=Schwarze Tulpe +Red Mushroom=Roter Pilz +Brown Mushroom=Brauner Pilz +Waterlily=Wasserlilie diff --git a/mods/flowers/locale/flowers.eo.tr b/mods/flowers/locale/flowers.eo.tr new file mode 100644 index 00000000..df515888 --- /dev/null +++ b/mods/flowers/locale/flowers.eo.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Ruĝa Rozo +Orange Tulip=Oranĝkolora Tulipo +Yellow Dandelion=Flava Leontodo +Green Chrysanthemum=Verda Krizantemo +Blue Geranium=Blua Geranio +Viola=Violo +White Dandelion=Blanka Leontodo +Black Tulip=Nigra Tulipo +Red Mushroom=Ruĝa Fungo +Brown Mushroom=Bruna Fungo +Waterlily=Nimfeo diff --git a/mods/flowers/locale/flowers.es.tr b/mods/flowers/locale/flowers.es.tr new file mode 100644 index 00000000..e9c345d8 --- /dev/null +++ b/mods/flowers/locale/flowers.es.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Rosa roja +Orange Tulip=Tulipán naranja +Yellow Dandelion=Diente de León amarillo +Green Chrysanthemum=Crisantemo verde +Blue Geranium=Geranio azul +Viola=Violeta +White Dandelion=Diente de León blanco +Black Tulip=Tulipán negro +Red Mushroom=Champiñón rojo +Brown Mushroom=Champiñón café +Waterlily=Nenúfar diff --git a/mods/flowers/locale/flowers.fr.tr b/mods/flowers/locale/flowers.fr.tr new file mode 100644 index 00000000..41e0d008 --- /dev/null +++ b/mods/flowers/locale/flowers.fr.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Rose rouge +Orange Tulip=Tulipe orange +Yellow Dandelion=Pissenlit jaune +Green Chrysanthemum=Chrysanthème vert +Blue Geranium=Géranium bleu +Viola=Violette +White Dandelion=Pissenlit blanc +Black Tulip=Tulipe noire +Red Mushroom=Champignon rouge +Brown Mushroom=Champignon brun +Waterlily=Nénuphar diff --git a/mods/flowers/locale/flowers.id.tr b/mods/flowers/locale/flowers.id.tr new file mode 100644 index 00000000..730529b3 --- /dev/null +++ b/mods/flowers/locale/flowers.id.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Mawar Merah +Orange Tulip=Tulip Oranye +Yellow Dandelion=Dandelion Kuning +Green Chrysanthemum=Krisan Hijau +Blue Geranium=Geranium Biru +Viola=Viola +White Dandelion=Dandelion Putih +Black Tulip=Tulip Hitam +Red Mushroom=Jamur Merah +Brown Mushroom=Jamur Cokelat +Waterlily=Teratai diff --git a/mods/flowers/locale/flowers.it.tr b/mods/flowers/locale/flowers.it.tr new file mode 100644 index 00000000..1ab49dd4 --- /dev/null +++ b/mods/flowers/locale/flowers.it.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Rosa rossa +Orange Tulip=Tulipano arancione +Yellow Dandelion=Dente di leone giallo +Green Chrysanthemum=Crisantemo verde +Blue Geranium=Geranio blu +Viola=Viola +White Dandelion=Dente di leone bianco +Black Tulip=Tulipano nero +Red Mushroom=Fungo rosso +Brown Mushroom=Fungo marrone +Waterlily=Ninfea diff --git a/mods/flowers/locale/flowers.ja.tr b/mods/flowers/locale/flowers.ja.tr new file mode 100644 index 00000000..bea87e27 --- /dev/null +++ b/mods/flowers/locale/flowers.ja.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=赤色のバラ +Orange Tulip=橙色のチューリップ +Yellow Dandelion=黄色のタンポポ +Green Chrysanthemum=緑色のキク +Blue Geranium=青色のゼラニウム +Viola=ビオラ +White Dandelion=白色のタンポポ +Black Tulip=黒色のチューリップ +Red Mushroom=赤色のキノコ +Brown Mushroom=茶色のキノコ +Waterlily=スイレン diff --git a/mods/flowers/locale/flowers.jbo.tr b/mods/flowers/locale/flowers.jbo.tr new file mode 100644 index 00000000..1df06ec5 --- /dev/null +++ b/mods/flowers/locale/flowers.jbo.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=lo xunre rozgu +Orange Tulip=lo narju tujli +Yellow Dandelion=lo pelxu spatrtaraksaku +Green Chrysanthemum=lo crino xrisantemo +Blue Geranium=lo blanu plargoni +Viola=lo spatrvi'ola +White Dandelion=lo blabi spatrtaraksaku +Black Tulip=lo xekri tujli +Red Mushroom=lo xunre ledgrute +Brown Mushroom=lo bunre ledgrute +Waterlily=lo jacrulspa diff --git a/mods/flowers/locale/flowers.ms.tr b/mods/flowers/locale/flowers.ms.tr new file mode 100644 index 00000000..4e846eb5 --- /dev/null +++ b/mods/flowers/locale/flowers.ms.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Ros Merah +Orange Tulip=Tulip Jingga +Yellow Dandelion=Dandelion Kuning +Green Chrysanthemum=Kekwa Hijau +Blue Geranium=Geranium Biru +Viola=Violet +White Dandelion=Dandelion Putih +Black Tulip=Tulip Hitam +Red Mushroom=Cendawan Merah +Brown Mushroom=Cendawan Perang +Waterlily=Teratai diff --git a/mods/flowers/locale/flowers.pl.tr b/mods/flowers/locale/flowers.pl.tr new file mode 100644 index 00000000..ff6a5e20 --- /dev/null +++ b/mods/flowers/locale/flowers.pl.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Czerwona róża +Orange Tulip=Pomarańczowy tulipan +Yellow Dandelion=Żółty mlecz +Green Chrysanthemum=Zielona chryzantema +Blue Geranium=Niebieska pelargonia +Viola=Fiołek +White Dandelion=Biały mlecz +Black Tulip=Czarny tulipan +Red Mushroom=Czerwony muchomor +Brown Mushroom=Brązowy grzyb +Waterlily=Lilia wodna diff --git a/mods/flowers/locale/flowers.pt_BR.tr b/mods/flowers/locale/flowers.pt_BR.tr new file mode 100644 index 00000000..1f5ff929 --- /dev/null +++ b/mods/flowers/locale/flowers.pt_BR.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Rosa Vermelha +Orange Tulip=Tulipa Laranja +Yellow Dandelion=Dente-de-leão Amarelo +Green Chrysanthemum=Crisântemo Verde +Blue Geranium=Gerânio Azul +Viola=Violeta +White Dandelion=Dente-de-leão Branco +Black Tulip=Tulipa Negra +Red Mushroom=Cogumelo Vermelho +Brown Mushroom=Cogumelo Marrom +Waterlily=Nenúfar diff --git a/mods/flowers/locale/flowers.ru.tr b/mods/flowers/locale/flowers.ru.tr new file mode 100644 index 00000000..d861e2a4 --- /dev/null +++ b/mods/flowers/locale/flowers.ru.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Красная Роза +Orange Tulip=Оранжевый Тюльпан +Yellow Dandelion=Желтый Одуванчик +Green Chrysanthemum=Зелёная Хризантема +Blue Geranium=Синяя Герань +Viola=Фиалка +White Dandelion=Белый Одуванчик +Black Tulip=Черный Тюльпан +Red Mushroom=Мухомор +Brown Mushroom=Коричневый Гриб +Waterlily=Кувшинка diff --git a/mods/flowers/locale/flowers.sk.tr b/mods/flowers/locale/flowers.sk.tr new file mode 100644 index 00000000..75d4ae1e --- /dev/null +++ b/mods/flowers/locale/flowers.sk.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Červená ruža +Orange Tulip=Oranžový tulipán +Yellow Dandelion=Žltá púpava +Green Chrysanthemum=Zelená chryzantéma +Blue Geranium=Modrý muškát +Viola=Fialka +White Dandelion=Biela púpava +Black Tulip=Čierny tulipán +Red Mushroom=Červená huba +Brown Mushroom=Hnedá huba +Waterlily=Lekno diff --git a/mods/flowers/locale/flowers.sv.tr b/mods/flowers/locale/flowers.sv.tr new file mode 100644 index 00000000..c8a26a3d --- /dev/null +++ b/mods/flowers/locale/flowers.sv.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Röd ros +Orange Tulip=Orange tulpan +Yellow Dandelion=Gul maskros +Green Chrysanthemum=Grön krysantemum +Blue Geranium=Blå geranium +Viola=Violett viola +White Dandelion=Vit maskros +Black Tulip=Svart tulpan +Red Mushroom=Röd svamp +Brown Mushroom=Brun svamp +Waterlily=Näckros diff --git a/mods/flowers/locale/flowers.uk.tr b/mods/flowers/locale/flowers.uk.tr new file mode 100644 index 00000000..25d8f82a --- /dev/null +++ b/mods/flowers/locale/flowers.uk.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Червона Троянда +Orange Tulip=Помаранчевий Тюльпан +Yellow Dandelion=Жовта Кульбабка +Green Chrysanthemum=Зелена Хризантема +Blue Geranium=Синій Геран +Viola=Фіалка +White Dandelion=Біла Кульбабка +Black Tulip=Чорний Тюльпан +Red Mushroom=Мухомор +Brown Mushroom=Коричневий Гриб +Waterlily=Водяна Лілія diff --git a/mods/flowers/locale/flowers.zh_CN.tr b/mods/flowers/locale/flowers.zh_CN.tr new file mode 100644 index 00000000..3139dfbc --- /dev/null +++ b/mods/flowers/locale/flowers.zh_CN.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=红玫瑰 +Orange Tulip=橙郁金香 +Yellow Dandelion=黄蒲公英 +Green Chrysanthemum=绿菊花 +Blue Geranium=蓝天竺葵 +Viola=三色堇 +White Dandelion=白蒲公英 +Black Tulip=黑郁金香 +Red Mushroom=红蘑菇 +Brown Mushroom=棕蘑菇 +Waterlily=睡莲 diff --git a/mods/flowers/locale/flowers.zh_TW.tr b/mods/flowers/locale/flowers.zh_TW.tr new file mode 100644 index 00000000..a3a3ec5a --- /dev/null +++ b/mods/flowers/locale/flowers.zh_TW.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=紅玫瑰 +Orange Tulip=橙鬱金香 +Yellow Dandelion=黃蒲公英 +Green Chrysanthemum=綠菊花 +Blue Geranium=藍天竺葵 +Viola=三色堇 +White Dandelion=白蒲公英 +Black Tulip=黑鬱金香 +Red Mushroom=紅蘑菇 +Brown Mushroom=棕蘑菇 +Waterlily=睡蓮 diff --git a/mods/flowers/locale/template.txt b/mods/flowers/locale/template.txt new file mode 100644 index 00000000..a3a687fd --- /dev/null +++ b/mods/flowers/locale/template.txt @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose= +Orange Tulip= +Yellow Dandelion= +Green Chrysanthemum= +Blue Geranium= +Viola= +White Dandelion= +Black Tulip= +Red Mushroom= +Brown Mushroom= +Waterlily= diff --git a/mods/flowers/mapgen.lua b/mods/flowers/mapgen.lua new file mode 100644 index 00000000..8735968d --- /dev/null +++ b/mods/flowers/mapgen.lua @@ -0,0 +1,181 @@ +-- +-- Mgv6 +-- + +local function register_mgv6_flower(flower_name) + minetest.register_decoration({ + name = "flowers:"..flower_name, + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.006, + spread = {x = 100, y = 100, z = 100}, + seed = 436, + octaves = 3, + persist = 0.6 + }, + y_max = 30, + y_min = 1, + decoration = "flowers:"..flower_name, + }) +end + +local function register_mgv6_mushroom(mushroom_name) + minetest.register_decoration({ + name = "flowers:"..mushroom_name, + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.04, + spread = {x = 100, y = 100, z = 100}, + seed = 7133, + octaves = 3, + persist = 0.6 + }, + y_max = 30, + y_min = 1, + decoration = "flowers:"..mushroom_name, + spawn_by = "default:tree", + num_spawn_by = 1, + }) +end + +local function register_mgv6_waterlily() + minetest.register_decoration({ + name = "flowers:waterlily", + deco_type = "simple", + place_on = {"default:dirt"}, + sidelen = 16, + noise_params = { + offset = -0.12, + scale = 0.3, + spread = {x = 100, y = 100, z = 100}, + seed = 33, + octaves = 3, + persist = 0.7 + }, + y_max = 0, + y_min = 0, + decoration = "flowers:waterlily_waving", + param2 = 0, + param2_max = 3, + place_offset_y = 1, + }) +end + +function flowers.register_mgv6_decorations() + register_mgv6_flower("rose") + register_mgv6_flower("tulip") + register_mgv6_flower("dandelion_yellow") + register_mgv6_flower("geranium") + register_mgv6_flower("viola") + register_mgv6_flower("dandelion_white") + + register_mgv6_mushroom("mushroom_brown") + register_mgv6_mushroom("mushroom_red") + + register_mgv6_waterlily() +end + +-- TODO: figure out why we did commented these in the past +-- +-- All other biome API mapgens +--[[ + +local function register_flower(seed, flower_name) + minetest.register_decoration({ + name = "flowers:"..flower_name, + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = -0.02, + scale = 0.04, + spread = {x = 200, y = 200, z = 200}, + seed = seed, + octaves = 3, + persist = 0.6 + }, + biomes = {"grassland", "deciduous_forest"}, + y_max = 31000, + y_min = 1, + decoration = "flowers:"..flower_name, + }) +end + +local function register_mushroom(mushroom_name) + minetest.register_decoration({ + name = "flowers:"..mushroom_name, + deco_type = "simple", + place_on = {"default:dirt_with_grass", "default:dirt_with_coniferous_litter"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.006, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"deciduous_forest", "coniferous_forest"}, + y_max = 31000, + y_min = 1, + decoration = "flowers:"..mushroom_name, + }) +end + +local function register_waterlily() + minetest.register_decoration({ + name = "default:waterlily", + deco_type = "simple", + place_on = {"default:dirt"}, + sidelen = 16, + noise_params = { + offset = -0.12, + scale = 0.3, + spread = {x = 200, y = 200, z = 200}, + seed = 33, + octaves = 3, + persist = 0.7 + }, + biomes = {"rainforest_swamp", "savanna_shore", "deciduous_forest_shore"}, + y_max = 0, + y_min = 0, + decoration = "flowers:waterlily_waving", + param2 = 0, + param2_max = 3, + place_offset_y = 1, + }) +end + +function flowers.register_decorations() + register_flower(436, "rose") + register_flower(19822, "tulip") + register_flower(1220999, "dandelion_yellow") + register_flower(800081, "chrysanthemum_green") + register_flower(36662, "geranium") + register_flower(1133, "viola") + register_flower(73133, "dandelion_white") + register_flower(42, "tulip_black") + + register_mushroom("mushroom_brown") + register_mushroom("mushroom_red") + + register_waterlily() +end + +--]] +-- Detect mapgen to select functions +-- + +local mg_name = minetest.get_mapgen_setting("mg_name") +if mg_name == "v6" then + flowers.register_mgv6_decorations() +--else +-- flowers.register_decorations() +end + diff --git a/mods/flowers/mod.conf b/mods/flowers/mod.conf new file mode 100644 index 00000000..cdafe642 --- /dev/null +++ b/mods/flowers/mod.conf @@ -0,0 +1,3 @@ +name = flowers +description = Minetest Game mod: flowers +depends = default diff --git a/mods/flowers/textures/flowers_chrysanthemum_green.png b/mods/flowers/textures/flowers_chrysanthemum_green.png new file mode 100644 index 00000000..01d8c7e3 Binary files /dev/null and b/mods/flowers/textures/flowers_chrysanthemum_green.png differ diff --git a/mods/flowers/textures/flowers_dandelion_white.png b/mods/flowers/textures/flowers_dandelion_white.png new file mode 100644 index 00000000..1bc02fb5 Binary files /dev/null and b/mods/flowers/textures/flowers_dandelion_white.png differ diff --git a/mods/flowers/textures/flowers_dandelion_yellow.png b/mods/flowers/textures/flowers_dandelion_yellow.png new file mode 100644 index 00000000..544f60c1 Binary files /dev/null and b/mods/flowers/textures/flowers_dandelion_yellow.png differ diff --git a/mods/flowers/textures/flowers_geranium.png b/mods/flowers/textures/flowers_geranium.png new file mode 100644 index 00000000..88de1d7f Binary files /dev/null and b/mods/flowers/textures/flowers_geranium.png differ diff --git a/mods/flowers/textures/flowers_mushroom_brown.png b/mods/flowers/textures/flowers_mushroom_brown.png new file mode 100644 index 00000000..33ffcd47 Binary files /dev/null and b/mods/flowers/textures/flowers_mushroom_brown.png differ diff --git a/mods/flowers/textures/flowers_mushroom_red.png b/mods/flowers/textures/flowers_mushroom_red.png new file mode 100644 index 00000000..a68f5d50 Binary files /dev/null and b/mods/flowers/textures/flowers_mushroom_red.png differ diff --git a/mods/flowers/textures/flowers_rose.png b/mods/flowers/textures/flowers_rose.png new file mode 100644 index 00000000..e3b841d2 Binary files /dev/null and b/mods/flowers/textures/flowers_rose.png differ diff --git a/mods/flowers/textures/flowers_tulip.png b/mods/flowers/textures/flowers_tulip.png new file mode 100644 index 00000000..471fcd3a Binary files /dev/null and b/mods/flowers/textures/flowers_tulip.png differ diff --git a/mods/flowers/textures/flowers_tulip_black.png b/mods/flowers/textures/flowers_tulip_black.png new file mode 100644 index 00000000..1dd09f74 Binary files /dev/null and b/mods/flowers/textures/flowers_tulip_black.png differ diff --git a/mods/flowers/textures/flowers_viola.png b/mods/flowers/textures/flowers_viola.png new file mode 100644 index 00000000..ca2d750e Binary files /dev/null and b/mods/flowers/textures/flowers_viola.png differ diff --git a/mods/flowers/textures/flowers_waterlily.png b/mods/flowers/textures/flowers_waterlily.png new file mode 100644 index 00000000..973e5113 Binary files /dev/null and b/mods/flowers/textures/flowers_waterlily.png differ diff --git a/mods/flowers/textures/flowers_waterlily_bottom.png b/mods/flowers/textures/flowers_waterlily_bottom.png new file mode 100644 index 00000000..3dbeaf40 Binary files /dev/null and b/mods/flowers/textures/flowers_waterlily_bottom.png differ diff --git a/mods/fun_caves b/mods/fun_caves new file mode 160000 index 00000000..133e66ad --- /dev/null +++ b/mods/fun_caves @@ -0,0 +1 @@ +Subproject commit 133e66ad38389b4c500e7f90a2b548624ef5fa3e diff --git a/mods/game_commands/README.txt b/mods/game_commands/README.txt new file mode 100644 index 00000000..a4516082 --- /dev/null +++ b/mods/game_commands/README.txt @@ -0,0 +1,7 @@ +Minetest Game mod: game_commands +================================ +See license.txt for license information. + +Authors of source code +---------------------- +rubenwardy (MIT) diff --git a/mods/game_commands/init.lua b/mods/game_commands/init.lua new file mode 100644 index 00000000..e038be18 --- /dev/null +++ b/mods/game_commands/init.lua @@ -0,0 +1,31 @@ +-- game_commands/init.lua + +-- Load support for MT game translation. +local S = minetest.get_translator("game_commands") + + +minetest.register_chatcommand("killme", { + description = S("Kill yourself to respawn"), + func = function(name) + local player = minetest.get_player_by_name(name) + if player then + if minetest.settings:get_bool("enable_damage") then + player:set_hp(0) + return true + else + for _, callback in pairs(minetest.registered_on_respawnplayers) do + if callback(player) then + return true + end + end + + -- There doesn't seem to be a way to get a default spawn pos + -- from the lua API + return false, S("No static_spawnpoint defined") + end + else + -- Show error message if used when not logged in, eg: from IRC mod + return false, S("You need to be online to be killed!") + end + end +}) diff --git a/mods/game_commands/license.txt b/mods/game_commands/license.txt new file mode 100644 index 00000000..fa855644 --- /dev/null +++ b/mods/game_commands/license.txt @@ -0,0 +1,24 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2017-2018 rubenwardy + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT diff --git a/mods/game_commands/locale/game_commands.de.tr b/mods/game_commands/locale/game_commands.de.tr new file mode 100644 index 00000000..24b0e25d --- /dev/null +++ b/mods/game_commands/locale/game_commands.de.tr @@ -0,0 +1,4 @@ +# textdomain: game_commands +Kill yourself to respawn=Selbstmord begehen, um zu Respawnen +No static_spawnpoint defined=Kein static_spawnpoint definiert +You need to be online to be killed!=Sie müssen online sein, um getötet zu werden! diff --git a/mods/game_commands/locale/game_commands.eo.tr b/mods/game_commands/locale/game_commands.eo.tr new file mode 100644 index 00000000..0ff99aab --- /dev/null +++ b/mods/game_commands/locale/game_commands.eo.tr @@ -0,0 +1,4 @@ +# textdomain: game_commands +Kill yourself to respawn=Sinmortigu por renaski +No static_spawnpoint defined=Ne estas difina static_spawnpoint +You need to be online to be killed!=Vi devas esti enreta por esti mortigita! diff --git a/mods/game_commands/locale/game_commands.es.tr b/mods/game_commands/locale/game_commands.es.tr new file mode 100644 index 00000000..702a2ef9 --- /dev/null +++ b/mods/game_commands/locale/game_commands.es.tr @@ -0,0 +1,4 @@ +# textdomain: game_commands +Kill yourself to respawn=Suicídate para reaparecer +No static_spawnpoint defined=No se ha definido un punto de aparición +You need to be online to be killed!=¡Necesitas estar en línea para que te maten! diff --git a/mods/game_commands/locale/game_commands.fr.tr b/mods/game_commands/locale/game_commands.fr.tr new file mode 100644 index 00000000..0e295d68 --- /dev/null +++ b/mods/game_commands/locale/game_commands.fr.tr @@ -0,0 +1,4 @@ +# textdomain: game_commands +Kill yourself to respawn=Se suicider pour réapparaître +No static_spawnpoint defined=Pas de point d'apparition défini +You need to be online to be killed!=Vous devez être en ligne pour être tué ! diff --git a/mods/game_commands/locale/game_commands.id.tr b/mods/game_commands/locale/game_commands.id.tr new file mode 100644 index 00000000..1ab364b2 --- /dev/null +++ b/mods/game_commands/locale/game_commands.id.tr @@ -0,0 +1,4 @@ +# textdomain: game_commands +Kill yourself to respawn=Bunuh diri untuk bangkit kembali +No static_spawnpoint defined=Tiada static_spawnpoint (titik bangkit statis) yang diatur +You need to be online to be killed!=Anda harus daring untuk dibunuh! diff --git a/mods/game_commands/locale/game_commands.it.tr b/mods/game_commands/locale/game_commands.it.tr new file mode 100644 index 00000000..91646b0f --- /dev/null +++ b/mods/game_commands/locale/game_commands.it.tr @@ -0,0 +1,4 @@ +# textdomain: game_commands +Kill yourself to respawn=Ucciditi per ricomparire +No static_spawnpoint defined=Nessuno static_spawnpoint definito +You need to be online to be killed!=Devi essere in linea per essere ucciso! diff --git a/mods/game_commands/locale/game_commands.ja.tr b/mods/game_commands/locale/game_commands.ja.tr new file mode 100644 index 00000000..b6c77dce --- /dev/null +++ b/mods/game_commands/locale/game_commands.ja.tr @@ -0,0 +1,4 @@ +# textdomain: game_commands +Kill yourself to respawn=リセットしてリスポーンします +No static_spawnpoint defined=static_spawnpoint が設定されていません +You need to be online to be killed!=リセットするにはオンラインである必要があります diff --git a/mods/game_commands/locale/game_commands.jbo.tr b/mods/game_commands/locale/game_commands.jbo.tr new file mode 100644 index 00000000..ddddcd7a --- /dev/null +++ b/mods/game_commands/locale/game_commands.jbo.tr @@ -0,0 +1,4 @@ +# textdomain: game_commands +Kill yourself to respawn=.i ro nu do catra do cu tadji pa nu do tolcanci +No static_spawnpoint defined=.i no da ckaji lo me la'o zoi.static_spawnpoint.zoi +You need to be online to be killed!=.i lo nu samjo'e cu sarcu lo nu do se catra diff --git a/mods/game_commands/locale/game_commands.ms.tr b/mods/game_commands/locale/game_commands.ms.tr new file mode 100644 index 00000000..ed4a0bdf --- /dev/null +++ b/mods/game_commands/locale/game_commands.ms.tr @@ -0,0 +1,4 @@ +# textdomain: game_commands +Kill yourself to respawn=Bunuh diri anda untuk lahir semula +No static_spawnpoint defined=Tiada titik permulaan statik (tetapan static_spawnpoint) ditakrifkan +You need to be online to be killed!=Anda mesti berada dalam talian untuk dibunuh! diff --git a/mods/game_commands/locale/game_commands.pl.tr b/mods/game_commands/locale/game_commands.pl.tr new file mode 100644 index 00000000..52477c6d --- /dev/null +++ b/mods/game_commands/locale/game_commands.pl.tr @@ -0,0 +1,4 @@ +# textdomain: game_commands +Kill yourself to respawn=Zastosować komendę kill aby się zrespawnować +No static_spawnpoint defined=Nie zdefiniowano static_spawnpoint +You need to be online to be killed!=Musisz być online aby zastosować komendę kill diff --git a/mods/game_commands/locale/game_commands.pt_BR.tr b/mods/game_commands/locale/game_commands.pt_BR.tr new file mode 100644 index 00000000..6c52c0bd --- /dev/null +++ b/mods/game_commands/locale/game_commands.pt_BR.tr @@ -0,0 +1,4 @@ +# textdomain: game_commands +Kill yourself to respawn=Mate-se para reaparecer +No static_spawnpoint defined=Nenhum ponto de reaparecer estático definido +You need to be online to be killed!=Você precisa estar online para ser morto! diff --git a/mods/game_commands/locale/game_commands.ru.tr b/mods/game_commands/locale/game_commands.ru.tr new file mode 100644 index 00000000..26d9e08a --- /dev/null +++ b/mods/game_commands/locale/game_commands.ru.tr @@ -0,0 +1,4 @@ +# textdomain: game_commands +Kill yourself to respawn=Убейте себя, чтобы возродиться +No static_spawnpoint defined=static_spawnpoint не определён +You need to be online to be killed!=Вы должны быть онлайн, чтобы убить себя! diff --git a/mods/game_commands/locale/game_commands.sk.tr b/mods/game_commands/locale/game_commands.sk.tr new file mode 100644 index 00000000..f7d153ae --- /dev/null +++ b/mods/game_commands/locale/game_commands.sk.tr @@ -0,0 +1,4 @@ +# textdomain: game_commands +Kill yourself to respawn=Samovražda pre znovuzrodenie +No static_spawnpoint defined=Nie je definované stále miesto znovuzrodenia +You need to be online to be killed!=Musíš byť online, aby si mohol byť zabitý! diff --git a/mods/game_commands/locale/game_commands.sv.tr b/mods/game_commands/locale/game_commands.sv.tr new file mode 100644 index 00000000..e3110dad --- /dev/null +++ b/mods/game_commands/locale/game_commands.sv.tr @@ -0,0 +1,4 @@ +# textdomain: game_commands +Kill yourself to respawn=Döda dig själv för att respawna +No static_spawnpoint defined=Ingen static_spawnpoint definierad +You need to be online to be killed!=Du måsta vara online för att bli dödad! diff --git a/mods/game_commands/locale/game_commands.uk.tr b/mods/game_commands/locale/game_commands.uk.tr new file mode 100644 index 00000000..7e8241e8 --- /dev/null +++ b/mods/game_commands/locale/game_commands.uk.tr @@ -0,0 +1,4 @@ +# textdomain: game_commands +Kill yourself to respawn=Вбийте себе щоб відродися +No static_spawnpoint defined=static_spawnpoint не визначений +You need to be online to be killed!=Ви повинні бути онлайн, щоб вбити себе! diff --git a/mods/game_commands/locale/game_commands.zh_CN.tr b/mods/game_commands/locale/game_commands.zh_CN.tr new file mode 100644 index 00000000..ba9a0275 --- /dev/null +++ b/mods/game_commands/locale/game_commands.zh_CN.tr @@ -0,0 +1,4 @@ +# textdomain: game_commands +Kill yourself to respawn=自杀并重生 +No static_spawnpoint defined=static_spawnpoint 未定义 +You need to be online to be killed!=您需要在线才能被杀死! diff --git a/mods/game_commands/locale/game_commands.zh_TW.tr b/mods/game_commands/locale/game_commands.zh_TW.tr new file mode 100644 index 00000000..34e148d2 --- /dev/null +++ b/mods/game_commands/locale/game_commands.zh_TW.tr @@ -0,0 +1,4 @@ +# textdomain: game_commands +Kill yourself to respawn=殺死自己並重生 +No static_spawnpoint defined=static_spawnpoint 未定義 +You need to be online to be killed!=您需要在線才能被殺死! diff --git a/mods/game_commands/locale/template.txt b/mods/game_commands/locale/template.txt new file mode 100644 index 00000000..903f1603 --- /dev/null +++ b/mods/game_commands/locale/template.txt @@ -0,0 +1,4 @@ +# textdomain: game_commands +Kill yourself to respawn= +No static_spawnpoint defined= +You need to be online to be killed!= diff --git a/mods/game_commands/mod.conf b/mods/game_commands/mod.conf new file mode 100644 index 00000000..5571ff51 --- /dev/null +++ b/mods/game_commands/mod.conf @@ -0,0 +1,2 @@ +name = game_commands +description = Minetest Game mod: game_commands diff --git a/mods/geomoria b/mods/geomoria new file mode 160000 index 00000000..cc791a0f --- /dev/null +++ b/mods/geomoria @@ -0,0 +1 @@ +Subproject commit cc791a0f499b67c9dfa2c8589e502832be287a70 diff --git a/mods/give_initial_stuff/README.txt b/mods/give_initial_stuff/README.txt new file mode 100644 index 00000000..cbd240fe --- /dev/null +++ b/mods/give_initial_stuff/README.txt @@ -0,0 +1,8 @@ +Minetest Game mod: give_initial_stuff +===================================== +See license.txt for license information. + +Authors of source code +---------------------- +Perttu Ahola (celeron55) (MIT) +Various Minetest developers and contributors (MIT) diff --git a/mods/give_initial_stuff/init.lua b/mods/give_initial_stuff/init.lua index 9cf6b51b..af018c32 100644 --- a/mods/give_initial_stuff/init.lua +++ b/mods/give_initial_stuff/init.lua @@ -1,12 +1,45 @@ -minetest.register_on_newplayer(function(player) - print("on_newplayer") - if minetest.setting_getbool("give_initial_stuff") then - print("giving give_initial_stuff to player") - player:get_inventory():add_item('main', 'default:pick_steel') - player:get_inventory():add_item('main', 'default:torch 99') - player:get_inventory():add_item('main', 'default:axe_steel') - player:get_inventory():add_item('main', 'default:shovel_steel') - player:get_inventory():add_item('main', 'default:cobble 99') - end -end) +-- gave_initial_stuff/init.lua +local stuff_string = minetest.settings:get("initial_stuff") or + "illuna:noobcoin 42,magical_potion:fly_small 2" + +give_initial_stuff = { + items = {} +} + +function give_initial_stuff.give(player) + minetest.log("action", + "Giving initial stuff to player " .. player:get_player_name()) + local inv = player:get_inventory() + for _, stack in ipairs(give_initial_stuff.items) do + inv:add_item("main", stack) + end +end + +function give_initial_stuff.add(stack) + give_initial_stuff.items[#give_initial_stuff.items + 1] = ItemStack(stack) +end + +function give_initial_stuff.clear() + give_initial_stuff.items = {} +end + +function give_initial_stuff.add_from_csv(str) + local items = str:split(",") + for _, itemname in ipairs(items) do + give_initial_stuff.add(itemname) + end +end + +function give_initial_stuff.set_list(list) + give_initial_stuff.items = list +end + +function give_initial_stuff.get_list() + return give_initial_stuff.items +end + +give_initial_stuff.add_from_csv(stuff_string) +if minetest.settings:get_bool("give_initial_stuff") then + minetest.register_on_newplayer(give_initial_stuff.give) +end diff --git a/mods/give_initial_stuff/license.txt b/mods/give_initial_stuff/license.txt new file mode 100644 index 00000000..8134c920 --- /dev/null +++ b/mods/give_initial_stuff/license.txt @@ -0,0 +1,25 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2012-2016 Perttu Ahola (celeron55) +Copyright (C) 2012-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT diff --git a/mods/give_initial_stuff/mod.conf b/mods/give_initial_stuff/mod.conf new file mode 100644 index 00000000..fe05b338 --- /dev/null +++ b/mods/give_initial_stuff/mod.conf @@ -0,0 +1,3 @@ +name = give_initial_stuff +description = Minetest Game mod: give_initial_stuff +depends = default, illuna, magical_potion diff --git a/mods/glow b/mods/glow new file mode 160000 index 00000000..4c015a07 --- /dev/null +++ b/mods/glow @@ -0,0 +1 @@ +Subproject commit 4c015a07b5875a24f83e4acf3682eb543c56d1f0 diff --git a/mods/golems b/mods/golems new file mode 160000 index 00000000..22c03901 --- /dev/null +++ b/mods/golems @@ -0,0 +1 @@ +Subproject commit 22c039011b1c09d58ff8c1da1f38eed00147d88f diff --git a/mods/halloween_mobs b/mods/halloween_mobs new file mode 160000 index 00000000..a78da495 --- /dev/null +++ b/mods/halloween_mobs @@ -0,0 +1 @@ +Subproject commit a78da495d0d2882516e6a56cce7ba2e2b7f5b6f3 diff --git a/mods/handle_schematics b/mods/handle_schematics new file mode 160000 index 00000000..0c5bfbe9 --- /dev/null +++ b/mods/handle_schematics @@ -0,0 +1 @@ +Subproject commit 0c5bfbe9afc226d784bc8c399c399896547fe100 diff --git a/mods/hangglider b/mods/hangglider new file mode 160000 index 00000000..bee40b9b --- /dev/null +++ b/mods/hangglider @@ -0,0 +1 @@ +Subproject commit bee40b9ba1975081c5754b7b07dbf475744176fe diff --git a/mods/hangglider_regular b/mods/hangglider_regular new file mode 160000 index 00000000..d4f62a8b --- /dev/null +++ b/mods/hangglider_regular @@ -0,0 +1 @@ +Subproject commit d4f62a8bd4776175dcd14bc198fea5862bca3de4 diff --git a/mods/hazmat_suit b/mods/hazmat_suit new file mode 160000 index 00000000..977c7340 --- /dev/null +++ b/mods/hazmat_suit @@ -0,0 +1 @@ +Subproject commit 977c734073179435b6c00eff491d7f4adc72c09c diff --git a/mods/hbarmor b/mods/hbarmor new file mode 160000 index 00000000..93d994cb --- /dev/null +++ b/mods/hbarmor @@ -0,0 +1 @@ +Subproject commit 93d994cbad6a16f985919add5776b568d7a5d6d3 diff --git a/mods/hbhunger b/mods/hbhunger new file mode 160000 index 00000000..470b0f69 --- /dev/null +++ b/mods/hbhunger @@ -0,0 +1 @@ +Subproject commit 470b0f693d1b31573f5ae928cc6961ee9366887e diff --git a/mods/hbsprint b/mods/hbsprint new file mode 160000 index 00000000..f566d0ff --- /dev/null +++ b/mods/hbsprint @@ -0,0 +1 @@ +Subproject commit f566d0ff26a2fb6371c617513a7f0c08cffbff0f diff --git a/mods/headanim b/mods/headanim new file mode 160000 index 00000000..fce30158 --- /dev/null +++ b/mods/headanim @@ -0,0 +1 @@ +Subproject commit fce30158a7ada97b998763c77c8edee89617b3cf diff --git a/mods/homedecor_modpack b/mods/homedecor_modpack new file mode 160000 index 00000000..7d67e3dc --- /dev/null +++ b/mods/homedecor_modpack @@ -0,0 +1 @@ +Subproject commit 7d67e3dcd06092ca69ccbf6650fcf397ec859110 diff --git a/mods/hopper b/mods/hopper new file mode 160000 index 00000000..6ac1b619 --- /dev/null +++ b/mods/hopper @@ -0,0 +1 @@ +Subproject commit 6ac1b6195136eb2ad6961c744f67e9775b7f0fd6 diff --git a/mods/hudbars b/mods/hudbars new file mode 160000 index 00000000..812b2538 --- /dev/null +++ b/mods/hudbars @@ -0,0 +1 @@ +Subproject commit 812b2538ff0198c5c7b3707a80b3ebfa6b34f460 diff --git a/mods/illuna b/mods/illuna new file mode 160000 index 00000000..15648494 --- /dev/null +++ b/mods/illuna @@ -0,0 +1 @@ +Subproject commit 156484947b4e0a0e37212d8cf5d91da07305e360 diff --git a/mods/illuna_costumes b/mods/illuna_costumes new file mode 160000 index 00000000..eac70584 --- /dev/null +++ b/mods/illuna_costumes @@ -0,0 +1 @@ +Subproject commit eac705849dc759ca40109996d0f04bfbf3844520 diff --git a/mods/illuna_ethereal b/mods/illuna_ethereal new file mode 160000 index 00000000..5e9afb7b --- /dev/null +++ b/mods/illuna_ethereal @@ -0,0 +1 @@ +Subproject commit 5e9afb7beb7822010021d8b816e4a309e23b976d diff --git a/mods/illuna_events b/mods/illuna_events new file mode 160000 index 00000000..e13b1944 --- /dev/null +++ b/mods/illuna_events @@ -0,0 +1 @@ +Subproject commit e13b19442271f8bd576a2dafd9789993a482de1d diff --git a/mods/illuna_extras b/mods/illuna_extras new file mode 160000 index 00000000..09dc436c --- /dev/null +++ b/mods/illuna_extras @@ -0,0 +1 @@ +Subproject commit 09dc436c558badc9880e5a6ee07d3f802cc9f16a diff --git a/mods/integral b/mods/integral new file mode 160000 index 00000000..71f46a59 --- /dev/null +++ b/mods/integral @@ -0,0 +1 @@ +Subproject commit 71f46a59b8b2acc9e02ae509a5b5fb59489728f8 diff --git a/mods/irc b/mods/irc new file mode 160000 index 00000000..b1dfdbae --- /dev/null +++ b/mods/irc @@ -0,0 +1 @@ +Subproject commit b1dfdbaec8901bc620d617f7c4814a16cdc257e9 diff --git a/mods/keys/README.txt b/mods/keys/README.txt new file mode 100644 index 00000000..86591203 --- /dev/null +++ b/mods/keys/README.txt @@ -0,0 +1,21 @@ +Minetest Game mod: keys +========================== +See license.txt for license information. + +Authors of source code +---------------------- +Originally by celeron55, Perttu Ahola (LGPLv2.1+) +Various Minetest developers and contributors (LGPLv2.1+) + +Authors of media (textures, sounds, models and schematics) +---------------------------------------------------------- + +Textures +-------- +Gambit (CC BY-SA 3.0): + keys_key.png + keys_key_skeleton.png + +Features +-------- +This mod uses the key API as defined in game_api.txt section [Key API]. diff --git a/mods/keys/aliases.lua b/mods/keys/aliases.lua new file mode 100644 index 00000000..4297498b --- /dev/null +++ b/mods/keys/aliases.lua @@ -0,0 +1,6 @@ +-- +-- Aliases for backward compatibility +-- + +minetest.register_alias("default:key", "keys:key") +minetest.register_alias("default:skeleton_key", "keys:skeleton_key") diff --git a/mods/keys/crafting.lua b/mods/keys/crafting.lua new file mode 100644 index 00000000..b9b503a5 --- /dev/null +++ b/mods/keys/crafting.lua @@ -0,0 +1,28 @@ +-- +-- Crafting recipes +-- + +minetest.register_craft({ + output = "keys:skeleton_key", + recipe = { + {"default:gold_ingot"}, + } +}) + +-- +-- Cooking recipes +-- + +minetest.register_craft({ + type = "cooking", + output = "default:gold_ingot", + recipe = "keys:key", + cooktime = 5, +}) + +minetest.register_craft({ + type = "cooking", + output = "default:gold_ingot", + recipe = "keys:skeleton_key", + cooktime = 5, +}) diff --git a/mods/keys/craftitems.lua b/mods/keys/craftitems.lua new file mode 100644 index 00000000..45e0b824 --- /dev/null +++ b/mods/keys/craftitems.lua @@ -0,0 +1,101 @@ +-- Load support for MT game translation. +local S = minetest.get_translator("keys") + +-- +-- Craftitems +-- + +minetest.register_craftitem("keys:skeleton_key", { + description = S("Skeleton Key"), + inventory_image = "keys_key_skeleton.png", + on_use = function(itemstack, user, pointed_thing) + if pointed_thing.type ~= "node" then + return itemstack + end + + local pos = pointed_thing.under + local node = minetest.get_node(pos) + + if not node then + return itemstack + end + + local node_reg = minetest.registered_nodes[node.name] + local on_skeleton_key_use = node_reg and node_reg.on_skeleton_key_use + if not on_skeleton_key_use then + return itemstack + end + + -- make a new key secret in case the node callback needs it + local random = math.random + local newsecret = string.format( + "%04x%04x%04x%04x", + random(2^16) - 1, random(2^16) - 1, + random(2^16) - 1, random(2^16) - 1) + + local secret, _, _ = on_skeleton_key_use(pos, user, newsecret) + + if secret then + local inv = minetest.get_inventory({type="player", name=user:get_player_name()}) + + -- update original itemstack + itemstack:take_item() + + -- finish and return the new key + local new_stack = ItemStack("keys:key") + local meta = new_stack:get_meta() + meta:set_string("secret", secret) + meta:set_string("description", S("Key to @1's @2", user:get_player_name(), + minetest.registered_nodes[node.name].description)) + + if itemstack:get_count() == 0 then + itemstack = new_stack + else + if inv:add_item("main", new_stack):get_count() > 0 then + minetest.add_item(user:get_pos(), new_stack) + end -- else: added to inventory successfully + end + + return itemstack + end + end +}) + +minetest.register_craftitem("keys:key", { + description = S("Key"), + inventory_image = "keys_key.png", + groups = {key = 1, not_in_creative_inventory = 1}, + on_place = function(itemstack, placer, pointed_thing) + local under = pointed_thing.under + local node = minetest.get_node(under) + local def = minetest.registered_nodes[node.name] + if def and def.on_rightclick and + not (placer and placer:is_player() and + placer:get_player_control().sneak) then + return def.on_rightclick(under, node, placer, itemstack, + pointed_thing) or itemstack + end + if pointed_thing.type ~= "node" then + return itemstack + end + + local pos = pointed_thing.under + node = minetest.get_node(pos) + + if not node or node.name == "ignore" then + return itemstack + end + + local ndef = minetest.registered_nodes[node.name] + if not ndef then + return itemstack + end + + local on_key_use = ndef.on_key_use + if on_key_use then + on_key_use(pos, placer) + end + + return nil + end +}) diff --git a/mods/keys/init.lua b/mods/keys/init.lua new file mode 100644 index 00000000..6c2ed825 --- /dev/null +++ b/mods/keys/init.lua @@ -0,0 +1,6 @@ +-- Minetest mod: keys +local keys_path = minetest.get_modpath("keys") + +dofile(keys_path.."/craftitems.lua") +dofile(keys_path.."/crafting.lua") +dofile(keys_path.."/aliases.lua") diff --git a/mods/keys/license.txt b/mods/keys/license.txt new file mode 100644 index 00000000..95f02ef9 --- /dev/null +++ b/mods/keys/license.txt @@ -0,0 +1,52 @@ +License of source code +---------------------- + +GNU Lesser General Public License, version 2.1 +Copyright (C) 2011-2018 celeron55, Perttu Ahola +Copyright (C) 2011-2018 Various Minetest developers and contributors + +This program is free software; you can redistribute it and/or modify it under the terms +of the GNU Lesser General Public License as published by the Free Software Foundation; +either version 2.1 of the License, or (at your option) any later version. + +This program 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 Lesser General Public License for more details: +https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + + +Licenses of media (textures, models and sounds) +----------------------------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2010-2018: + + Gambit + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/keys/locale/keys.de.tr b/mods/keys/locale/keys.de.tr new file mode 100644 index 00000000..499a6ba7 --- /dev/null +++ b/mods/keys/locale/keys.de.tr @@ -0,0 +1,5 @@ +# textdomain: keys + +Key=Schlüssel +Key to @1's @2=Schlüssel für @2 von @1 +Skeleton Key=Skelettschlüssel diff --git a/mods/keys/locale/keys.eo.tr b/mods/keys/locale/keys.eo.tr new file mode 100644 index 00000000..e73f6c4e --- /dev/null +++ b/mods/keys/locale/keys.eo.tr @@ -0,0 +1,5 @@ +# textdomain: keys + +Key=Ŝlosilo +Key to @1's @2=Ŝlosilo por la @2 de @1 +Skeleton Key=Skeleta Ŝlosilo diff --git a/mods/keys/locale/keys.es.tr b/mods/keys/locale/keys.es.tr new file mode 100644 index 00000000..e408c32a --- /dev/null +++ b/mods/keys/locale/keys.es.tr @@ -0,0 +1,5 @@ +# textdomain: keys + +Key=Llave +Key to @1's @2=Llave para @2 de @1 +Skeleton Key=Llave esqueleto diff --git a/mods/keys/locale/keys.fr.tr b/mods/keys/locale/keys.fr.tr new file mode 100644 index 00000000..b1b9e6a8 --- /dev/null +++ b/mods/keys/locale/keys.fr.tr @@ -0,0 +1,5 @@ +# textdomain: keys + +Key=Clé +Key to @1's @2=Clé pour @2 de @1 +Skeleton Key=Squelette diff --git a/mods/keys/locale/keys.id.tr b/mods/keys/locale/keys.id.tr new file mode 100644 index 00000000..58f8fc55 --- /dev/null +++ b/mods/keys/locale/keys.id.tr @@ -0,0 +1,5 @@ +# textdomain: keys + +Key=Kunci +Key to @1's @2=Kunci @2 milik @1 +Skeleton Key=Kunci Induk diff --git a/mods/keys/locale/keys.it.tr b/mods/keys/locale/keys.it.tr new file mode 100644 index 00000000..ed7bb312 --- /dev/null +++ b/mods/keys/locale/keys.it.tr @@ -0,0 +1,5 @@ +# textdomain: keys + +Key=Chiave +Key to @1's @2=Chiave per @2 di @1 +Skeleton Key=Chiave dello Scheletro diff --git a/mods/keys/locale/keys.ja.tr b/mods/keys/locale/keys.ja.tr new file mode 100644 index 00000000..b356178a --- /dev/null +++ b/mods/keys/locale/keys.ja.tr @@ -0,0 +1,5 @@ +# textdomain: keys + +Key=鍵 +Key to @1's @2=@1の@2への鍵 +Skeleton Key=スケルトンの鍵 diff --git a/mods/keys/locale/keys.jbo.tr b/mods/keys/locale/keys.jbo.tr new file mode 100644 index 00000000..bd12f09b --- /dev/null +++ b/mods/keys/locale/keys.jbo.tr @@ -0,0 +1,5 @@ +# textdomain: keys + +Key=lo ckiku +Key to @1's @2=lo ckiku be @2 po la'o zo'i.@1.zo'i +Skeleton Key=lo greku ckiku diff --git a/mods/keys/locale/keys.ms.tr b/mods/keys/locale/keys.ms.tr new file mode 100644 index 00000000..58f8fc55 --- /dev/null +++ b/mods/keys/locale/keys.ms.tr @@ -0,0 +1,5 @@ +# textdomain: keys + +Key=Kunci +Key to @1's @2=Kunci @2 milik @1 +Skeleton Key=Kunci Induk diff --git a/mods/keys/locale/keys.pl.tr b/mods/keys/locale/keys.pl.tr new file mode 100644 index 00000000..864d8a94 --- /dev/null +++ b/mods/keys/locale/keys.pl.tr @@ -0,0 +1,5 @@ +# textdomain: keys + +Key=Klucz +Key to @1's @2=Klucz do @2 gracza @1 +Skeleton Key=Szkieletowy klucz diff --git a/mods/keys/locale/keys.pt_BR.tr b/mods/keys/locale/keys.pt_BR.tr new file mode 100644 index 00000000..ef9ca1ee --- /dev/null +++ b/mods/keys/locale/keys.pt_BR.tr @@ -0,0 +1,5 @@ +# textdomain: keys + +Key=Chave +Key to @1's @2=Chave para @2 de @1 +Skeleton Key=Chave de Mestra diff --git a/mods/keys/locale/keys.ru.tr b/mods/keys/locale/keys.ru.tr new file mode 100644 index 00000000..00b4e097 --- /dev/null +++ b/mods/keys/locale/keys.ru.tr @@ -0,0 +1,5 @@ +# textdomain: keys + +Key=Ключ +Key to @1's @2=Ключ к @2 от @1 +Skeleton Key=Ключ Скелета diff --git a/mods/keys/locale/keys.sv.tr b/mods/keys/locale/keys.sv.tr new file mode 100644 index 00000000..f666eb3d --- /dev/null +++ b/mods/keys/locale/keys.sv.tr @@ -0,0 +1,5 @@ +# textdomain: keys + +Key=Nyckel +Key to @1's @2=Nyckel till @1s @2 +Skeleton Key=Skelettnyckel diff --git a/mods/keys/locale/keys.uk.tr b/mods/keys/locale/keys.uk.tr new file mode 100644 index 00000000..832d1c70 --- /dev/null +++ b/mods/keys/locale/keys.uk.tr @@ -0,0 +1,4 @@ +# textdomain: keys +Key=Ключ +Key to @1's @2=Ключ до @2 від @1 +Skeleton Key=Ключ Кістяка diff --git a/mods/keys/locale/keys.zh_CN.tr b/mods/keys/locale/keys.zh_CN.tr new file mode 100644 index 00000000..57f632ae --- /dev/null +++ b/mods/keys/locale/keys.zh_CN.tr @@ -0,0 +1,5 @@ +# textdomain: keys + +Key=钥匙 +Key to @1's @2=@1的@2的钥匙 +Skeleton Key=万能钥匙 diff --git a/mods/keys/locale/keys.zh_TW.tr b/mods/keys/locale/keys.zh_TW.tr new file mode 100644 index 00000000..c97879ca --- /dev/null +++ b/mods/keys/locale/keys.zh_TW.tr @@ -0,0 +1,5 @@ +# textdomain: keys + +Key=鑰匙 +Key to @1's @2=@1的@2的鑰匙 +Skeleton Key=萬能鑰匙 diff --git a/mods/keys/locale/template.txt b/mods/keys/locale/template.txt new file mode 100644 index 00000000..9fbf62fd --- /dev/null +++ b/mods/keys/locale/template.txt @@ -0,0 +1,5 @@ +# textdomain: keys + +Key= +Key to @1's @2= +Skeleton Key= diff --git a/mods/keys/mod.conf b/mods/keys/mod.conf new file mode 100644 index 00000000..8b8d6693 --- /dev/null +++ b/mods/keys/mod.conf @@ -0,0 +1,3 @@ +name = keys +description = Minetest Game mod: keys +depends = default diff --git a/mods/keys/textures/keys_key.png b/mods/keys/textures/keys_key.png new file mode 100644 index 00000000..d39d9afa Binary files /dev/null and b/mods/keys/textures/keys_key.png differ diff --git a/mods/keys/textures/keys_key_skeleton.png b/mods/keys/textures/keys_key_skeleton.png new file mode 100644 index 00000000..f60cacee Binary files /dev/null and b/mods/keys/textures/keys_key_skeleton.png differ diff --git a/mods/legacy/textures/apple_iron.png b/mods/legacy/textures/apple_iron.png deleted file mode 100644 index 2dffdf01..00000000 Binary files a/mods/legacy/textures/apple_iron.png and /dev/null differ diff --git a/mods/legacy/textures/cooked_rat.png b/mods/legacy/textures/cooked_rat.png deleted file mode 100644 index daad3be0..00000000 Binary files a/mods/legacy/textures/cooked_rat.png and /dev/null differ diff --git a/mods/legacy/textures/dungeon_master.png b/mods/legacy/textures/dungeon_master.png deleted file mode 100644 index 3457c822..00000000 Binary files a/mods/legacy/textures/dungeon_master.png and /dev/null differ diff --git a/mods/legacy/textures/fireball.png b/mods/legacy/textures/fireball.png deleted file mode 100644 index 52314285..00000000 Binary files a/mods/legacy/textures/fireball.png and /dev/null differ diff --git a/mods/legacy/textures/firefly.png b/mods/legacy/textures/firefly.png deleted file mode 100644 index 40df7fa1..00000000 Binary files a/mods/legacy/textures/firefly.png and /dev/null differ diff --git a/mods/legacy/textures/oerkki1.png b/mods/legacy/textures/oerkki1.png deleted file mode 100644 index 33cbac9e..00000000 Binary files a/mods/legacy/textures/oerkki1.png and /dev/null differ diff --git a/mods/legacy/textures/oerkki1_damaged.png b/mods/legacy/textures/oerkki1_damaged.png deleted file mode 100644 index 9b777387..00000000 Binary files a/mods/legacy/textures/oerkki1_damaged.png and /dev/null differ diff --git a/mods/legacy/textures/rat.png b/mods/legacy/textures/rat.png deleted file mode 100644 index d1a0e2ae..00000000 Binary files a/mods/legacy/textures/rat.png and /dev/null differ diff --git a/mods/loud_walking b/mods/loud_walking new file mode 160000 index 00000000..deacbf14 --- /dev/null +++ b/mods/loud_walking @@ -0,0 +1 @@ +Subproject commit deacbf14c88c4da2aba998ab53a582de2280796e diff --git a/mods/magical_potion b/mods/magical_potion new file mode 160000 index 00000000..8c6d3efd --- /dev/null +++ b/mods/magical_potion @@ -0,0 +1 @@ +Subproject commit 8c6d3efd65b10704778e0f15d1ab7df00335933c diff --git a/mods/map/README.txt b/mods/map/README.txt new file mode 100644 index 00000000..068439a9 --- /dev/null +++ b/mods/map/README.txt @@ -0,0 +1,44 @@ +Minetest Game mod: map +====================== +See license.txt for license information. + +Authors of source code +---------------------- +paramat (MIT) + +Authors of media (textures) +--------------------------- +TumeniNodes (CC BY-SA 3.0): + map_mapping_kit.png (map) + +paramat (CC BY-SA 3.0): + map_mapping_kit.png (compass and pen) + +Crafting +-------- +map:mapping_kit + +default:glass G +default:paper P +group:stick S +default:steel_ingot I +group:wood W +dye:black D + +GPS +IPI +WPD + +Usage +----- +In survival mode, use of the minimap requires the mapping kit item in your +inventory. It can take up to 5 seconds for adding to or removal from inventory +to have an effect, however to instantly allow the use of the minimap 'use' +(leftclick) the item. +Minimap radar mode is always disallowed in survival mode. + +Minimap and minimap radar mode are automatically allowed in creative mode and +for any player with the 'creative' privilege. + +The 'map.update_hud_flags()' function is global so can be redefined by a mod for +alternative behaviour. diff --git a/mods/map/init.lua b/mods/map/init.lua new file mode 100644 index 00000000..b91e528d --- /dev/null +++ b/mods/map/init.lua @@ -0,0 +1,80 @@ +-- map/init.lua + +-- Mod global namespace + +map = {} + + +-- Load support for MT game translation. +local S = minetest.get_translator("map") + + +-- Update HUD flags +-- Global to allow overriding + +function map.update_hud_flags(player) + local creative_enabled = minetest.is_creative_enabled(player:get_player_name()) + + local minimap_enabled = creative_enabled or + player:get_inventory():contains_item("main", "map:mapping_kit") + local radar_enabled = creative_enabled + + player:hud_set_flags({ + minimap = minimap_enabled, + minimap_radar = radar_enabled + }) +end + + +-- Set HUD flags 'on joinplayer' + +minetest.register_on_joinplayer(function(player) + map.update_hud_flags(player) +end) + + +-- Cyclic update of HUD flags + +local function cyclic_update() + for _, player in ipairs(minetest.get_connected_players()) do + map.update_hud_flags(player) + end + minetest.after(5.3, cyclic_update) +end + +minetest.after(5.3, cyclic_update) + + +-- Mapping kit item + +minetest.register_craftitem("map:mapping_kit", { + description = S("Mapping Kit") .. "\n" .. S("Use with 'Minimap' key"), + inventory_image = "map_mapping_kit.png", + stack_max = 1, + groups = {flammable = 3, tool = 1}, + + on_use = function(itemstack, user, pointed_thing) + map.update_hud_flags(user) + end, +}) + + +-- Crafting + +minetest.register_craft({ + output = "map:mapping_kit", + recipe = { + {"default:glass", "default:paper", "group:stick"}, + {"default:steel_ingot", "default:paper", "default:steel_ingot"}, + {"group:wood", "default:paper", "dye:black"}, + } +}) + + +-- Fuel + +minetest.register_craft({ + type = "fuel", + recipe = "map:mapping_kit", + burntime = 5, +}) diff --git a/mods/map/license.txt b/mods/map/license.txt new file mode 100644 index 00000000..a89f59c4 --- /dev/null +++ b/mods/map/license.txt @@ -0,0 +1,60 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2017 paramat + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2017 TumeniNodes +Copyright (C) 2017 paramat + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/map/locale/map.de.tr b/mods/map/locale/map.de.tr new file mode 100644 index 00000000..1a784abf --- /dev/null +++ b/mods/map/locale/map.de.tr @@ -0,0 +1,3 @@ +# textdomain: map +Mapping Kit=Kartenset +Use with 'Minimap' key=Mit „Karte an/aus“-Taste benutzen diff --git a/mods/map/locale/map.eo.tr b/mods/map/locale/map.eo.tr new file mode 100644 index 00000000..9225cfd7 --- /dev/null +++ b/mods/map/locale/map.eo.tr @@ -0,0 +1,3 @@ +# textdomain: map +Mapping Kit=Mapa Ilaro +Use with 'Minimap' key=Uzi per 'Minimapo' klavo diff --git a/mods/map/locale/map.es.tr b/mods/map/locale/map.es.tr new file mode 100644 index 00000000..0faed529 --- /dev/null +++ b/mods/map/locale/map.es.tr @@ -0,0 +1,3 @@ +# textdomain: map +Mapping Kit=Kit de cartografía +Use with 'Minimap' key=Usar con la tecla 'Minimapa' diff --git a/mods/map/locale/map.fr.tr b/mods/map/locale/map.fr.tr new file mode 100644 index 00000000..29f8e208 --- /dev/null +++ b/mods/map/locale/map.fr.tr @@ -0,0 +1,3 @@ +# textdomain: map +Mapping Kit=Kit de carthographie +Use with 'Minimap' key=Utiliser avec le bouton « Minimap » diff --git a/mods/map/locale/map.id.tr b/mods/map/locale/map.id.tr new file mode 100644 index 00000000..cb31d0f7 --- /dev/null +++ b/mods/map/locale/map.id.tr @@ -0,0 +1,3 @@ +# textdomain: map +Mapping Kit=Alat Pemetaan +Use with 'Minimap' key=Pakai dengan tombol 'Peta Mini' diff --git a/mods/map/locale/map.it.tr b/mods/map/locale/map.it.tr new file mode 100644 index 00000000..59885e98 --- /dev/null +++ b/mods/map/locale/map.it.tr @@ -0,0 +1,3 @@ +# textdomain: map +Mapping Kit=Kit di mappatura +Use with 'Minimap' key=Usalo col tasto 'Minimappa' diff --git a/mods/map/locale/map.ja.tr b/mods/map/locale/map.ja.tr new file mode 100644 index 00000000..7205f244 --- /dev/null +++ b/mods/map/locale/map.ja.tr @@ -0,0 +1,3 @@ +# textdomain: map +Mapping Kit=地図キット +Use with 'Minimap' key=ミニマップキーで使います diff --git a/mods/map/locale/map.jbo.tr b/mods/map/locale/map.jbo.tr new file mode 100644 index 00000000..8f37c188 --- /dev/null +++ b/mods/map/locale/map.jbo.tr @@ -0,0 +1,3 @@ +# textdomain: map +Mapping Kit=lo cartu ke sidju bakfu +Use with 'Minimap' key=.i tu'a le cmalu cartu batke cu tadji lo nu pilno diff --git a/mods/map/locale/map.ms.tr b/mods/map/locale/map.ms.tr new file mode 100644 index 00000000..8564f910 --- /dev/null +++ b/mods/map/locale/map.ms.tr @@ -0,0 +1,3 @@ +# textdomain: map +Mapping Kit=Alat Pemetaan +Use with 'Minimap' key=Guna dengan kekunci 'Peta Mini' diff --git a/mods/map/locale/map.pl.tr b/mods/map/locale/map.pl.tr new file mode 100644 index 00000000..d665de0c --- /dev/null +++ b/mods/map/locale/map.pl.tr @@ -0,0 +1,3 @@ +# textdomain: map +Mapping Kit=Zestaw kartograficzny +Use with 'Minimap' key=Naciśnij 'Minimap' aby użyć diff --git a/mods/map/locale/map.pt_BR.tr b/mods/map/locale/map.pt_BR.tr new file mode 100644 index 00000000..0095c395 --- /dev/null +++ b/mods/map/locale/map.pt_BR.tr @@ -0,0 +1,3 @@ +# textdomain: map +Mapping Kit=Kit de mapeamento +Use with 'Minimap' key=Use com a tecla do 'mini-mapa' diff --git a/mods/map/locale/map.ru.tr b/mods/map/locale/map.ru.tr new file mode 100644 index 00000000..73120b62 --- /dev/null +++ b/mods/map/locale/map.ru.tr @@ -0,0 +1,3 @@ +# textdomain: map +Mapping Kit=Картографический комплект +Use with 'Minimap' key=Используйте с ключом 'Minimap' diff --git a/mods/map/locale/map.sk.tr b/mods/map/locale/map.sk.tr new file mode 100644 index 00000000..2016c85f --- /dev/null +++ b/mods/map/locale/map.sk.tr @@ -0,0 +1,3 @@ +# textdomain: map +Mapping Kit=Kartografická súprava +Use with 'Minimap' key=Použi klávesou 'Prepni minimpu' diff --git a/mods/map/locale/map.sv.tr b/mods/map/locale/map.sv.tr new file mode 100644 index 00000000..bc79d44e --- /dev/null +++ b/mods/map/locale/map.sv.tr @@ -0,0 +1,3 @@ +# textdomain: map +Mapping Kit=Kartläggningssats +Use with 'Minimap' key=Använd med 'Minimap'-tangent diff --git a/mods/map/locale/map.uk.tr b/mods/map/locale/map.uk.tr new file mode 100644 index 00000000..3f58b781 --- /dev/null +++ b/mods/map/locale/map.uk.tr @@ -0,0 +1,3 @@ +# textdomain: map +Mapping Kit=Картографічний Комплект +Use with 'Minimap' key=Використовуйте за допомогою ключа 'Minimap' diff --git a/mods/map/locale/map.zh_CN.tr b/mods/map/locale/map.zh_CN.tr new file mode 100644 index 00000000..cec95bb7 --- /dev/null +++ b/mods/map/locale/map.zh_CN.tr @@ -0,0 +1,3 @@ +# textdomain: map +Mapping Kit=地图绘制工具包 +Use with 'Minimap' key=与“迷你地图”键一起使用 diff --git a/mods/map/locale/map.zh_TW.tr b/mods/map/locale/map.zh_TW.tr new file mode 100644 index 00000000..a0981245 --- /dev/null +++ b/mods/map/locale/map.zh_TW.tr @@ -0,0 +1,3 @@ +# textdomain: map +Mapping Kit=地圖繪製工具包 +Use with 'Minimap' key=與“迷你地圖”鍵一起使用 diff --git a/mods/map/locale/template.txt b/mods/map/locale/template.txt new file mode 100644 index 00000000..2dbe2eea --- /dev/null +++ b/mods/map/locale/template.txt @@ -0,0 +1,3 @@ +# textdomain: map +Mapping Kit= +Use with 'Minimap' key= diff --git a/mods/map/mod.conf b/mods/map/mod.conf new file mode 100644 index 00000000..bb045c77 --- /dev/null +++ b/mods/map/mod.conf @@ -0,0 +1,3 @@ +name = map +description = Minetest Game mod: map +depends = default, dye diff --git a/mods/map/textures/map_mapping_kit.png b/mods/map/textures/map_mapping_kit.png new file mode 100644 index 00000000..015b878a Binary files /dev/null and b/mods/map/textures/map_mapping_kit.png differ diff --git a/mods/maptools b/mods/maptools new file mode 160000 index 00000000..2100ca04 --- /dev/null +++ b/mods/maptools @@ -0,0 +1 @@ +Subproject commit 2100ca04b1b29529c72cbaf26e994579b17936fc diff --git a/mods/markers b/mods/markers new file mode 160000 index 00000000..ad3c999f --- /dev/null +++ b/mods/markers @@ -0,0 +1 @@ +Subproject commit ad3c999f64ebc4023bd85635a5f6169043d6faff diff --git a/mods/marsdoors/craft.lua b/mods/marsdoors/craft.lua new file mode 100644 index 00000000..9aaa35d1 --- /dev/null +++ b/mods/marsdoors/craft.lua @@ -0,0 +1,62 @@ + +minetest.register_craft({ + output = "marsdoors:shieldblock 4", + recipe = { + {"default:steel_ingot","default:steel_ingot","default:iron_lump"}, + {"default:steel_ingot","default:steel_ingot", ""}, + } +}) + +minetest.register_craft({ + output = "marsdoors:warning 2", + recipe = { + {"dye:black","default:steel_ingot",""}, + {"default:steel_ingot","dye:yellow", ""}, + } +}) + +minetest.register_craft({ + output = "marsdoors:steelwallblock 8", + recipe = { + {"default:steel_ingot","default:steel_ingot","default:steel_ingot"}, + {"default:steel_ingot","", "default:steel_ingot"}, + {"default:steel_ingot","default:steel_ingot","default:steel_ingot"}, + } +}) + +minetest.register_craft({ + output = "marsdoors:trapdoor_1 2", + recipe = { + {"marsdoors:warning","marsdoors:shieldblock",""}, + {"marsdoors:warning","marsdoors:shieldblock", ""}, + } +}) + +minetest.register_craft({ + output = "marsdoors:door2_1 2", + recipe = { + {"marsdoors:warning","marsdoors:shieldblock",""}, + {"marsdoors:warning","marsdoors:shieldblock", ""}, + {"marsdoors:warning","marsdoors:shieldblock", ""}, + } +}) + +minetest.register_craft({ + output = "marsdoors:door1_closed", + recipe = { + {"marsdoors:shieldblock","marsdoors:warning","marsdoors:shieldblock"}, + {"marsdoors:shieldblock","marsdoors:warning","marsdoors:shieldblock"}, + {"marsdoors:shieldblock","marsdoors:warning","marsdoors:shieldblock"}, + } +}) + + +minetest.register_craft({ + output = "marsdoors:clight 3", + recipe = {{"default:glass","default:glass","default:glass"}, + {"","default:mese_crystal_fragment",""}}}) + + + + + diff --git a/mods/marsdoors/depends.txt b/mods/marsdoors/depends.txt new file mode 100644 index 00000000..5c229e1d --- /dev/null +++ b/mods/marsdoors/depends.txt @@ -0,0 +1,4 @@ +default +stairs +moreblocks +dye ? diff --git a/mods/marsdoors/functions.lua b/mods/marsdoors/functions.lua new file mode 100644 index 00000000..986a5c50 --- /dev/null +++ b/mods/marsdoors/functions.lua @@ -0,0 +1,3 @@ +function marsdoors.replacenode(pos) + minetest.set_node(pos, {name = "air"}) +end diff --git a/mods/marsdoors/init.lua b/mods/marsdoors/init.lua new file mode 100644 index 00000000..d3ed6108 --- /dev/null +++ b/mods/marsdoors/init.lua @@ -0,0 +1,7 @@ + + +--dofile(minetest.get_modpath("marsdoors") .. "/functions.lua") +dofile(minetest.get_modpath("marsdoors") .. "/nodes.lua") +dofile(minetest.get_modpath("marsdoors") .. "/craft.lua") +dofile(minetest.get_modpath("marsdoors") .. "/moreblocks.lua") + diff --git a/mods/marsdoors/models/marsdoors_crystal.obj b/mods/marsdoors/models/marsdoors_crystal.obj new file mode 100644 index 00000000..78eced3e --- /dev/null +++ b/mods/marsdoors/models/marsdoors_crystal.obj @@ -0,0 +1,549 @@ +# Blender v2.78 (sub 0) OBJ File: 'pollution_crystals.blend' +# www.blender.org +mtllib pollution_crystals.mtl +o Cube_Cube.001 +v 0.023448 1.441446 0.586645 +v 0.023448 2.541710 0.586645 +v 0.023448 1.441446 -0.513619 +v 0.023448 2.541710 -0.513619 +v 1.123712 1.441446 0.586645 +v 1.123712 2.541710 0.586645 +v 1.123712 1.441446 -0.513619 +v 1.123712 2.541710 -0.513619 +v 0.518567 3.414985 0.091526 +v 0.518567 3.414985 -0.018500 +v 0.628593 3.414985 0.091526 +v 0.628593 3.414985 -0.018500 +v 0.358072 -3.178070 0.252021 +v 0.358072 -3.178070 -0.178995 +v 0.789088 -3.178070 0.252021 +v 0.789088 -3.178070 -0.178995 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 0.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 0.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.9974 -0.0722 0.0000 +vn 0.0000 0.4932 -0.8699 +vn 0.0000 1.0000 0.0000 +vn 0.8699 0.4932 0.0000 +vn -0.8699 0.4932 0.0000 +vn 0.0000 0.4932 0.8699 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0722 0.9974 +vn 0.0000 -0.0722 -0.9974 +vn -0.9974 -0.0722 0.0000 +usemtl Material.002 +s off +f 1/1/1 2/2/1 4/3/1 3/4/1 +f 3/5/2 4/6/2 8/7/2 7/8/2 +f 7/9/3 8/10/3 6/11/3 5/12/3 +f 5/13/4 6/14/4 2/15/4 1/16/4 +f 7/9/5 5/17/5 15/18/5 16/19/5 +f 8/20/6 4/6/6 10/21/6 12/22/6 +f 12/23/7 10/24/7 9/25/7 11/26/7 +f 6/27/8 8/10/8 12/28/8 11/26/8 +f 4/29/9 2/2/9 9/25/9 10/30/9 +f 2/31/10 6/14/10 11/32/10 9/33/10 +f 14/34/11 16/35/11 15/18/11 13/36/11 +f 5/13/12 1/37/12 13/38/12 15/39/12 +f 3/5/13 7/40/13 16/41/13 14/42/13 +f 1/1/14 3/43/14 14/44/14 13/36/14 +o Cube.001_Cube.000 +v -1.894439 2.054051 0.079474 +v -2.195457 3.333790 -0.070682 +v -1.947618 1.863163 -1.440799 +v -2.248636 3.142902 -1.590955 +v -0.288794 2.419751 -0.022609 +v -0.589812 3.699489 -0.172765 +v -0.341973 2.228863 -1.542881 +v -0.642991 3.508601 -1.693038 +v -1.735764 4.428179 -0.919921 +v -1.741082 4.409090 -1.071949 +v -1.575200 4.464748 -0.930129 +v -1.580517 4.445660 -1.082157 +v -0.158446 -3.265836 0.216506 +v -0.179278 -3.340614 -0.379043 +v 0.470547 -3.122577 0.176517 +v 0.449715 -3.197355 -0.419033 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 0.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 0.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vn -0.9732 -0.2216 0.0619 +vn -0.0347 -0.1245 -0.9916 +vn 0.9732 0.2216 -0.0619 +vn 0.0347 0.1245 0.9916 +vn 0.9897 0.1337 -0.0514 +vn -0.1539 0.4269 -0.8911 +vn -0.2275 0.9671 -0.1135 +vn 0.6633 0.7393 -0.1160 +vn -0.9260 0.3773 -0.0150 +vn -0.0959 0.6351 0.7665 +vn 0.2275 -0.9671 0.1135 +vn 0.0536 0.0432 0.9976 +vn -0.0155 -0.2050 -0.9786 +vn -0.9488 -0.3077 0.0718 +usemtl Material.000 +s off +f 17/45/15 18/46/15 20/47/15 19/48/15 +f 19/49/16 20/50/16 24/51/16 23/52/16 +f 23/53/17 24/54/17 22/55/17 21/56/17 +f 21/57/18 22/58/18 18/59/18 17/60/18 +f 23/53/19 21/61/19 31/62/19 32/63/19 +f 24/64/20 20/50/20 26/65/20 28/66/20 +f 28/67/21 26/68/21 25/69/21 27/70/21 +f 22/71/22 24/54/22 28/72/22 27/70/22 +f 20/73/23 18/46/23 25/69/23 26/74/23 +f 18/75/24 22/58/24 27/76/24 25/77/24 +f 30/78/25 32/79/25 31/62/25 29/80/25 +f 21/57/26 17/81/26 29/82/26 31/83/26 +f 19/49/27 23/84/27 32/85/27 30/86/27 +f 17/45/28 19/87/28 30/88/28 29/80/28 +o Cube.002 +v 1.019832 0.351057 -0.502994 +v 1.367006 0.919804 -0.732864 +v 0.504731 0.273778 -1.472158 +v 0.851905 0.842524 -1.702028 +v 1.827034 -0.294273 -0.880556 +v 2.174208 0.274473 -1.110426 +v 1.311933 -0.371553 -1.849720 +v 1.659107 0.197194 -2.079590 +v 1.774001 1.046041 -1.521338 +v 1.722491 1.038313 -1.618254 +v 1.854721 0.981508 -1.559094 +v 1.803211 0.973780 -1.656010 +v -0.348957 -2.256623 0.052547 +v -0.550742 -2.286896 -0.327111 +v -0.032745 -2.509424 -0.095358 +v -0.234530 -2.539697 -0.475017 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 0.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 0.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vn -0.7336 0.5865 0.3432 +vn -0.4682 -0.0702 -0.8808 +vn 0.7336 -0.5865 -0.3432 +vn 0.4682 0.0702 0.8808 +vn 0.6737 -0.6735 -0.3043 +vn -0.0242 0.4822 -0.8758 +vn 0.4925 0.8069 -0.3261 +vn 0.8758 0.0955 -0.4731 +vn -0.2230 0.9740 0.0408 +vn 0.6770 0.5873 0.4435 +vn -0.4925 -0.8069 0.3261 +vn 0.4099 -0.0209 0.9119 +vn -0.5205 -0.1604 -0.8386 +vn -0.7843 0.4922 0.3776 +usemtl Material.001 +s off +f 33/89/29 34/90/29 36/91/29 35/92/29 +f 35/93/30 36/94/30 40/95/30 39/96/30 +f 39/97/31 40/98/31 38/99/31 37/100/31 +f 37/101/32 38/102/32 34/103/32 33/104/32 +f 39/97/33 37/105/33 47/106/33 48/107/33 +f 40/108/34 36/94/34 42/109/34 44/110/34 +f 44/111/35 42/112/35 41/113/35 43/114/35 +f 38/115/36 40/98/36 44/116/36 43/114/36 +f 36/117/37 34/90/37 41/113/37 42/118/37 +f 34/119/38 38/102/38 43/120/38 41/121/38 +f 46/122/39 48/123/39 47/106/39 45/124/39 +f 37/101/40 33/125/40 45/126/40 47/127/40 +f 35/93/41 39/128/41 48/129/41 46/130/41 +f 33/89/42 35/131/42 46/132/42 45/124/42 +o Cube.003 +v 2.253079 3.729011 -0.132745 +v 2.700144 5.055216 -0.203345 +v 2.198353 3.710644 -0.824298 +v 2.645419 5.036849 -0.894898 +v 3.065754 3.452025 -0.189699 +v 3.512820 4.778230 -0.260299 +v 3.011029 3.433659 -0.881253 +v 3.458094 4.759863 -0.951853 +v 3.396056 5.974911 -0.596208 +v 3.390583 5.973074 -0.665363 +v 3.477323 5.947213 -0.601903 +v 3.471851 5.945376 -0.671059 +v 0.606566 -1.928959 -0.063972 +v 0.585128 -1.936154 -0.334880 +v 0.924922 -2.037465 -0.086283 +v 0.903484 -2.044660 -0.357192 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 0.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 0.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vn -0.9445 0.3219 0.0662 +vn -0.0789 -0.0265 -0.9965 +vn 0.9445 -0.3219 -0.0662 +vn 0.0789 0.0265 0.9965 +vn 0.9293 -0.3636 -0.0639 +vn 0.0103 0.2304 -0.9731 +vn 0.3190 0.9464 -0.0504 +vn 0.9968 0.0072 -0.0791 +vn -0.7871 0.6152 0.0459 +vn 0.1622 0.2813 0.9458 +vn -0.3190 -0.9464 0.0504 +vn 0.0674 -0.0075 0.9977 +vn -0.0902 -0.0604 -0.9941 +vn -0.9577 0.2795 0.0684 +usemtl Material.003 +s off +f 49/133/43 50/134/43 52/135/43 51/136/43 +f 51/137/44 52/138/44 56/139/44 55/140/44 +f 55/141/45 56/142/45 54/143/45 53/144/45 +f 53/145/46 54/146/46 50/147/46 49/148/46 +f 55/141/47 53/149/47 63/150/47 64/151/47 +f 56/152/48 52/138/48 58/153/48 60/154/48 +f 60/155/49 58/156/49 57/157/49 59/158/49 +f 54/159/50 56/142/50 60/160/50 59/158/50 +f 52/161/51 50/134/51 57/157/51 58/162/51 +f 50/163/52 54/146/52 59/164/52 57/165/52 +f 62/166/53 64/167/53 63/150/53 61/168/53 +f 53/145/54 49/169/54 61/170/54 63/171/54 +f 51/137/55 55/172/55 64/173/55 62/174/55 +f 49/133/56 51/175/56 62/176/56 61/168/56 +o Cube.004 +v -1.694765 2.986474 3.834678 +v -1.899361 4.593619 4.538314 +v -1.968595 3.940166 1.576767 +v -2.173192 5.547312 2.280403 +v 0.611890 3.337655 3.703268 +v 0.407293 4.944800 4.406904 +v 0.338060 4.291347 1.445356 +v 0.133463 5.898493 2.148992 +v -1.146978 6.456398 4.021592 +v -1.174361 6.551767 3.795801 +v -0.916312 6.491516 4.008451 +v -0.943695 6.586885 3.782660 +v -0.217511 -3.364362 0.153758 +v -0.324781 -2.990764 -0.730752 +v 0.686095 -3.226791 0.102280 +v 0.578825 -2.853193 -0.782231 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 0.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 0.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vn -0.9870 -0.1503 0.0562 +vn -0.1110 0.3867 -0.9155 +vn 0.9870 0.1503 -0.0562 +vn 0.1110 -0.3867 0.9155 +vn 0.9936 0.0628 -0.0940 +vn -0.1589 0.8679 -0.4705 +vn -0.1158 0.9099 0.3984 +vn 0.7201 0.6662 0.1941 +vn -0.8591 0.4258 0.2840 +vn 0.0152 0.2616 0.9651 +vn 0.1158 -0.9099 -0.3984 +vn 0.1221 -0.4763 0.8708 +vn -0.0988 0.2932 -0.9509 +vn -0.9715 -0.2364 0.0180 +usemtl Material.004 +s off +f 65/177/57 66/178/57 68/179/57 67/180/57 +f 67/181/58 68/182/58 72/183/58 71/184/58 +f 71/185/59 72/186/59 70/187/59 69/188/59 +f 69/189/60 70/190/60 66/191/60 65/192/60 +f 71/185/61 69/193/61 79/194/61 80/195/61 +f 72/196/62 68/182/62 74/197/62 76/198/62 +f 76/199/63 74/200/63 73/201/63 75/202/63 +f 70/203/64 72/186/64 76/204/64 75/202/64 +f 68/205/65 66/178/65 73/201/65 74/206/65 +f 66/207/66 70/190/66 75/208/66 73/209/66 +f 78/210/67 80/211/67 79/194/67 77/212/67 +f 69/189/68 65/213/68 77/214/68 79/215/68 +f 67/181/69 71/216/69 80/217/69 78/218/69 +f 65/177/70 67/219/70 78/220/70 77/212/70 +o Cube.005 +v -0.943184 0.837558 -2.455390 +v -1.036841 1.439106 -3.049282 +v -0.792203 0.083860 -3.242615 +v -0.885859 0.685407 -3.836507 +v 0.139915 1.029677 -2.431600 +v 0.046259 1.631224 -3.025491 +v 0.290897 0.275978 -3.218825 +v 0.197240 0.877526 -3.812716 +v -0.555839 1.663841 -3.864197 +v -0.540741 1.588471 -3.942919 +v -0.447529 1.683053 -3.861818 +v -0.432431 1.607683 -3.940540 +v -0.174641 -1.858866 -0.194089 +v -0.115495 -2.154119 -0.502475 +v 0.249651 -1.783606 -0.184769 +v 0.308796 -2.078859 -0.493156 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 0.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 0.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vn -0.9844 -0.1746 -0.0216 +vn 0.1372 -0.6850 -0.7155 +vn 0.9844 0.1746 0.0216 +vn -0.1372 0.6850 0.7155 +vn 0.9904 0.1079 0.0867 +vn 0.0455 -0.1340 -0.9899 +vn -0.1101 0.7073 -0.6983 +vn 0.7286 0.5591 -0.3956 +vn -0.8589 0.2775 -0.4304 +vn -0.1758 0.9707 0.1639 +vn 0.1101 -0.7073 0.6983 +vn -0.1264 0.6160 0.7775 +vn 0.1469 -0.7480 -0.6472 +vn -0.9698 -0.2398 0.0436 +usemtl Material.005 +s off +f 81/221/71 82/222/71 84/223/71 83/224/71 +f 83/225/72 84/226/72 88/227/72 87/228/72 +f 87/229/73 88/230/73 86/231/73 85/232/73 +f 85/233/74 86/234/74 82/235/74 81/236/74 +f 87/229/75 85/237/75 95/238/75 96/239/75 +f 88/240/76 84/226/76 90/241/76 92/242/76 +f 92/243/77 90/244/77 89/245/77 91/246/77 +f 86/247/78 88/230/78 92/248/78 91/246/78 +f 84/249/79 82/222/79 89/245/79 90/250/79 +f 82/251/80 86/234/80 91/252/80 89/253/80 +f 94/254/81 96/255/81 95/238/81 93/256/81 +f 85/233/82 81/257/82 93/258/82 95/259/82 +f 83/225/83 87/260/83 96/261/83 94/262/83 +f 81/221/84 83/263/84 94/264/84 93/256/84 diff --git a/mods/marsdoors/models/marsdoors_door1.obj b/mods/marsdoors/models/marsdoors_door1.obj new file mode 100644 index 00000000..6383275d --- /dev/null +++ b/mods/marsdoors/models/marsdoors_door1.obj @@ -0,0 +1,910 @@ +mtllib marssurvive_door1.mtl + +g marssurvive_door1_Main-Beige1 +usemtl Beige1 +v -1.819201 0.373884 -0.382701 +v -1.496431 0.798336 0.444315 +v -1.810740 0.373884 0.447518 +v -1.504892 0.798336 -0.385905 +v -2.135331 -0.050568 0.450826 +v -4.420455 -0.262794 0.474113 +v -1.978176 -0.262794 0.449224 +v -4.420455 2.283918 0.474113 +v -2.135331 0.373884 0.450826 +v -1.821022 0.798336 0.447623 +v -1.821022 1.222788 0.447623 +v -2.135331 1.647240 0.450826 +v -2.135331 2.071692 0.450826 +v -1.978176 2.283918 0.449224 +v -1.496431 -0.475020 0.444315 +v -1.819201 -0.050568 -0.382701 +v -1.810740 -0.050568 0.447518 +v -1.504892 -0.475020 -0.385905 +v -4.428915 2.283918 -0.356106 +v -2.012056 -0.262794 -0.380736 +v -4.428915 -0.262794 -0.356106 +v -2.155975 -0.050568 -0.379269 +v -2.155975 0.373884 -0.379269 +v -1.841666 0.798336 -0.382472 +v -1.841666 1.222788 -0.382472 +v -2.155975 1.647240 -0.379269 +v -2.155975 2.071692 -0.379269 +v -1.980110 2.283918 -0.381062 +v -1.504892 0.798336 -0.385905 +v -1.496431 1.222788 0.444315 +v -1.496431 0.798336 0.444315 +v -1.504892 1.222788 -0.385905 +v -1.819201 -0.050568 -0.382701 +v -1.810740 0.373884 0.447518 +v -1.810740 -0.050568 0.447518 +v -1.819201 0.373884 -0.382701 +v -1.868137 -0.475020 -0.382203 +v -4.420455 -0.475020 0.474113 +v -4.428915 -0.475020 -0.356106 +v -1.821022 -0.475020 0.447623 +v -1.504892 -0.475020 -0.385905 +v -1.496431 -0.475020 0.444315 +v -1.819201 2.071692 -0.382701 +v -1.496431 2.496144 0.444315 +v -1.810740 2.071692 0.447518 +v -1.504892 2.496144 -0.385905 +v -4.420455 2.496144 0.474113 +v -1.804246 2.496144 -0.382854 +v -4.428915 2.496144 -0.356106 +v -1.821022 2.496144 0.447623 +v -1.496431 2.496144 0.444315 +v -1.504892 2.496144 -0.385905 +v -1.819201 1.647240 -0.382701 +v -1.810740 2.071692 0.447518 +v -1.810740 1.647240 0.447518 +v -1.819201 2.071692 -0.382701 +v -1.496431 1.222788 0.444315 +v -1.819201 1.647240 -0.382701 +v -1.810740 1.647240 0.447518 +v -1.504892 1.222788 -0.385905 +v 0.796927 1.212308 -0.382587 +v 0.796925 0.787856 0.433387 +v 0.796925 1.212308 0.433387 +v 0.796930 0.787851 -0.382587 +v 0.482600 0.363404 -0.382587 +v 0.482600 -0.061048 0.433387 +v 0.482600 0.363404 0.433387 +v 0.482600 -0.061048 -0.382587 +v 0.796930 0.787851 -0.382587 +v 0.482600 0.363404 0.433387 +v 0.796925 0.787856 0.433387 +v 0.482600 0.363404 -0.382587 +v 0.482600 -0.061048 -0.382587 +v 0.796925 -0.485500 0.433387 +v 0.482600 -0.061048 0.433387 +v 0.796925 -0.485500 -0.382587 +v 0.796925 2.485664 -0.382587 +v 0.530368 2.125715 0.433387 +v 0.796925 2.485664 0.433387 +v 0.482600 2.061212 0.433387 +v 0.482600 2.061212 -0.382587 +v 1.111250 -0.485500 -0.382587 +v 0.796925 -0.485500 0.433387 +v 0.796925 -0.485500 -0.382587 +v 1.117291 -0.485500 0.433387 +v 3.406775 -0.485500 -0.382587 +v 3.406775 -0.485500 0.433387 +v 1.117291 2.485664 0.433387 +v 0.796925 2.485664 -0.382587 +v 0.796925 2.485664 0.433387 +v 1.111250 2.485664 -0.382587 +v 3.406775 2.485664 -0.382587 +v 3.406775 2.485664 0.433387 +v 3.406775 2.305689 0.433387 +v 0.960128 -0.273274 0.433387 +v 3.406775 -0.273274 0.433387 +v 0.802966 -0.061048 0.433387 +v 0.802966 0.363404 0.433387 +v 1.117291 0.787856 0.433387 +v 1.117291 1.212308 0.433387 +v 0.802966 1.636760 0.433387 +v 0.802966 2.061212 0.433387 +v 0.984012 2.305689 0.433387 +v 0.482600 2.061212 -0.382587 +v 0.482600 1.636760 0.433387 +v 0.482600 2.061212 0.433387 +v 0.482600 1.636760 -0.382587 +v 0.482600 1.636760 -0.382587 +v 0.796925 1.212308 0.433387 +v 0.482600 1.636760 0.433387 +v 0.796927 1.212308 -0.382587 +v 0.796925 -0.061048 -0.382587 +v 3.406775 -0.273274 -0.382587 +v 0.954087 -0.273274 -0.382587 +v 3.406775 2.273438 -0.382587 +v 0.796925 0.363404 -0.382587 +v 1.111255 0.787851 -0.382587 +v 1.111252 1.212308 -0.382587 +v 0.796925 1.636760 -0.382587 +v 0.796925 2.061212 -0.382587 +v 0.954087 2.273438 -0.382587 +v -4.428915 2.496144 -0.356106 +v -4.420455 2.283918 0.474113 +v -4.420455 2.496144 0.474113 +v -4.420455 -0.262794 0.474113 +v -4.420455 -0.475020 0.474113 +v -4.428915 2.283918 -0.356106 +v -4.428915 -0.475020 -0.356106 +v -4.428915 -0.262794 -0.356106 +v 3.406775 -0.485500 -0.382587 +v 3.406775 -0.273274 0.433387 +v 3.406775 -0.485500 0.433387 +v 3.406775 2.305689 0.433387 +v 3.406775 2.485664 0.433387 +v 3.406775 2.485664 -0.382587 +v 3.406775 -0.273274 -0.382587 +v 3.406775 2.273438 -0.382587 +vn 0.803591 -0.595125 -0.008189 +vn 0.803591 -0.595125 -0.008189 +vn 0.803591 -0.595125 -0.008189 +vn 0.803591 -0.595125 -0.008189 +vn 0.010190 -0.000000 0.999948 +vn 0.010190 -0.000000 0.999948 +vn 0.010190 -0.000000 0.999948 +vn 0.010190 -0.000000 0.999948 +vn 0.010190 -0.000000 0.999948 +vn 0.010190 -0.000000 0.999948 +vn 0.010190 -0.000000 0.999948 +vn 0.010190 -0.000000 0.999948 +vn 0.010190 -0.000000 0.999948 +vn 0.010190 -0.000000 0.999948 +vn 0.803591 0.595125 -0.008189 +vn 0.803591 0.595125 -0.008189 +vn 0.803591 0.595125 -0.008189 +vn 0.803591 0.595125 -0.008189 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn 0.999948 -0.000000 -0.010190 +vn 0.999948 -0.000000 -0.010190 +vn 0.999948 -0.000000 -0.010190 +vn 0.999948 -0.000000 -0.010190 +vn 0.999948 -0.000000 -0.010190 +vn 0.999948 -0.000000 -0.010190 +vn 0.999948 -0.000000 -0.010190 +vn 0.999948 -0.000000 -0.010190 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.803591 -0.595125 -0.008189 +vn 0.803591 -0.595125 -0.008189 +vn 0.803591 -0.595125 -0.008189 +vn 0.803591 -0.595125 -0.008189 +vn -0.000000 1.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn 0.999948 -0.000000 -0.010190 +vn 0.999948 -0.000000 -0.010190 +vn 0.999948 -0.000000 -0.010190 +vn 0.999948 -0.000000 -0.010190 +vn 0.803591 0.595125 -0.008189 +vn 0.803591 0.595125 -0.008189 +vn 0.803591 0.595125 -0.008189 +vn 0.803591 0.595125 -0.008189 +vn -1.000000 -0.000003 -0.000004 +vn -1.000000 -0.000003 -0.000004 +vn -1.000000 -0.000003 -0.000004 +vn -1.000000 -0.000003 -0.000004 +vn -1.000000 0.000000 -0.000000 +vn -1.000000 0.000000 -0.000000 +vn -1.000000 0.000000 -0.000000 +vn -1.000000 0.000000 -0.000000 +vn -0.803629 0.595130 -0.000004 +vn -0.803629 0.595130 -0.000004 +vn -0.803629 0.595130 -0.000004 +vn -0.803629 0.595130 -0.000004 +vn -0.803633 -0.595125 -0.000000 +vn -0.803633 -0.595125 -0.000000 +vn -0.803633 -0.595125 -0.000000 +vn -0.803633 -0.595125 -0.000000 +vn -0.803633 0.595125 0.000000 +vn -0.803633 0.595125 0.000000 +vn -0.803633 0.595125 0.000000 +vn -0.803633 0.595125 0.000000 +vn -0.803633 0.595125 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 -1.000000 -0.000000 +vn -0.000000 1.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -1.000000 0.000000 -0.000000 +vn -1.000000 0.000000 -0.000000 +vn -1.000000 0.000000 -0.000000 +vn -1.000000 0.000000 -0.000000 +vn -0.803632 -0.595126 -0.000001 +vn -0.803632 -0.595126 -0.000001 +vn -0.803632 -0.595126 -0.000001 +vn -0.803632 -0.595126 -0.000001 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.999948 0.000000 0.010190 +vn -0.999948 0.000000 0.010190 +vn -0.999948 0.000000 0.010190 +vn -0.999948 0.000000 0.010190 +vn -0.999948 0.000000 0.010190 +vn -0.999948 0.000000 0.010190 +vn -0.999948 0.000000 0.010190 +vn -0.999948 0.000000 0.010190 +vn 1.000000 -0.000000 0.000000 +vn 1.000000 -0.000000 0.000000 +vn 1.000000 -0.000000 0.000000 +vn 1.000000 -0.000000 0.000000 +vn 1.000000 -0.000000 0.000000 +vn 1.000000 -0.000000 0.000000 +vn 1.000000 -0.000000 0.000000 +vn 1.000000 -0.000000 0.000000 +vt -0.023520 0.076985 +vt -2.747478 1.618546 +vt -2.747478 0.076985 +vt -0.023520 1.618546 +vt -3.320306 0.987528 +vt -10.817821 0.414611 +vt -2.804681 0.414611 +vt -10.817821 7.289611 +vt -3.320306 2.133361 +vt -2.289056 3.279195 +vt -2.289056 4.425028 +vt -3.320306 5.570861 +vt -3.320306 6.716695 +vt -2.804681 7.289611 +vt -2.747478 0.701193 +vt -0.023520 2.242754 +vt -2.747478 2.242754 +vt -0.023520 0.701193 +vt 10.817821 7.289611 +vt 2.888081 0.414611 +vt 10.817821 0.414611 +vt 3.360280 0.987528 +vt 3.360280 2.133361 +vt 2.329030 3.279195 +vt 2.329030 4.425028 +vt 3.360280 5.570861 +vt 3.360280 6.716695 +vt 2.783268 7.289611 +vt -0.023520 3.279195 +vt -2.747478 4.425028 +vt -2.747478 3.279195 +vt -0.023520 4.425028 +vt -0.023520 0.987528 +vt -2.747478 2.133361 +vt -2.747478 0.987528 +vt -0.023520 2.133361 +vt 2.415517 -0.048137 +vt 10.789262 -2.857573 +vt 10.817020 -0.133756 +vt 2.260940 -2.770662 +vt 1.223768 -0.035992 +vt 1.196010 -2.759809 +vt -0.023520 3.483749 +vt -2.747478 5.025311 +vt -2.747478 3.483749 +vt -0.023520 5.025311 +vt -10.789262 -2.857573 +vt -2.205901 -0.046001 +vt -10.817020 -0.133756 +vt -2.260940 -2.770662 +vt -1.196010 -2.759809 +vt -1.223768 -0.035992 +vt -0.023520 5.570861 +vt -2.747478 6.716695 +vt -2.747478 5.570861 +vt -0.023520 6.716695 +vt -2.747478 4.107958 +vt -0.023520 5.649519 +vt -2.747478 5.649519 +vt -0.023520 4.107958 +vt 0.046871 4.396733 +vt 2.723954 3.250900 +vt 2.723954 4.396733 +vt 0.046871 3.250886 +vt 0.046875 2.105070 +vt 2.723958 0.959236 +vt 2.723958 2.105070 +vt 0.046875 0.959236 +vt 0.046870 3.106237 +vt 2.723958 1.564685 +vt 2.723953 3.106248 +vt 0.046875 1.564678 +vt 0.046875 0.712995 +vt 2.723958 -0.828566 +vt 2.723958 0.712995 +vt 0.046875 -0.828566 +vt 0.046875 6.513012 +vt 2.723958 5.205720 +vt 2.723958 6.513012 +vt 2.723958 4.971451 +vt 0.046875 4.971451 +vt -2.062500 -0.046875 +vt -1.031250 -2.723958 +vt -1.031250 -0.046875 +vt -2.082318 -2.723958 +vt -9.593750 -0.046875 +vt -9.593750 -2.723958 +vt 2.082318 -2.723958 +vt 1.031250 -0.046875 +vt 1.031250 -2.723958 +vt 2.062500 -0.046875 +vt 9.593750 -0.046875 +vt 9.593750 -2.723958 +vt 9.593750 7.348385 +vt 1.566693 0.386320 +vt 9.593750 0.386320 +vt 1.051068 0.959236 +vt 1.051068 2.105070 +vt 2.082318 3.250903 +vt 2.082318 4.396736 +vt 1.051068 5.542570 +vt 1.051068 6.688403 +vt 1.645052 7.348385 +vt 0.046875 6.688403 +vt 2.723958 5.542570 +vt 2.723958 6.688403 +vt 0.046875 5.542570 +vt 0.046875 4.119753 +vt 2.723957 2.578189 +vt 2.723958 4.119751 +vt 0.046874 2.578187 +vt -1.031250 0.959236 +vt -9.593750 0.386320 +vt -1.546875 0.386320 +vt -9.593750 7.261320 +vt -1.031250 2.105070 +vt -2.062515 3.250890 +vt -2.062507 4.396736 +vt -1.031250 5.542570 +vt -1.031250 6.688403 +vt -1.546875 7.261320 +vt -1.316338 8.189448 +vt 1.407620 7.493168 +vt 1.407620 8.189448 +vt 1.407620 -0.862184 +vt 1.407620 -1.558463 +vt -1.316338 7.493168 +vt -1.316338 -1.558463 +vt -1.316338 -0.862184 +vt 1.255208 -1.592847 +vt -1.421875 -0.896568 +vt -1.421875 -1.592847 +vt -1.421875 7.564598 +vt -1.421875 8.155064 +vt 1.255208 8.155064 +vt 1.255208 -0.896568 +vt 1.255208 7.458785 +f 1/1/1 2/2/2 3/3/3 +f 2/2/2 1/1/1 4/4/4 +f 5/5/5 6/6/6 7/7/7 +f 6/6/6 5/5/5 8/8/8 +f 8/8/8 5/5/5 9/9/9 +f 8/8/8 9/9/9 10/10/10 +f 8/8/8 10/10/10 11/11/11 +f 8/8/8 11/11/11 12/12/12 +f 8/8/8 12/12/12 13/13/13 +f 8/8/8 13/13/13 14/14/14 +f 15/15/15 16/16/16 17/17/17 +f 16/16/16 15/15/15 18/18/18 +f 19/19/19 20/20/20 21/21/21 +f 20/20/20 19/19/19 22/22/22 +f 22/22/22 19/19/19 23/23/23 +f 23/23/23 19/19/19 24/24/24 +f 24/24/24 19/19/19 25/25/25 +f 25/25/25 19/19/19 26/26/26 +f 26/26/26 19/19/19 27/27/27 +f 27/27/27 19/19/19 28/28/28 +f 29/29/29 30/30/30 31/31/31 +f 30/30/30 29/29/29 32/32/32 +f 33/33/33 34/34/34 35/35/35 +f 34/34/34 33/33/33 36/36/36 +f 37/37/37 38/38/38 39/39/39 +f 38/38/38 37/37/37 40/40/40 +f 40/40/40 37/37/37 41/41/41 +f 40/40/40 41/41/41 42/42/42 +f 43/43/43 44/44/44 45/45/45 +f 44/44/44 43/43/43 46/46/46 +f 47/47/47 48/48/48 49/49/49 +f 48/48/48 47/47/47 50/50/50 +f 48/48/48 50/50/50 51/51/51 +f 48/48/48 51/51/51 52/52/52 +f 53/53/53 54/54/54 55/55/55 +f 54/54/54 53/53/53 56/56/56 +f 57/57/57 58/58/58 59/59/59 +f 58/58/58 57/57/57 60/60/60 +f 61/61/61 62/62/62 63/63/63 +f 62/62/62 61/61/61 64/64/64 +f 65/65/65 66/66/66 67/67/67 +f 66/66/66 65/65/65 68/68/68 +f 69/69/69 70/70/70 71/71/71 +f 70/70/70 69/69/69 72/72/72 +f 73/73/73 74/74/74 75/75/75 +f 74/74/74 73/73/73 76/76/76 +f 77/77/77 78/78/78 79/79/79 +f 78/78/78 77/77/77 80/80/80 +f 80/80/80 77/77/77 81/81/81 +f 82/82/82 83/83/83 84/84/84 +f 83/83/83 82/82/82 85/85/85 +f 85/85/85 82/82/82 86/86/86 +f 85/85/85 86/86/86 87/87/87 +f 88/88/88 89/89/89 90/90/90 +f 89/89/89 88/88/88 91/91/91 +f 91/91/91 88/88/88 92/92/92 +f 92/92/92 88/88/88 93/93/93 +f 94/94/94 95/95/95 96/96/96 +f 95/95/95 94/94/94 97/97/97 +f 97/97/97 94/94/94 98/98/98 +f 98/98/98 94/94/94 99/99/99 +f 99/99/99 94/94/94 100/100/100 +f 100/100/100 94/94/94 101/101/101 +f 101/101/101 94/94/94 102/102/102 +f 102/102/102 94/94/94 103/103/103 +f 104/104/104 105/105/105 106/106/106 +f 105/105/105 104/104/104 107/107/107 +f 108/108/108 109/109/109 110/110/110 +f 109/109/109 108/108/108 111/111/111 +f 112/112/112 113/113/113 114/114/114 +f 113/113/113 112/112/112 115/115/115 +f 115/115/115 112/112/112 116/116/116 +f 115/115/115 116/116/116 117/117/117 +f 115/115/115 117/117/117 118/118/118 +f 115/115/115 118/118/118 119/119/119 +f 115/115/115 119/119/119 120/120/120 +f 115/115/115 120/120/120 121/121/121 +f 122/122/122 123/123/123 124/124/124 +f 123/123/123 122/122/122 125/125/125 +f 125/125/125 122/122/122 126/126/126 +f 126/126/126 122/122/122 127/127/127 +f 127/127/127 128/128/128 126/126/126 +f 128/128/128 127/127/127 129/129/129 +f 130/130/130 131/131/131 132/132/132 +f 131/131/131 130/130/130 133/133/133 +f 133/133/133 130/130/130 134/134/134 +f 134/134/134 130/130/130 135/135/135 +f 135/135/135 130/130/130 136/136/136 +f 135/135/135 136/136/136 137/137/137 + +g marssurvive_door1_Main-969696 +usemtl 969696 +v -2.012056 -0.262794 -0.380736 +v -1.504892 -0.475020 -0.385905 +v -1.868137 -0.475020 -0.382203 +v -1.819201 -0.050568 -0.382701 +v -2.155975 -0.050568 -0.379269 +v -2.155975 0.373884 -0.379269 +v -1.819201 0.373884 -0.382701 +v -1.841666 0.798336 -0.382472 +v -1.504892 0.798336 -0.385905 +v -1.841666 1.222788 -0.382472 +v -1.504892 1.222788 -0.385905 +v -2.155975 1.647240 -0.379269 +v -1.819201 1.647240 -0.382701 +v -2.155975 2.071692 -0.379269 +v -1.819201 2.071692 -0.382701 +v -1.980110 2.283918 -0.381062 +v -1.504892 2.496144 -0.385905 +v -1.804246 2.496144 -0.382854 +v -1.810740 -0.050568 0.447518 +v -1.821022 -0.475020 0.447623 +v -1.496431 -0.475020 0.444315 +v -1.978176 -0.262794 0.449224 +v -2.135331 -0.050568 0.450826 +v -1.810740 0.373884 0.447518 +v -2.135331 0.373884 0.450826 +v -1.496431 0.798336 0.444315 +v -1.821022 0.798336 0.447623 +v -1.496431 1.222788 0.444315 +v -1.821022 1.222788 0.447623 +v -1.810740 1.647240 0.447518 +v -2.135331 1.647240 0.450826 +v -1.810740 2.071692 0.447518 +v -2.135331 2.071692 0.450826 +v -1.496431 2.496144 0.444315 +v -1.978176 2.283918 0.449224 +v -1.821022 2.496144 0.447623 +v 0.960128 -0.273274 0.433387 +v 0.796925 -0.485500 0.433387 +v 1.117291 -0.485500 0.433387 +v 0.482600 -0.061048 0.433387 +v 0.802966 -0.061048 0.433387 +v 0.482600 0.363404 0.433387 +v 0.802966 0.363404 0.433387 +v 1.117291 0.787856 0.433387 +v 0.796925 0.787856 0.433387 +v 1.117291 1.212308 0.433387 +v 0.796925 1.212308 0.433387 +v 0.802966 1.636760 0.433387 +v 0.482600 1.636760 0.433387 +v 0.802966 2.061212 0.433387 +v 0.482600 2.061212 0.433387 +v 0.984012 2.305689 0.433387 +v 0.530368 2.125715 0.433387 +v 0.796925 2.485664 0.433387 +v 1.117291 2.485664 0.433387 +v 0.482600 -0.061048 -0.382587 +v 1.111250 -0.485500 -0.382587 +v 0.796925 -0.485500 -0.382587 +v 0.954087 -0.273274 -0.382587 +v 0.796925 -0.061048 -0.382587 +v 0.482600 0.363404 -0.382587 +v 0.796925 0.363404 -0.382587 +v 0.796930 0.787851 -0.382587 +v 1.111255 0.787851 -0.382587 +v 0.796927 1.212308 -0.382587 +v 1.111252 1.212308 -0.382587 +v 0.482600 1.636760 -0.382587 +v 0.796925 1.636760 -0.382587 +v 0.482600 2.061212 -0.382587 +v 0.796925 2.061212 -0.382587 +v 0.796925 2.485664 -0.382587 +v 0.954087 2.273438 -0.382587 +v 1.111250 2.485664 -0.382587 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vt 2.888081 0.414611 +vt 1.224071 -0.158305 +vt 2.415882 -0.158305 +vt 2.255321 0.987528 +vt 3.360280 0.987528 +vt 3.360280 2.133361 +vt 2.255321 2.133361 +vt 2.329030 3.279195 +vt 1.224071 3.279195 +vt 2.329030 4.425028 +vt 1.224071 4.425028 +vt 3.360280 5.570861 +vt 2.255321 5.570861 +vt 3.360280 6.716695 +vt 2.255321 6.716695 +vt 2.783268 7.289611 +vt 1.224071 7.862528 +vt 2.206255 7.862528 +vt -2.255321 0.987528 +vt -2.289056 -0.158305 +vt -1.224071 -0.158305 +vt -2.804681 0.414611 +vt -3.320306 0.987528 +vt -2.255321 2.133361 +vt -3.320306 2.133361 +vt -1.224071 3.279195 +vt -2.289056 3.279195 +vt -1.224071 4.425028 +vt -2.289056 4.425028 +vt -2.255321 5.570861 +vt -3.320306 5.570861 +vt -2.255321 6.716695 +vt -3.320306 6.716695 +vt -1.224071 7.862528 +vt -2.804681 7.289611 +vt -2.289056 7.862528 +vt 1.566693 0.386320 +vt 1.031250 -0.186597 +vt 2.082318 -0.186597 +vt 0.000000 0.959236 +vt 1.051068 0.959236 +vt 0.000000 2.105070 +vt 1.051068 2.105070 +vt 2.082318 3.250903 +vt 1.031250 3.250903 +vt 2.082318 4.396736 +vt 1.031250 4.396736 +vt 1.051068 5.542570 +vt 0.000000 5.542570 +vt 1.051068 6.688403 +vt 0.000000 6.688403 +vt 1.645052 7.348385 +vt 0.156718 6.862534 +vt 1.031250 7.834236 +vt 2.082318 7.834236 +vt 0.000000 0.959236 +vt -2.062500 -0.186597 +vt -1.031250 -0.186597 +vt -1.546875 0.386320 +vt -1.031250 0.959236 +vt 0.000000 2.105070 +vt -1.031250 2.105070 +vt -1.031265 3.250890 +vt -2.062515 3.250890 +vt -1.031257 4.396736 +vt -2.062507 4.396736 +vt 0.000000 5.542570 +vt -1.031250 5.542570 +vt 0.000000 6.688403 +vt -1.031250 6.688403 +vt -1.031250 7.834236 +vt -1.546875 7.261320 +vt -2.062500 7.834236 +f 138/138/138 139/139/139 140/140/140 +f 139/139/139 138/138/138 141/141/141 +f 141/141/141 138/138/138 142/142/142 +f 141/141/141 142/142/142 143/143/143 +f 141/141/141 143/143/143 144/144/144 +f 144/144/144 143/143/143 145/145/145 +f 144/144/144 145/145/145 146/146/146 +f 146/146/146 145/145/145 147/147/147 +f 146/146/146 147/147/147 148/148/148 +f 148/148/148 147/147/147 149/149/149 +f 148/148/148 149/149/149 150/150/150 +f 150/150/150 149/149/149 151/151/151 +f 150/150/150 151/151/151 152/152/152 +f 152/152/152 151/151/151 153/153/153 +f 152/152/152 153/153/153 154/154/154 +f 154/154/154 153/153/153 155/155/155 +f 156/156/156 157/157/157 158/158/158 +f 157/157/157 156/156/156 159/159/159 +f 159/159/159 156/156/156 160/160/160 +f 160/160/160 156/156/156 161/161/161 +f 160/160/160 161/161/161 162/162/162 +f 162/162/162 161/161/161 163/163/163 +f 162/162/162 163/163/163 164/164/164 +f 164/164/164 163/163/163 165/165/165 +f 164/164/164 165/165/165 166/166/166 +f 166/166/166 165/165/165 167/167/167 +f 166/166/166 167/167/167 168/168/168 +f 168/168/168 167/167/167 169/169/169 +f 168/168/168 169/169/169 170/170/170 +f 170/170/170 169/169/169 171/171/171 +f 170/170/170 171/171/171 172/172/172 +f 172/172/172 171/171/171 173/173/173 +f 174/174/174 175/175/175 176/176/176 +f 175/175/175 174/174/174 177/177/177 +f 177/177/177 174/174/174 178/178/178 +f 177/177/177 178/178/178 179/179/179 +f 179/179/179 178/178/178 180/180/180 +f 179/179/179 180/180/180 181/181/181 +f 179/179/179 181/181/181 182/182/182 +f 182/182/182 181/181/181 183/183/183 +f 182/182/182 183/183/183 184/184/184 +f 184/184/184 183/183/183 185/185/185 +f 184/184/184 185/185/185 186/186/186 +f 186/186/186 185/185/185 187/187/187 +f 186/186/186 187/187/187 188/188/188 +f 188/188/188 187/187/187 189/189/189 +f 188/188/188 189/189/189 190/190/190 +f 190/190/190 189/189/189 191/191/191 +f 191/191/191 189/189/189 192/192/192 +f 193/193/193 194/194/194 195/195/195 +f 194/194/194 193/193/193 196/196/196 +f 196/196/196 193/193/193 197/197/197 +f 197/197/197 193/193/193 198/198/198 +f 197/197/197 198/198/198 199/199/199 +f 199/199/199 198/198/198 200/200/200 +f 199/199/199 200/200/200 201/201/201 +f 201/201/201 200/200/200 202/202/202 +f 201/201/201 202/202/202 203/203/203 +f 203/203/203 202/202/202 204/204/204 +f 203/203/203 204/204/204 205/205/205 +f 205/205/205 204/204/204 206/206/206 +f 205/205/205 206/206/206 207/207/207 +f 207/207/207 206/206/206 208/208/208 +f 207/207/207 208/208/208 209/209/209 +f 209/209/209 208/208/208 210/210/210 + +g marssurvive_door1_Main-Charcoal +usemtl Charcoal +v -4.428915 -0.262794 -0.356106 +v -1.868137 -0.475020 -0.382203 +v -4.428915 -0.475020 -0.356106 +v -2.012056 -0.262794 -0.380736 +v -1.978176 -0.262794 0.449224 +v -4.420455 -0.475020 0.474113 +v -1.821022 -0.475020 0.447623 +v -4.420455 -0.262794 0.474113 +v 3.406775 -0.273274 0.433387 +v 1.117291 -0.485500 0.433387 +v 3.406775 -0.485500 0.433387 +v 0.960128 -0.273274 0.433387 +v 0.954087 -0.273274 -0.382587 +v 3.406775 -0.485500 -0.382587 +v 1.111250 -0.485500 -0.382587 +v 3.406775 -0.273274 -0.382587 +vn -0.010190 -0.000000 -0.999948 +vn -0.010190 -0.000000 -0.999948 +vn -0.010190 -0.000000 -0.999948 +vn -0.010190 -0.000000 -0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vt 174.214817 -10.346209 +vt 73.391544 -18.701562 +vt 174.214817 -18.701562 +vt 79.057935 -10.346209 +vt -78.057137 -10.346209 +vt -174.214817 -18.701562 +vt -71.869637 -18.701562 +vt -174.214817 -10.346209 +vt 134.125000 -10.758811 +vt 43.987821 -19.114163 +vt 134.125000 -19.114163 +vt 37.800321 -10.758811 +vt -37.562500 -10.758811 +vt -134.125000 -19.114163 +vt -43.750000 -19.114163 +vt -134.125000 -10.758811 +f 211/211/211 212/212/212 213/213/213 +f 212/212/212 211/211/211 214/214/214 +f 215/215/215 216/216/216 217/217/217 +f 216/216/216 215/215/215 218/218/218 +f 219/219/219 220/220/220 221/221/221 +f 220/220/220 219/219/219 222/222/222 +f 223/223/223 224/224/224 225/225/225 +f 224/224/224 223/223/223 226/226/226 + +g marssurvive_door1_Main-Material1 +usemtl Material1 +v -1.821022 2.496144 0.447623 +v -4.420455 2.283918 0.474113 +v -1.978176 2.283918 0.449224 +v -4.420455 2.496144 0.474113 +v -4.428915 2.496144 -0.356106 +v -1.980110 2.283918 -0.381062 +v -4.428915 2.283918 -0.356106 +v -1.804246 2.496144 -0.382854 +v 3.406775 2.485664 0.433387 +v 0.984012 2.305689 0.433387 +v 3.406775 2.305689 0.433387 +v 1.117291 2.485664 0.433387 +v 1.111250 2.485664 -0.382587 +v 3.406775 2.273438 -0.382587 +v 0.954087 2.273438 -0.382587 +v 3.406775 2.485664 -0.382587 +vn 0.010190 -0.000000 0.999948 +vn 0.010190 -0.000000 0.999948 +vn 0.010190 -0.000000 0.999948 +vn 0.010190 -0.000000 0.999948 +vn -0.010190 -0.000000 -0.999948 +vn -0.010190 -0.000000 -0.999948 +vn -0.010190 -0.000000 -0.999948 +vn -0.010190 -0.000000 -0.999948 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vt -0.057226 0.196563 +vt -0.270446 0.182240 +vt -0.070117 0.182240 +vt -0.270446 0.196563 +vt 0.270446 0.196563 +vt 0.069582 0.182240 +vt 0.270446 0.182240 +vt 0.055156 0.196563 +vt 0.239844 0.195856 +vt 0.041126 0.183710 +vt 0.239844 0.183710 +vt 0.052058 0.195856 +vt -0.051562 0.195856 +vt -0.239844 0.181533 +vt -0.038672 0.181533 +vt -0.239844 0.195856 +f 227/227/227 228/228/228 229/229/229 +f 228/228/228 227/227/227 230/230/230 +f 231/231/231 232/232/232 233/233/233 +f 232/232/232 231/231/231 234/234/234 +f 235/235/235 236/236/236 237/237/237 +f 236/236/236 235/235/235 238/238/238 +f 239/239/239 240/240/240 241/241/241 +f 240/240/240 239/239/239 242/242/242 + diff --git a/mods/marsdoors/models/marsdoors_door1_closed.obj b/mods/marsdoors/models/marsdoors_door1_closed.obj new file mode 100644 index 00000000..3df96dae --- /dev/null +++ b/mods/marsdoors/models/marsdoors_door1_closed.obj @@ -0,0 +1,910 @@ +#mtllib marssurvive_door1_closed.mtl + +#g marssurvive_door1_closed_Main-Beige1 +#usemtl Beige1 +v -0.680963 0.373884 -0.382701 +v -0.358194 0.798336 0.444315 +v -0.672503 0.373884 0.447518 +v -0.366654 0.798336 -0.385905 +v -0.997093 -0.050568 0.450826 +v -3.282217 -0.262794 0.474113 +v -0.839939 -0.262794 0.449224 +v -3.282217 2.283918 0.474113 +v -0.997093 0.373884 0.450826 +v -0.682784 0.798336 0.447623 +v -0.682784 1.222788 0.447623 +v -0.997093 1.647240 0.450826 +v -0.997093 2.071692 0.450826 +v -0.839939 2.283918 0.449224 +v -0.358194 -0.475020 0.444315 +v -0.680963 -0.050568 -0.382701 +v -0.672503 -0.050568 0.447518 +v -0.366654 -0.475020 -0.385905 +v -3.290678 2.283918 -0.356106 +v -0.873818 -0.262794 -0.380736 +v -3.290678 -0.262794 -0.356106 +v -1.017737 -0.050568 -0.379269 +v -1.017737 0.373884 -0.379269 +v -0.703429 0.798336 -0.382472 +v -0.703429 1.222788 -0.382472 +v -1.017737 1.647240 -0.379269 +v -1.017737 2.071692 -0.379269 +v -0.841873 2.283918 -0.381062 +v -0.366654 0.798336 -0.385905 +v -0.358194 1.222788 0.444315 +v -0.358194 0.798336 0.444315 +v -0.366654 1.222788 -0.385905 +v -0.680963 -0.050568 -0.382701 +v -0.672503 0.373884 0.447518 +v -0.672503 -0.050568 0.447518 +v -0.680963 0.373884 -0.382701 +v -0.729899 -0.475020 -0.382203 +v -3.282217 -0.475020 0.474113 +v -3.290678 -0.475020 -0.356106 +v -0.682784 -0.475020 0.447623 +v -0.366654 -0.475020 -0.385905 +v -0.358194 -0.475020 0.444315 +v -0.680963 2.071692 -0.382701 +v -0.358194 2.496144 0.444315 +v -0.672503 2.071692 0.447518 +v -0.366654 2.496144 -0.385905 +v -3.282217 2.496144 0.474113 +v -0.666009 2.496144 -0.382854 +v -3.290678 2.496144 -0.356106 +v -0.682784 2.496144 0.447623 +v -0.358194 2.496144 0.444315 +v -0.366654 2.496144 -0.385905 +v -0.680963 1.647240 -0.382701 +v -0.672503 2.071692 0.447518 +v -0.672503 1.647240 0.447518 +v -0.680963 2.071692 -0.382701 +v -0.358194 1.222788 0.444315 +v -0.680963 1.647240 -0.382701 +v -0.672503 1.647240 0.447518 +v -0.366654 1.222788 -0.385905 +v -0.361948 1.212308 -0.382587 +v -0.361950 0.787856 0.433387 +v -0.361950 1.212308 0.433387 +v -0.361945 0.787851 -0.382587 +v -0.676275 0.363404 -0.382587 +v -0.676275 -0.061048 0.433387 +v -0.676275 0.363404 0.433387 +v -0.676275 -0.061048 -0.382587 +v -0.361945 0.787851 -0.382587 +v -0.676275 0.363404 0.433387 +v -0.361950 0.787856 0.433387 +v -0.676275 0.363404 -0.382587 +v -0.676275 -0.061048 -0.382587 +v -0.361950 -0.485500 0.433387 +v -0.676275 -0.061048 0.433387 +v -0.361950 -0.485500 -0.382587 +v -0.361950 2.485664 -0.382587 +v -0.628507 2.125715 0.433387 +v -0.361950 2.485664 0.433387 +v -0.676275 2.061212 0.433387 +v -0.676275 2.061212 -0.382587 +v -0.047625 -0.485500 -0.382587 +v -0.361950 -0.485500 0.433387 +v -0.361950 -0.485500 -0.382587 +v -0.041584 -0.485500 0.433387 +v 2.247900 -0.485500 -0.382587 +v 2.247900 -0.485500 0.433387 +v -0.041584 2.485664 0.433387 +v -0.361950 2.485664 -0.382587 +v -0.361950 2.485664 0.433387 +v -0.047625 2.485664 -0.382587 +v 2.247900 2.485664 -0.382587 +v 2.247900 2.485664 0.433387 +v 2.247900 2.305689 0.433387 +v -0.198747 -0.273274 0.433387 +v 2.247900 -0.273274 0.433387 +v -0.355909 -0.061048 0.433387 +v -0.355909 0.363404 0.433387 +v -0.041584 0.787856 0.433387 +v -0.041584 1.212308 0.433387 +v -0.355909 1.636760 0.433387 +v -0.355909 2.061212 0.433387 +v -0.174863 2.305689 0.433387 +v -0.676275 2.061212 -0.382587 +v -0.676275 1.636760 0.433387 +v -0.676275 2.061212 0.433387 +v -0.676275 1.636760 -0.382587 +v -0.676275 1.636760 -0.382587 +v -0.361950 1.212308 0.433387 +v -0.676275 1.636760 0.433387 +v -0.361948 1.212308 -0.382587 +v -0.361950 -0.061048 -0.382587 +v 2.247900 -0.273274 -0.382587 +v -0.204787 -0.273274 -0.382587 +v 2.247900 2.273438 -0.382587 +v -0.361950 0.363404 -0.382587 +v -0.047620 0.787851 -0.382587 +v -0.047623 1.212308 -0.382587 +v -0.361950 1.636760 -0.382587 +v -0.361950 2.061212 -0.382587 +v -0.204787 2.273438 -0.382587 +v -3.290678 2.496144 -0.356106 +v -3.282217 2.283918 0.474113 +v -3.282217 2.496144 0.474113 +v -3.282217 -0.262794 0.474113 +v -3.282217 -0.475020 0.474113 +v -3.290678 2.283918 -0.356106 +v -3.290678 -0.475020 -0.356106 +v -3.290678 -0.262794 -0.356106 +v 2.247900 -0.485500 -0.382587 +v 2.247900 -0.273274 0.433387 +v 2.247900 -0.485500 0.433387 +v 2.247900 2.305689 0.433387 +v 2.247900 2.485664 0.433387 +v 2.247900 2.485664 -0.382587 +v 2.247900 -0.273274 -0.382587 +v 2.247900 2.273438 -0.382587 +vn 0.803591 -0.595125 -0.008189 +vn 0.803591 -0.595125 -0.008189 +vn 0.803591 -0.595125 -0.008189 +vn 0.803591 -0.595125 -0.008189 +vn 0.010190 -0.000000 0.999948 +vn 0.010190 -0.000000 0.999948 +vn 0.010190 -0.000000 0.999948 +vn 0.010190 -0.000000 0.999948 +vn 0.010190 -0.000000 0.999948 +vn 0.010190 -0.000000 0.999948 +vn 0.010190 -0.000000 0.999948 +vn 0.010190 -0.000000 0.999948 +vn 0.010190 -0.000000 0.999948 +vn 0.010190 -0.000000 0.999948 +vn 0.803591 0.595125 -0.008189 +vn 0.803591 0.595125 -0.008189 +vn 0.803591 0.595125 -0.008189 +vn 0.803591 0.595125 -0.008189 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn 0.999948 -0.000000 -0.010190 +vn 0.999948 -0.000000 -0.010190 +vn 0.999948 -0.000000 -0.010190 +vn 0.999948 -0.000000 -0.010190 +vn 0.999948 -0.000000 -0.010190 +vn 0.999948 -0.000000 -0.010190 +vn 0.999948 -0.000000 -0.010190 +vn 0.999948 -0.000000 -0.010190 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.803591 -0.595125 -0.008189 +vn 0.803591 -0.595125 -0.008189 +vn 0.803591 -0.595125 -0.008189 +vn 0.803591 -0.595125 -0.008189 +vn -0.000000 1.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn 0.999948 -0.000000 -0.010190 +vn 0.999948 -0.000000 -0.010190 +vn 0.999948 -0.000000 -0.010190 +vn 0.999948 -0.000000 -0.010190 +vn 0.803591 0.595125 -0.008189 +vn 0.803591 0.595125 -0.008189 +vn 0.803591 0.595125 -0.008189 +vn 0.803591 0.595125 -0.008189 +vn -1.000000 -0.000003 -0.000004 +vn -1.000000 -0.000003 -0.000004 +vn -1.000000 -0.000003 -0.000004 +vn -1.000000 -0.000003 -0.000004 +vn -1.000000 0.000000 -0.000000 +vn -1.000000 0.000000 -0.000000 +vn -1.000000 0.000000 -0.000000 +vn -1.000000 0.000000 -0.000000 +vn -0.803629 0.595130 -0.000004 +vn -0.803629 0.595130 -0.000004 +vn -0.803629 0.595130 -0.000004 +vn -0.803629 0.595130 -0.000004 +vn -0.803633 -0.595125 -0.000000 +vn -0.803633 -0.595125 -0.000000 +vn -0.803633 -0.595125 -0.000000 +vn -0.803633 -0.595125 -0.000000 +vn -0.803633 0.595125 0.000000 +vn -0.803633 0.595125 0.000000 +vn -0.803633 0.595125 0.000000 +vn -0.803633 0.595125 0.000000 +vn -0.803633 0.595125 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 -1.000000 -0.000000 +vn -0.000000 1.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -1.000000 0.000000 -0.000000 +vn -1.000000 0.000000 -0.000000 +vn -1.000000 0.000000 -0.000000 +vn -1.000000 0.000000 -0.000000 +vn -0.803632 -0.595126 -0.000001 +vn -0.803632 -0.595126 -0.000001 +vn -0.803632 -0.595126 -0.000001 +vn -0.803632 -0.595126 -0.000001 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.999948 0.000000 0.010190 +vn -0.999948 0.000000 0.010190 +vn -0.999948 0.000000 0.010190 +vn -0.999948 0.000000 0.010190 +vn -0.999948 0.000000 0.010190 +vn -0.999948 0.000000 0.010190 +vn -0.999948 0.000000 0.010190 +vn -0.999948 0.000000 0.010190 +vn 1.000000 -0.000000 0.000000 +vn 1.000000 -0.000000 0.000000 +vn 1.000000 -0.000000 0.000000 +vn 1.000000 -0.000000 0.000000 +vn 1.000000 -0.000000 0.000000 +vn 1.000000 -0.000000 0.000000 +vn 1.000000 -0.000000 0.000000 +vn 1.000000 -0.000000 0.000000 +vt -0.023520 0.076985 +vt -2.747478 1.618546 +vt -2.747478 0.076985 +vt -0.023520 1.618546 +vt -3.320306 0.987528 +vt -10.817821 0.414611 +vt -2.804681 0.414611 +vt -10.817821 7.289611 +vt -3.320306 2.133361 +vt -2.289056 3.279195 +vt -2.289056 4.425028 +vt -3.320306 5.570861 +vt -3.320306 6.716695 +vt -2.804681 7.289611 +vt -2.747478 0.701193 +vt -0.023520 2.242754 +vt -2.747478 2.242754 +vt -0.023520 0.701193 +vt 10.817821 7.289611 +vt 2.888081 0.414611 +vt 10.817821 0.414611 +vt 3.360280 0.987528 +vt 3.360280 2.133361 +vt 2.329030 3.279195 +vt 2.329030 4.425028 +vt 3.360280 5.570861 +vt 3.360280 6.716695 +vt 2.783268 7.289611 +vt -0.023520 3.279195 +vt -2.747478 4.425028 +vt -2.747478 3.279195 +vt -0.023520 4.425028 +vt -0.023520 0.987528 +vt -2.747478 2.133361 +vt -2.747478 0.987528 +vt -0.023520 2.133361 +vt 2.415517 -0.048137 +vt 10.789262 -2.857573 +vt 10.817020 -0.133756 +vt 2.260940 -2.770662 +vt 1.223768 -0.035992 +vt 1.196010 -2.759809 +vt -0.023520 3.483749 +vt -2.747478 5.025311 +vt -2.747478 3.483749 +vt -0.023520 5.025311 +vt -10.789262 -2.857573 +vt -2.205901 -0.046001 +vt -10.817020 -0.133756 +vt -2.260940 -2.770662 +vt -1.196010 -2.759809 +vt -1.223768 -0.035992 +vt -0.023520 5.570861 +vt -2.747478 6.716695 +vt -2.747478 5.570861 +vt -0.023520 6.716695 +vt -2.747478 4.107958 +vt -0.023520 5.649519 +vt -2.747478 5.649519 +vt -0.023520 4.107958 +vt 0.046871 4.396733 +vt 2.723954 3.250900 +vt 2.723954 4.396733 +vt 0.046871 3.250886 +vt 0.046875 2.105070 +vt 2.723958 0.959236 +vt 2.723958 2.105070 +vt 0.046875 0.959236 +vt 0.046870 3.106237 +vt 2.723958 1.564685 +vt 2.723953 3.106248 +vt 0.046875 1.564678 +vt 0.046875 0.712995 +vt 2.723958 -0.828566 +vt 2.723958 0.712995 +vt 0.046875 -0.828566 +vt 0.046875 6.513012 +vt 2.723958 5.205720 +vt 2.723958 6.513012 +vt 2.723958 4.971451 +vt 0.046875 4.971451 +vt -2.062500 -0.046875 +vt -1.031250 -2.723958 +vt -1.031250 -0.046875 +vt -2.082318 -2.723958 +vt -9.593750 -0.046875 +vt -9.593750 -2.723958 +vt 2.082318 -2.723958 +vt 1.031250 -0.046875 +vt 1.031250 -2.723958 +vt 2.062500 -0.046875 +vt 9.593750 -0.046875 +vt 9.593750 -2.723958 +vt 9.593750 7.348385 +vt 1.566693 0.386320 +vt 9.593750 0.386320 +vt 1.051068 0.959236 +vt 1.051068 2.105070 +vt 2.082318 3.250903 +vt 2.082318 4.396736 +vt 1.051068 5.542570 +vt 1.051068 6.688403 +vt 1.645052 7.348385 +vt 0.046875 6.688403 +vt 2.723958 5.542570 +vt 2.723958 6.688403 +vt 0.046875 5.542570 +vt 0.046875 4.119753 +vt 2.723957 2.578189 +vt 2.723958 4.119751 +vt 0.046874 2.578187 +vt -1.031250 0.959236 +vt -9.593750 0.386320 +vt -1.546875 0.386320 +vt -9.593750 7.261320 +vt -1.031250 2.105070 +vt -2.062515 3.250890 +vt -2.062507 4.396736 +vt -1.031250 5.542570 +vt -1.031250 6.688403 +vt -1.546875 7.261320 +vt -1.278283 8.189448 +vt 1.445675 7.493168 +vt 1.445675 8.189448 +vt 1.445675 -0.862184 +vt 1.445675 -1.558463 +vt -1.278283 7.493168 +vt -1.278283 -1.558463 +vt -1.278283 -0.862184 +vt 1.255208 -1.592847 +vt -1.421875 -0.896568 +vt -1.421875 -1.592847 +vt -1.421875 7.564598 +vt -1.421875 8.155064 +vt 1.255208 8.155064 +vt 1.255208 -0.896568 +vt 1.255208 7.458785 +f 1/1/1 2/2/2 3/3/3 +f 2/2/2 1/1/1 4/4/4 +f 5/5/5 6/6/6 7/7/7 +f 6/6/6 5/5/5 8/8/8 +f 8/8/8 5/5/5 9/9/9 +f 8/8/8 9/9/9 10/10/10 +f 8/8/8 10/10/10 11/11/11 +f 8/8/8 11/11/11 12/12/12 +f 8/8/8 12/12/12 13/13/13 +f 8/8/8 13/13/13 14/14/14 +f 15/15/15 16/16/16 17/17/17 +f 16/16/16 15/15/15 18/18/18 +f 19/19/19 20/20/20 21/21/21 +f 20/20/20 19/19/19 22/22/22 +f 22/22/22 19/19/19 23/23/23 +f 23/23/23 19/19/19 24/24/24 +f 24/24/24 19/19/19 25/25/25 +f 25/25/25 19/19/19 26/26/26 +f 26/26/26 19/19/19 27/27/27 +f 27/27/27 19/19/19 28/28/28 +f 29/29/29 30/30/30 31/31/31 +f 30/30/30 29/29/29 32/32/32 +f 33/33/33 34/34/34 35/35/35 +f 34/34/34 33/33/33 36/36/36 +f 37/37/37 38/38/38 39/39/39 +f 38/38/38 37/37/37 40/40/40 +f 40/40/40 37/37/37 41/41/41 +f 40/40/40 41/41/41 42/42/42 +f 43/43/43 44/44/44 45/45/45 +f 44/44/44 43/43/43 46/46/46 +f 47/47/47 48/48/48 49/49/49 +f 48/48/48 47/47/47 50/50/50 +f 48/48/48 50/50/50 51/51/51 +f 48/48/48 51/51/51 52/52/52 +f 53/53/53 54/54/54 55/55/55 +f 54/54/54 53/53/53 56/56/56 +f 57/57/57 58/58/58 59/59/59 +f 58/58/58 57/57/57 60/60/60 +f 61/61/61 62/62/62 63/63/63 +f 62/62/62 61/61/61 64/64/64 +f 65/65/65 66/66/66 67/67/67 +f 66/66/66 65/65/65 68/68/68 +f 69/69/69 70/70/70 71/71/71 +f 70/70/70 69/69/69 72/72/72 +f 73/73/73 74/74/74 75/75/75 +f 74/74/74 73/73/73 76/76/76 +f 77/77/77 78/78/78 79/79/79 +f 78/78/78 77/77/77 80/80/80 +f 80/80/80 77/77/77 81/81/81 +f 82/82/82 83/83/83 84/84/84 +f 83/83/83 82/82/82 85/85/85 +f 85/85/85 82/82/82 86/86/86 +f 85/85/85 86/86/86 87/87/87 +f 88/88/88 89/89/89 90/90/90 +f 89/89/89 88/88/88 91/91/91 +f 91/91/91 88/88/88 92/92/92 +f 92/92/92 88/88/88 93/93/93 +f 94/94/94 95/95/95 96/96/96 +f 95/95/95 94/94/94 97/97/97 +f 97/97/97 94/94/94 98/98/98 +f 98/98/98 94/94/94 99/99/99 +f 99/99/99 94/94/94 100/100/100 +f 100/100/100 94/94/94 101/101/101 +f 101/101/101 94/94/94 102/102/102 +f 102/102/102 94/94/94 103/103/103 +f 104/104/104 105/105/105 106/106/106 +f 105/105/105 104/104/104 107/107/107 +f 108/108/108 109/109/109 110/110/110 +f 109/109/109 108/108/108 111/111/111 +f 112/112/112 113/113/113 114/114/114 +f 113/113/113 112/112/112 115/115/115 +f 115/115/115 112/112/112 116/116/116 +f 115/115/115 116/116/116 117/117/117 +f 115/115/115 117/117/117 118/118/118 +f 115/115/115 118/118/118 119/119/119 +f 115/115/115 119/119/119 120/120/120 +f 115/115/115 120/120/120 121/121/121 +f 122/122/122 123/123/123 124/124/124 +f 123/123/123 122/122/122 125/125/125 +f 125/125/125 122/122/122 126/126/126 +f 126/126/126 122/122/122 127/127/127 +f 127/127/127 128/128/128 126/126/126 +f 128/128/128 127/127/127 129/129/129 +f 130/130/130 131/131/131 132/132/132 +f 131/131/131 130/130/130 133/133/133 +f 133/133/133 130/130/130 134/134/134 +f 134/134/134 130/130/130 135/135/135 +f 135/135/135 130/130/130 136/136/136 +f 135/135/135 136/136/136 137/137/137 + +g marssurvive_door1_closed_Main-969696 +usemtl 969696 +v -0.873818 -0.262794 -0.380736 +v -0.366654 -0.475020 -0.385905 +v -0.729899 -0.475020 -0.382203 +v -0.680963 -0.050568 -0.382701 +v -1.017737 -0.050568 -0.379269 +v -1.017737 0.373884 -0.379269 +v -0.680963 0.373884 -0.382701 +v -0.703429 0.798336 -0.382472 +v -0.366654 0.798336 -0.385905 +v -0.703429 1.222788 -0.382472 +v -0.366654 1.222788 -0.385905 +v -1.017737 1.647240 -0.379269 +v -0.680963 1.647240 -0.382701 +v -1.017737 2.071692 -0.379269 +v -0.680963 2.071692 -0.382701 +v -0.841873 2.283918 -0.381062 +v -0.366654 2.496144 -0.385905 +v -0.666009 2.496144 -0.382854 +v -0.672503 -0.050568 0.447518 +v -0.682784 -0.475020 0.447623 +v -0.358194 -0.475020 0.444315 +v -0.839939 -0.262794 0.449224 +v -0.997093 -0.050568 0.450826 +v -0.672503 0.373884 0.447518 +v -0.997093 0.373884 0.450826 +v -0.358194 0.798336 0.444315 +v -0.682784 0.798336 0.447623 +v -0.358194 1.222788 0.444315 +v -0.682784 1.222788 0.447623 +v -0.672503 1.647240 0.447518 +v -0.997093 1.647240 0.450826 +v -0.672503 2.071692 0.447518 +v -0.997093 2.071692 0.450826 +v -0.358194 2.496144 0.444315 +v -0.839939 2.283918 0.449224 +v -0.682784 2.496144 0.447623 +v -0.198747 -0.273274 0.433387 +v -0.361950 -0.485500 0.433387 +v -0.041584 -0.485500 0.433387 +v -0.676275 -0.061048 0.433387 +v -0.355909 -0.061048 0.433387 +v -0.676275 0.363404 0.433387 +v -0.355909 0.363404 0.433387 +v -0.041584 0.787856 0.433387 +v -0.361950 0.787856 0.433387 +v -0.041584 1.212308 0.433387 +v -0.361950 1.212308 0.433387 +v -0.355909 1.636760 0.433387 +v -0.676275 1.636760 0.433387 +v -0.355909 2.061212 0.433387 +v -0.676275 2.061212 0.433387 +v -0.174863 2.305689 0.433387 +v -0.628507 2.125715 0.433387 +v -0.361950 2.485664 0.433387 +v -0.041584 2.485664 0.433387 +v -0.676275 -0.061048 -0.382587 +v -0.047625 -0.485500 -0.382587 +v -0.361950 -0.485500 -0.382587 +v -0.204787 -0.273274 -0.382587 +v -0.361950 -0.061048 -0.382587 +v -0.676275 0.363404 -0.382587 +v -0.361950 0.363404 -0.382587 +v -0.361945 0.787851 -0.382587 +v -0.047620 0.787851 -0.382587 +v -0.361948 1.212308 -0.382587 +v -0.047623 1.212308 -0.382587 +v -0.676275 1.636760 -0.382587 +v -0.361950 1.636760 -0.382587 +v -0.676275 2.061212 -0.382587 +v -0.361950 2.061212 -0.382587 +v -0.361950 2.485664 -0.382587 +v -0.204787 2.273438 -0.382587 +v -0.047625 2.485664 -0.382587 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn -0.010190 0.000000 -0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vt 2.888081 0.414611 +vt 1.224071 -0.158305 +vt 2.415882 -0.158305 +vt 2.255321 0.987528 +vt 3.360280 0.987528 +vt 3.360280 2.133361 +vt 2.255321 2.133361 +vt 2.329030 3.279195 +vt 1.224071 3.279195 +vt 2.329030 4.425028 +vt 1.224071 4.425028 +vt 3.360280 5.570861 +vt 2.255321 5.570861 +vt 3.360280 6.716695 +vt 2.255321 6.716695 +vt 2.783268 7.289611 +vt 1.224071 7.862528 +vt 2.206255 7.862528 +vt -2.255321 0.987528 +vt -2.289056 -0.158305 +vt -1.224071 -0.158305 +vt -2.804681 0.414611 +vt -3.320306 0.987528 +vt -2.255321 2.133361 +vt -3.320306 2.133361 +vt -1.224071 3.279195 +vt -2.289056 3.279195 +vt -1.224071 4.425028 +vt -2.289056 4.425028 +vt -2.255321 5.570861 +vt -3.320306 5.570861 +vt -2.255321 6.716695 +vt -3.320306 6.716695 +vt -1.224071 7.862528 +vt -2.804681 7.289611 +vt -2.289056 7.862528 +vt 1.566693 0.386320 +vt 1.031250 -0.186597 +vt 2.082318 -0.186597 +vt 0.000000 0.959236 +vt 1.051068 0.959236 +vt 0.000000 2.105070 +vt 1.051068 2.105070 +vt 2.082318 3.250903 +vt 1.031250 3.250903 +vt 2.082318 4.396736 +vt 1.031250 4.396736 +vt 1.051068 5.542570 +vt 0.000000 5.542570 +vt 1.051068 6.688403 +vt 0.000000 6.688403 +vt 1.645052 7.348385 +vt 0.156718 6.862534 +vt 1.031250 7.834236 +vt 2.082318 7.834236 +vt 0.000000 0.959236 +vt -2.062500 -0.186597 +vt -1.031250 -0.186597 +vt -1.546875 0.386320 +vt -1.031250 0.959236 +vt 0.000000 2.105070 +vt -1.031250 2.105070 +vt -1.031265 3.250890 +vt -2.062515 3.250890 +vt -1.031257 4.396736 +vt -2.062507 4.396736 +vt 0.000000 5.542570 +vt -1.031250 5.542570 +vt 0.000000 6.688403 +vt -1.031250 6.688403 +vt -1.031250 7.834236 +vt -1.546875 7.261320 +vt -2.062500 7.834236 +f 138/138/138 139/139/139 140/140/140 +f 139/139/139 138/138/138 141/141/141 +f 141/141/141 138/138/138 142/142/142 +f 141/141/141 142/142/142 143/143/143 +f 141/141/141 143/143/143 144/144/144 +f 144/144/144 143/143/143 145/145/145 +f 144/144/144 145/145/145 146/146/146 +f 146/146/146 145/145/145 147/147/147 +f 146/146/146 147/147/147 148/148/148 +f 148/148/148 147/147/147 149/149/149 +f 148/148/148 149/149/149 150/150/150 +f 150/150/150 149/149/149 151/151/151 +f 150/150/150 151/151/151 152/152/152 +f 152/152/152 151/151/151 153/153/153 +f 152/152/152 153/153/153 154/154/154 +f 154/154/154 153/153/153 155/155/155 +f 156/156/156 157/157/157 158/158/158 +f 157/157/157 156/156/156 159/159/159 +f 159/159/159 156/156/156 160/160/160 +f 160/160/160 156/156/156 161/161/161 +f 160/160/160 161/161/161 162/162/162 +f 162/162/162 161/161/161 163/163/163 +f 162/162/162 163/163/163 164/164/164 +f 164/164/164 163/163/163 165/165/165 +f 164/164/164 165/165/165 166/166/166 +f 166/166/166 165/165/165 167/167/167 +f 166/166/166 167/167/167 168/168/168 +f 168/168/168 167/167/167 169/169/169 +f 168/168/168 169/169/169 170/170/170 +f 170/170/170 169/169/169 171/171/171 +f 170/170/170 171/171/171 172/172/172 +f 172/172/172 171/171/171 173/173/173 +f 174/174/174 175/175/175 176/176/176 +f 175/175/175 174/174/174 177/177/177 +f 177/177/177 174/174/174 178/178/178 +f 177/177/177 178/178/178 179/179/179 +f 179/179/179 178/178/178 180/180/180 +f 179/179/179 180/180/180 181/181/181 +f 179/179/179 181/181/181 182/182/182 +f 182/182/182 181/181/181 183/183/183 +f 182/182/182 183/183/183 184/184/184 +f 184/184/184 183/183/183 185/185/185 +f 184/184/184 185/185/185 186/186/186 +f 186/186/186 185/185/185 187/187/187 +f 186/186/186 187/187/187 188/188/188 +f 188/188/188 187/187/187 189/189/189 +f 188/188/188 189/189/189 190/190/190 +f 190/190/190 189/189/189 191/191/191 +f 191/191/191 189/189/189 192/192/192 +f 193/193/193 194/194/194 195/195/195 +f 194/194/194 193/193/193 196/196/196 +f 196/196/196 193/193/193 197/197/197 +f 197/197/197 193/193/193 198/198/198 +f 197/197/197 198/198/198 199/199/199 +f 199/199/199 198/198/198 200/200/200 +f 199/199/199 200/200/200 201/201/201 +f 201/201/201 200/200/200 202/202/202 +f 201/201/201 202/202/202 203/203/203 +f 203/203/203 202/202/202 204/204/204 +f 203/203/203 204/204/204 205/205/205 +f 205/205/205 204/204/204 206/206/206 +f 205/205/205 206/206/206 207/207/207 +f 207/207/207 206/206/206 208/208/208 +f 207/207/207 208/208/208 209/209/209 +f 209/209/209 208/208/208 210/210/210 + +g marssurvive_door1_closed_Main-Charcoal +usemtl Charcoal +v -3.290678 -0.262794 -0.356106 +v -0.729899 -0.475020 -0.382203 +v -3.290678 -0.475020 -0.356106 +v -0.873818 -0.262794 -0.380736 +v -0.839939 -0.262794 0.449224 +v -3.282217 -0.475020 0.474113 +v -0.682784 -0.475020 0.447623 +v -3.282217 -0.262794 0.474113 +v 2.247900 -0.273274 0.433387 +v -0.041584 -0.485500 0.433387 +v 2.247900 -0.485500 0.433387 +v -0.198747 -0.273274 0.433387 +v -0.204787 -0.273274 -0.382587 +v 2.247900 -0.485500 -0.382587 +v -0.047625 -0.485500 -0.382587 +v 2.247900 -0.273274 -0.382587 +vn -0.010190 -0.000000 -0.999948 +vn -0.010190 -0.000000 -0.999948 +vn -0.010190 -0.000000 -0.999948 +vn -0.010190 -0.000000 -0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.010190 0.000000 0.999948 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vt 129.404644 -10.346209 +vt 28.581371 -18.701562 +vt 129.404644 -18.701562 +vt 34.247762 -10.346209 +vt -33.246964 -10.346209 +vt -129.404644 -18.701562 +vt -27.059464 -18.701562 +vt -129.404644 -10.346209 +vt 88.500000 -10.758811 +vt -1.637179 -19.114163 +vt 88.500000 -19.114163 +vt -7.824679 -10.758811 +vt 8.062500 -10.758811 +vt -88.500000 -19.114163 +vt 1.875000 -19.114163 +vt -88.500000 -10.758811 +f 211/211/211 212/212/212 213/213/213 +f 212/212/212 211/211/211 214/214/214 +f 215/215/215 216/216/216 217/217/217 +f 216/216/216 215/215/215 218/218/218 +f 219/219/219 220/220/220 221/221/221 +f 220/220/220 219/219/219 222/222/222 +f 223/223/223 224/224/224 225/225/225 +f 224/224/224 223/223/223 226/226/226 + +g marssurvive_door1_closed_Main-Material1 +usemtl Material1 +v -0.682784 2.496144 0.447623 +v -3.282217 2.283918 0.474113 +v -0.839939 2.283918 0.449224 +v -3.282217 2.496144 0.474113 +v -3.290678 2.496144 -0.356106 +v -0.841873 2.283918 -0.381062 +v -3.290678 2.283918 -0.356106 +v -0.666009 2.496144 -0.382854 +v 2.247900 2.485664 0.433387 +v -0.174863 2.305689 0.433387 +v 2.247900 2.305689 0.433387 +v -0.041584 2.485664 0.433387 +v -0.047625 2.485664 -0.382587 +v 2.247900 2.273438 -0.382587 +v -0.204787 2.273438 -0.382587 +v 2.247900 2.485664 -0.382587 +vn 0.010190 -0.000000 0.999948 +vn 0.010190 -0.000000 0.999948 +vn 0.010190 -0.000000 0.999948 +vn 0.010190 -0.000000 0.999948 +vn -0.010190 -0.000000 -0.999948 +vn -0.010190 -0.000000 -0.999948 +vn -0.010190 -0.000000 -0.999948 +vn -0.010190 -0.000000 -0.999948 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vt -0.057226 0.196563 +vt -0.270446 0.182240 +vt -0.070117 0.182240 +vt -0.270446 0.196563 +vt 0.270446 0.196563 +vt 0.069582 0.182240 +vt 0.270446 0.182240 +vt 0.055156 0.196563 +vt 0.239844 0.195856 +vt 0.041126 0.183710 +vt 0.239844 0.183710 +vt 0.052058 0.195856 +vt -0.051562 0.195856 +vt -0.239844 0.181533 +vt -0.038672 0.181533 +vt -0.239844 0.195856 +f 227/227/227 228/228/228 229/229/229 +f 228/228/228 227/227/227 230/230/230 +f 231/231/231 232/232/232 233/233/233 +f 232/232/232 231/231/231 234/234/234 +f 235/235/235 236/236/236 237/237/237 +f 236/236/236 235/235/235 238/238/238 +f 239/239/239 240/240/240 241/241/241 +f 240/240/240 239/239/239 242/242/242 + diff --git a/mods/marsdoors/moreblocks.lua b/mods/marsdoors/moreblocks.lua new file mode 100644 index 00000000..718b7ba1 --- /dev/null +++ b/mods/marsdoors/moreblocks.lua @@ -0,0 +1,98 @@ +stairsplus:register_all("marsdoors", "shieldblock", "marsdoors:shieldblock", { + description = "Shieldblock", + tiles = {"marsdoors_shieldblock.png"}, + groups = {cracky=1}, + sounds = default.node_sound_stone_defaults(), +}) + +stairsplus:register_all("marsdoors", "steelwallblock", "marsdoors:steelwallblock", { + description = "Steelwallblock", + tiles = {"marsdoors_wall.png"}, + groups = {cracky=1}, + sounds = default.node_sound_stone_defaults(), +}) + +stairsplus:register_all("marsdoors", "oxogen", "marsdoors:oxogen", { + description = "Oxogen Block", + tiles = {"marsdoors_oxogen.png"}, + groups = {crumbly = 2}, + sounds = default.node_sound_glass_defaults(), +}) + +stairsplus:register_all("marsdoors", "warning", "marsdoors:warning", { + description = "Warning tape block", + tiles = {"marsdoors_warntape.png"}, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +table.insert(circular_saw.known_stairs, "marsdoors:shieldblock") +table.insert(circular_saw.known_stairs, "marsdoors:steelwallblock") +table.insert(circular_saw.known_stairs, "marsdoors:oxogen") +table.insert(circular_saw.known_stairs, "marsdoors:warning") + +-- and now for the aliases + +local saw_names = { + {"micro", "_1"}, + {"panel", "_1"}, + {"micro", "_2"}, + {"panel", "_2"}, + {"micro", "_4"}, + {"panel", "_4"}, + {"micro", ""}, + {"panel", ""}, + + {"micro", "_12"}, + {"panel", "_12"}, + {"micro", "_14"}, + {"panel", "_14"}, + {"micro", "_15"}, + {"panel", "_15"}, + {"stair", "_outer"}, + {"stair", ""}, + + {"stair", "_inner"}, + {"slab", "_1"}, + {"slab", "_2"}, + {"slab", "_quarter"}, + {"slab", ""}, + {"slab", "_three_quarter"}, + {"slab", "_14"}, + {"slab", "_15"}, + + {"slab", "_two_sides"}, + {"slab", "_three_sides"}, + {"slab", "_three_sides_u"}, + {"stair", "_half"}, + {"stair", "_alt_1"}, + {"stair", "_alt_2"}, + {"stair", "_alt_4"}, + {"stair", "_alt"}, + + {"slope", ""}, + {"slope", "_half"}, + {"slope", "_half_raised"}, + {"slope", "_inner"}, + {"slope", "_inner_half"}, + {"slope", "_inner_half_raised"}, + {"slope", "_inner_cut"}, + {"slope", "_inner_cut_half"}, + + {"slope", "_inner_cut_half_raised"}, + {"slope", "_outer"}, + {"slope", "_outer_half"}, + {"slope", "_outer_half_raised"}, + {"slope", "_outer_cut"}, + {"slope", "_outer_cut_half"}, + {"slope", "_outer_cut_half_raised"}, + {"slope", "_cut"}, +} + +for i = 1, #saw_names do + local t = saw_names[i] + minetest.register_alias("stairs" .. ":" .. t[1] .. "_" .. "shieldblock" .. t[2], "marsdoors" .. ":" .. t[1] .. "_" .. "shieldblock" .. t[2]) + minetest.register_alias("stairs" .. ":" .. t[1] .. "_" .. "steelwallblock" .. t[2], "marsdoors" .. ":" .. t[1] .. "_" .. "steelwallblock" .. t[2]) + minetest.register_alias("stairs" .. ":" .. t[1] .. "_" .. "oxogen" .. t[2], "marsdoors" .. ":" .. t[1] .. "_" .. "oxogen" .. t[2]) + minetest.register_alias("stairs" .. ":" .. t[1] .. "_" .. "warning" .. t[2], "marsdoors" .. ":" .. t[1] .. "_" .. "warning" .. t[2]) +end \ No newline at end of file diff --git a/mods/marsdoors/nodes.lua b/mods/marsdoors/nodes.lua new file mode 100644 index 00000000..5fa9b763 --- /dev/null +++ b/mods/marsdoors/nodes.lua @@ -0,0 +1,353 @@ +marsdoors = {} + +minetest.register_node("marsdoors:door1_closed", { + description = "Gate (does not support air)", + drawtype = "mesh", + mesh = "marsdoors_door1_closed.obj", + wield_scale = {x=0.5, y=0.5, z=0.5}, +selection_box = { + type = "fixed", + fixed = {-2.2, -0.5, -0.5, 3.2, 2.5, 0.5} + + }, +collision_box = { + type = "fixed", + fixed = {{-0.5, -0.5, -0.5, 1.5, 2.5, 0.5},}}, + tiles = {"marsdoors_shieldblock.png","marsdoors_warntape.png","default_obsidian.png","default_obsidian.png","marsdoors_warntape.png","default_obsidian.png"}, + groups = {cracky = 1, level = 2, not_in_creative_inventory=0}, + sounds = default.node_sound_wood_defaults(), + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + is_ground_content = false, + damage_per_second = 20, +on_rightclick = function(pos, node, player, itemstack, pointed_thing) + minetest.swap_node(pos, {name="marsdoors:door1", param2=minetest.get_node(pos).param2}) + minetest.sound_play("marsdoors_door1", {pos=pos, gain = 1, max_hear_distance = 5}) + end, +}) + + +minetest.register_node("marsdoors:door1", { + description = "Gate (open)", + drawtype = "mesh", + mesh = "marsdoors_door1.obj", + drop = "marsdoors:door1_closed", + wield_scale = {x=0.5, y=0.5, z=0.5}, +selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 1.5, 2.5, 0.5} + }, +collision_box = { + type = "fixed",fixed = { + {-3.4, -0.5, -0.5, -0.5, 2.5, 0.5}, + {4.4, -0.5, -0.5, 1.5, 2.5, 0.5}}}, + tiles = {"marsdoors_shieldblock.png","marsdoors_warntape.png","default_obsidian.png","default_obsidian.png","marsdoors_warntape.png","default_obsidian.png"}, + groups = {cracky = 1, level = 2, not_in_creative_inventory=1}, + sounds = default.node_sound_wood_defaults(), + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + is_ground_content = false, +on_rightclick = function(pos, node, player, itemstack, pointed_thing) + minetest.swap_node(pos, {name="marsdoors:door1_closed", param2=minetest.get_node(pos).param2}) + minetest.sound_play("marsdoors_door1", {pos=pos, gain = 1, max_hear_distance = 5}) + end, +}) + + +minetest.register_node("marsdoors:trapdoor_1", { + description = "Trap door", + drawtype = "nodebox", + paramtype = "light", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.375, -0.5, 0.5, -0.4375, 0.5}, + {-0.5, 0.4375, -0.5, 0.5, 0.375, 0.5}, + } + }, + tiles = {"marsdoors_shieldblock.png","marsdoors_shieldblock.png","marsdoors_door2.png","marsdoors_warntape.png","marsdoors_door2.png","marsdoors_door2_2.png",}, + groups = {cracky = 1, level = 2, not_in_creative_inventory=0}, + sounds = default.node_sound_stone_defaults(), + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + is_ground_content = false, + climbable = true, +on_rightclick = function(pos, node, player, itemstack, pointed_thing) + minetest.swap_node(pos, {name="marsdoors:trapdoor_2", param2=minetest.get_node(pos).param2}) + minetest.sound_play("marsdoors_door2", {pos=pos, gain = 1, max_hear_distance = 5}) + minetest.after(4, function(pos) + if minetest.get_node(pos).name=="marsdoors:trapdoor_2" then + minetest.swap_node(pos, {name="marsdoors:trapdoor_1", param2=minetest.get_node(pos).param2}) + minetest.sound_play("marsdoors_door2", {pos=pos, gain = 1, max_hear_distance = 5}) + end + end, pos) + + + end, +}) +minetest.register_node("marsdoors:trapdoor_2", { + description = "Trap door (open)", + drop="marsdoors:trapdoor_1", + drawtype = "nodebox", + paramtype = "light", + node_box = { + type = "fixed", + fixed = { + {0.375, -0.375, -0.5, 1.5, -0.4375, 0.5}, + {0.375, 0.4375, -0.5, 1.5, 0.375, 0.5}, + } + }, + tiles = {"marsdoors_shieldblock.png","marsdoors_shieldblock.png","marsdoors_door2_open.png","marsdoors_warntape.png","marsdoors_door2_open.png","marsdoors_door2_2_open.png",}, + groups = {cracky = 1, level = 2, not_in_creative_inventory=1}, + sounds = default.node_sound_wood_defaults(), + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + is_ground_content = false, + climbable = true, +on_rightclick = function(pos, node, player, itemstack, pointed_thing) + local p={x=pos.x,y=pos.y+1,z=pos.z} + minetest.sound_play("marsdoors_door2", {pos=pos, gain = 1, max_hear_distance = 5}) + minetest.swap_node(pos, {name="marsdoors:trapdoor_1", param2=minetest.get_node(pos).param2}) + end, +}) + + + + +minetest.register_node("marsdoors:door2_1", { + description = "Door", + drop="marsdoors:door2_1", + drawtype = "nodebox", + paramtype = "light", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.125, 0.5, 0.5, 0.125}, + } + }, + tiles = {"marsdoors_warntape.png","marsdoors_warntape.png","marsdoors_door2.png","marsdoors_warntape.png","marsdoors_door2.png","marsdoors_door2_2.png",}, + groups = {cracky = 1, level = 2, not_in_creative_inventory=0}, + sounds = default.node_sound_stone_defaults(), + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + is_ground_content = false, +after_place_node = function(pos, placer, itemstack, pointed_thing) + local p={x=pos.x,y=pos.y+1,z=pos.z} + if minetest.registered_nodes[minetest.get_node(p).name].walkable then + return false + else + minetest.set_node(p, {name = "marsdoors:door2_2",param2=minetest.get_node(pos).param2}) + end + end, +on_rightclick = function(pos, node, player, itemstack, pointed_thing) + local p={x=pos.x,y=pos.y+1,z=pos.z} + minetest.swap_node(p, {name="marsdoors:door2_open_2", param2=minetest.get_node(pos).param2}) + minetest.swap_node(pos, {name="marsdoors:door2_open_1", param2=minetest.get_node(pos).param2}) + minetest.sound_play("marsdoors_door2", {pos=pos, gain = 1, max_hear_distance = 5}) + minetest.after(2, function(pos,p) + if minetest.get_node(pos).name=="marsdoors:door2_open_1" then + minetest.sound_play("marsdoors_door2", {pos=pos, gain = 1, max_hear_distance = 5}) + minetest.swap_node(p, {name="marsdoors:door2_2", param2=minetest.get_node(pos).param2}) + minetest.swap_node(pos, {name="marsdoors:door2_1", param2=minetest.get_node(pos).param2}) + end + end, pos,p) + end, + after_dig_node = function (pos, name, digger) + marsdoors.replacenode({x=pos.x,y=pos.y+1,z=pos.z}) + end, +}) + +minetest.register_node("marsdoors:door2_2", { + description = "Door 2-1", + drawtype = "nodebox", + drop="marsdoors:door2_1", + paramtype = "light", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.125, 0.5, 0.5, 0.125}, + } + }, + tiles = {"marsdoors_warntape.png","marsdoors_warntape.png","marsdoors_door2.png","marsdoors_warntape.png","marsdoors_door2.png","marsdoors_door2_2.png",}, + groups = {cracky = 1, level = 2, not_in_creative_inventory=1}, + sounds = default.node_sound_wood_defaults(), + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + is_ground_content = false, +on_rightclick = function(pos, node, player, itemstack, pointed_thing) + local p={x=pos.x,y=pos.y-1,z=pos.z} + minetest.swap_node(p, {name="marsdoors:door2_open_1", param2=minetest.get_node(pos).param2}) + minetest.swap_node(pos, {name="marsdoors:door2_open_2", param2=minetest.get_node(pos).param2}) + minetest.sound_play("marsdoors_door2", {pos=pos, gain = 1, max_hear_distance = 5}) + minetest.after(2, function(pos,p) + if minetest.get_node(pos).name=="marsdoors:door2_open_2" then + minetest.sound_play("marsdoors_door2", {pos=pos, gain = 1, max_hear_distance = 5}) + minetest.swap_node(p, {name="marsdoors:door2_1", param2=minetest.get_node(pos).param2}) + minetest.swap_node(pos, {name="marsdoors:door2_2", param2=minetest.get_node(pos).param2}) + end + end, pos,p) + end, + after_dig_node = function (pos, name, digger) + marsdoors.replacenode({x=pos.x,y=pos.y-1,z=pos.z}) + end, +}) + +minetest.register_node("marsdoors:door2_open_1", { + description = "Door (open) 2-o-1", + drop="marsdoors:door2_1", + drawtype = "nodebox", + paramtype = "light", + node_box = { + type = "fixed", + fixed = { + {0.41, -0.5, -0.124, 1.41, 0.5, 0.125}, + } + }, + tiles = {"marsdoors_warntape.png","marsdoors_warntape.png","marsdoors_door2_open.png","marsdoors_warntape.png","marsdoors_door2_open.png","marsdoors_door2_2_open.png",}, + groups = {cracky = 1, level = 2, not_in_creative_inventory=1}, + sounds = default.node_sound_wood_defaults(), + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + is_ground_content = false, +on_rightclick = function(pos, node, player, itemstack, pointed_thing) + local p={x=pos.x,y=pos.y+1,z=pos.z} + minetest.sound_play("marsdoors_door2", {pos=pos, gain = 1, max_hear_distance = 5}) + minetest.swap_node(p, {name="marsdoors:door2_2", param2=minetest.get_node(pos).param2}) + minetest.swap_node(pos, {name="marsdoors:door2_1", param2=minetest.get_node(pos).param2}) + end, + after_dig_node = function (pos, name, digger) + marsdoors.replacenode({x=pos.x,y=pos.y+1,z=pos.z}) + end, +}) + +minetest.register_node("marsdoors:door2_open_2", { + description = "Door (open) 2-o-1", + drawtype = "nodebox", + drop="marsdoors:door2_1", + paramtype = "light", + node_box = { + type = "fixed", + fixed = { + {0.41, -0.5, -0.124, 1.41, 0.5, 0.125}, + } + }, + tiles = {"marsdoors_warntape.png","marsdoors_warntape.png","marsdoors_door2_open.png","marsdoors_warntape.png","marsdoors_door2_open.png","marsdoors_door2_2_open.png",}, + groups = {cracky = 1, level = 2, not_in_creative_inventory=1}, + sounds = default.node_sound_wood_defaults(), + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + is_ground_content = false, +on_rightclick = function(pos, node, player, itemstack, pointed_thing) + local p={x=pos.x,y=pos.y-1,z=pos.z} + minetest.sound_play("marsdoors_door2", {pos=pos, gain = 1, max_hear_distance = 5}) + minetest.swap_node(p, {name="marsdoors:door2_1", param2=minetest.get_node(pos).param2}) + minetest.swap_node(pos, {name="marsdoors:door2_2", param2=minetest.get_node(pos).param2}) + end, + after_dig_node = function (pos, name, digger) + marsdoors.replacenode({x=pos.x,y=pos.y-1,z=pos.z}) + end, +}) + + +minetest.register_node("marsdoors:warning", { + description = "Warning tape block", + tiles = {"marsdoors_warntape.png"}, + groups = {cracky = 2,}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("marsdoors:shieldblock", { + description = "Shieldblock", + tiles = {"marsdoors_shieldblock.png"}, + groups = {cracky = 1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("marsdoors:steelwallblock", { + description = "Steel wallblock", + tiles = {"marsdoors_wall.png"}, + groups = {cracky = 1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("marsdoors:oxogen", { + description = "Oxygen block", + tiles = {"marsdoors_oxogen.png"}, + drawtype="glasslike", + groups = {crumbly = 2}, + paramtype = "light", + sunlight_propagates = true, + alpha = 50, + sounds = default.node_sound_glass_defaults(), +}) + + +minetest.register_node("marsdoors:clight", { + description = "Ceiling light", + tiles = {"default_cloud.png"}, + drawtype = "nodebox", + groups = {snappy = 3, not_in_creative_inventory=0}, + sounds = default.node_sound_glass_defaults(), + is_ground_content = false, + paramtype = "light", + paramtype2 = "facedir", + node_box = {type="fixed",fixed={-0.2,0.4,-0.4,0.2,0.6,0.4}}, + light_source=14, +}) + + + +minetest.register_node("marsdoors:crystal", { + description = "Crystal", + drawtype = "mesh", + mesh = "marsdoors_crystal.obj", + visual_scale = 0.16, + wield_scale = {x=1, y=1, z=1}, + alpha = 20, + tiles = { + { + name = "marsdoors_glitsh.png^[colorize:#cc0000aa", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 2.0, + }, + }, + }, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + damage_per_second = 4, + + is_ground_content = false, + light_source=4, + groups = {cracky = 2, level = 2}, +}) + +function marsdoors.replacenode(pos) + minetest.set_node(pos, {name = "air"}) +end + +minetest.register_alias("marssurvive:door1_closed", "marsdoors:door1_closed") +minetest.register_alias("marssurvive:door1", "marsdoors:door1") +minetest.register_alias("marssurvive:trapdoor_1", "marsdoors:trapdoor_1") +minetest.register_alias("marssurvive:trapdoor_2", "marsdoors:trapdoor_2") +minetest.register_alias("marssurvive:door2_1", "marsdoors:door2_1") +minetest.register_alias("marssurvive:door2_2", "marsdoors:door2_2") +minetest.register_alias("marssurvive:door2_open_1", "marsdoors:door2_open_1") +minetest.register_alias("marssurvive:door2_open_2", "marsdoors:door2_open_2") +minetest.register_alias("marssurvive:warning", "marsdoors:warning") +minetest.register_alias("marssurvive:shieldblock", "marsdoors:shieldblock") +minetest.register_alias("marssurvive:steelwallblock", "marsdoors:steelwallblock") +minetest.register_alias("marssurvive:oxogen", "marsdoors:oxogen") +minetest.register_alias("marssurvive:clight", "marsdoors:clight") +minetest.register_alias("marssurvive:crystal", "marsdoors:crystal") diff --git a/mods/marsdoors/readme.md b/mods/marsdoors/readme.md new file mode 100644 index 00000000..27fbc079 --- /dev/null +++ b/mods/marsdoors/readme.md @@ -0,0 +1,2 @@ +Marsdoors extracted from https://github.com/linushsao/marsu_game-linus-v0.2 - you definitly should check this game out! +Only few modifications by Illuna here. diff --git a/mods/marsdoors/sounds/marsdoors_door2.ogg b/mods/marsdoors/sounds/marsdoors_door2.ogg new file mode 100644 index 00000000..9693f900 Binary files /dev/null and b/mods/marsdoors/sounds/marsdoors_door2.ogg differ diff --git a/mods/marsdoors/textures/marsdoors_door2.png b/mods/marsdoors/textures/marsdoors_door2.png new file mode 100644 index 00000000..580b8ad5 Binary files /dev/null and b/mods/marsdoors/textures/marsdoors_door2.png differ diff --git a/mods/marsdoors/textures/marsdoors_door2_2.png b/mods/marsdoors/textures/marsdoors_door2_2.png new file mode 100644 index 00000000..cc7dd6c9 Binary files /dev/null and b/mods/marsdoors/textures/marsdoors_door2_2.png differ diff --git a/mods/marsdoors/textures/marsdoors_door2_2_open.png b/mods/marsdoors/textures/marsdoors_door2_2_open.png new file mode 100644 index 00000000..515791aa Binary files /dev/null and b/mods/marsdoors/textures/marsdoors_door2_2_open.png differ diff --git a/mods/marsdoors/textures/marsdoors_door2_open.png b/mods/marsdoors/textures/marsdoors_door2_open.png new file mode 100644 index 00000000..97de496e Binary files /dev/null and b/mods/marsdoors/textures/marsdoors_door2_open.png differ diff --git a/mods/marsdoors/textures/marsdoors_glitsh.png b/mods/marsdoors/textures/marsdoors_glitsh.png new file mode 100644 index 00000000..0e100737 Binary files /dev/null and b/mods/marsdoors/textures/marsdoors_glitsh.png differ diff --git a/mods/marsdoors/textures/marsdoors_oxogen.png b/mods/marsdoors/textures/marsdoors_oxogen.png new file mode 100644 index 00000000..628e3131 Binary files /dev/null and b/mods/marsdoors/textures/marsdoors_oxogen.png differ diff --git a/mods/marsdoors/textures/marsdoors_shieldblock.png b/mods/marsdoors/textures/marsdoors_shieldblock.png new file mode 100644 index 00000000..5de0e59a Binary files /dev/null and b/mods/marsdoors/textures/marsdoors_shieldblock.png differ diff --git a/mods/marsdoors/textures/marsdoors_wall.png b/mods/marsdoors/textures/marsdoors_wall.png new file mode 100644 index 00000000..0bb66903 Binary files /dev/null and b/mods/marsdoors/textures/marsdoors_wall.png differ diff --git a/mods/marsdoors/textures/marsdoors_warntape.png b/mods/marsdoors/textures/marsdoors_warntape.png new file mode 100644 index 00000000..549b467e Binary files /dev/null and b/mods/marsdoors/textures/marsdoors_warntape.png differ diff --git a/mods/matrix b/mods/matrix new file mode 160000 index 00000000..b7322ea3 --- /dev/null +++ b/mods/matrix @@ -0,0 +1 @@ +Subproject commit b7322ea304ecf05f4dff9f230a3930168c204037 diff --git a/mods/medieval_craft b/mods/medieval_craft new file mode 160000 index 00000000..d3868c16 --- /dev/null +++ b/mods/medieval_craft @@ -0,0 +1 @@ +Subproject commit d3868c16289c84010890a65191c78d0600d5cd10 diff --git a/mods/medieval_inner_glasses b/mods/medieval_inner_glasses new file mode 160000 index 00000000..e8530dcc --- /dev/null +++ b/mods/medieval_inner_glasses @@ -0,0 +1 @@ +Subproject commit e8530dcc15ef41ee2219e0334f067c16128b6723 diff --git a/mods/mesecons b/mods/mesecons new file mode 160000 index 00000000..21b1600a --- /dev/null +++ b/mods/mesecons @@ -0,0 +1 @@ +Subproject commit 21b1600a2791360bf6c62e24ba89b5acda2e5b48 diff --git a/mods/mg_villages b/mods/mg_villages new file mode 160000 index 00000000..69ac3f26 --- /dev/null +++ b/mods/mg_villages @@ -0,0 +1 @@ +Subproject commit 69ac3f2691e8896082afa8f87504e7ae54ff7071 diff --git a/mods/mob_horse b/mods/mob_horse new file mode 160000 index 00000000..c8b8b654 --- /dev/null +++ b/mods/mob_horse @@ -0,0 +1 @@ +Subproject commit c8b8b654a867cf630cfd7c76d7c56d83ca6ccbbc diff --git a/mods/mobf_trader b/mods/mobf_trader new file mode 160000 index 00000000..cb55c339 --- /dev/null +++ b/mods/mobf_trader @@ -0,0 +1 @@ +Subproject commit cb55c339a53a532e71670bced7a2ba645c0266b0 diff --git a/mods/mobs_animal b/mods/mobs_animal new file mode 160000 index 00000000..f34b5215 --- /dev/null +++ b/mods/mobs_animal @@ -0,0 +1 @@ +Subproject commit f34b5215faf488128d8207b4878a4086778cafcd diff --git a/mods/mobs_monster b/mods/mobs_monster new file mode 160000 index 00000000..74c05ed8 --- /dev/null +++ b/mods/mobs_monster @@ -0,0 +1 @@ +Subproject commit 74c05ed88dfdfa995fc70f9550f03d5c9022b02a diff --git a/mods/mobs_more_monsters b/mods/mobs_more_monsters new file mode 160000 index 00000000..67431cb3 --- /dev/null +++ b/mods/mobs_more_monsters @@ -0,0 +1 @@ +Subproject commit 67431cb36a0212958a5a61cc44fc307965d134e6 diff --git a/mods/mobs_redo b/mods/mobs_redo new file mode 160000 index 00000000..e1194a98 --- /dev/null +++ b/mods/mobs_redo @@ -0,0 +1 @@ +Subproject commit e1194a98ef4dd47c4ba600d834a4302c80e939f4 diff --git a/mods/monitoring b/mods/monitoring new file mode 160000 index 00000000..98e93853 --- /dev/null +++ b/mods/monitoring @@ -0,0 +1 @@ +Subproject commit 98e93853f64d27abb2219590f07d59c8e2e2ea8b diff --git a/mods/moreblocks b/mods/moreblocks new file mode 160000 index 00000000..dce587cf --- /dev/null +++ b/mods/moreblocks @@ -0,0 +1 @@ +Subproject commit dce587cf3397dca7e242455cd017cba50ee28a5b diff --git a/mods/moreglass b/mods/moreglass new file mode 160000 index 00000000..330b0ccd --- /dev/null +++ b/mods/moreglass @@ -0,0 +1 @@ +Subproject commit 330b0ccd05c390b83c1d0570f603729095da53d6 diff --git a/mods/moreores b/mods/moreores new file mode 160000 index 00000000..6ce9acef --- /dev/null +++ b/mods/moreores @@ -0,0 +1 @@ +Subproject commit 6ce9acef58f5f6d8f96ba4c50b0b55d8bc898d18 diff --git a/mods/mtcandy b/mods/mtcandy new file mode 160000 index 00000000..22bf1b4f --- /dev/null +++ b/mods/mtcandy @@ -0,0 +1 @@ +Subproject commit 22bf1b4fb3f1e024b9b0de15885177be2d93c0e9 diff --git a/mods/mtfoods b/mods/mtfoods new file mode 160000 index 00000000..78939363 --- /dev/null +++ b/mods/mtfoods @@ -0,0 +1 @@ +Subproject commit 7893936328b402e5be3cb9366bb37428a7a76cd3 diff --git a/mods/mtg_craftguide/README.md b/mods/mtg_craftguide/README.md new file mode 100644 index 00000000..9c4ed7a4 --- /dev/null +++ b/mods/mtg_craftguide/README.md @@ -0,0 +1,25 @@ +Minetest Game mod: mtg_craftguide +================================= + +Adds a "Recipes" tab to the inventory. Click an item to see it's recipes. +Click again to show usages. + +Based on [craftguide](https://github.com/minetest-mods/craftguide). + +Authors of media +---------------- + +paramat (CC BY-SA 3.0): + +* craftguide_clear_icon.png +* craftguide_next_icon.png +* craftguide_prev_icon.png +* craftguide_search_icon.png + +Neuromancer (CC BY-SA 3.0): + +* craftguide_furnace.png + +Wuzzy (CC BY-SA 3.0): + +* craftguide_shapeless.png diff --git a/mods/mtg_craftguide/init.lua b/mods/mtg_craftguide/init.lua new file mode 100644 index 00000000..f3de3db5 --- /dev/null +++ b/mods/mtg_craftguide/init.lua @@ -0,0 +1,434 @@ +local S = minetest.get_translator("mtg_craftguide") +local esc = minetest.formspec_escape + +local player_data = {} +local init_items = {} +local recipes_cache = {} +local usages_cache = {} + +local group_stereotypes = { + dye = "dye:white", + wool = "wool:white", + coal = "default:coal_lump", + vessel = "vessels:glass_bottle", + flower = "flowers:dandelion_yellow" +} + +local group_names = { + coal = S("Any coal"), + sand = S("Any sand"), + wool = S("Any wool"), + stick = S("Any stick"), + vessel = S("Any vessel"), + wood = S("Any wood planks"), + stone = S("Any kind of stone block"), + + ["color_red,flower"] = S("Any red flower"), + ["color_blue,flower"] = S("Any blue flower"), + ["color_black,flower"] = S("Any black flower"), + ["color_green,flower"] = S("Any green flower"), + ["color_white,flower"] = S("Any white flower"), + ["color_orange,flower"] = S("Any orange flower"), + ["color_violet,flower"] = S("Any violet flower"), + ["color_yellow,flower"] = S("Any yellow flower"), + + ["color_red,dye"] = S("Any red dye"), + ["color_blue,dye"] = S("Any blue dye"), + ["color_cyan,dye"] = S("Any cyan dye"), + ["color_grey,dye"] = S("Any grey dye"), + ["color_pink,dye"] = S("Any pink dye"), + ["color_black,dye"] = S("Any black dye"), + ["color_brown,dye"] = S("Any brown dye"), + ["color_green,dye"] = S("Any green dye"), + ["color_white,dye"] = S("Any white dye"), + ["color_orange,dye"] = S("Any orange dye"), + ["color_violet,dye"] = S("Any violet dye"), + ["color_yellow,dye"] = S("Any yellow dye"), + ["color_magenta,dye"] = S("Any magenta dye"), + ["color_dark_grey,dye"] = S("Any dark grey dye"), + ["color_dark_green,dye"] = S("Any dark green dye") +} + +local function table_replace(t, val, new) + for k, v in pairs(t) do + if v == val then + t[k] = new + end + end +end + +local function extract_groups(str) + if str:sub(1, 6) == "group:" then + return str:sub(7):split() + end + return nil +end + +local function item_has_groups(item_groups, groups) + for _, group in ipairs(groups) do + if not item_groups[group] then + return false + end + end + return true +end + +local function groups_to_item(groups) + if #groups == 1 then + local group = groups[1] + if group_stereotypes[group] then + return group_stereotypes[group] + elseif minetest.registered_items["default:"..group] then + return "default:"..group + end + end + + for name, def in pairs(minetest.registered_items) do + if item_has_groups(def.groups, groups) then + return name + end + end + + return ":unknown" +end + +local function get_craftable_recipes(output) + local recipes = minetest.get_all_craft_recipes(output) + if not recipes then + return nil + end + + for i = #recipes, 1, -1 do + for _, item in pairs(recipes[i].items) do + local groups = extract_groups(item) + if groups then + item = groups_to_item(groups) + end + if not minetest.registered_items[item] then + table.remove(recipes, i) + break + end + end + end + + if #recipes > 0 then + return recipes + end +end + +local function show_item(def) + return def.groups.not_in_craft_guide ~= 1 and def.description ~= "" +end + +local function cache_usages(recipe) + local added = {} + for _, item in pairs(recipe.items) do + if not added[item] then + local groups = extract_groups(item) + if groups then + for name, def in pairs(minetest.registered_items) do + if not added[name] and show_item(def) + and item_has_groups(def.groups, groups) then + local usage = table.copy(recipe) + table_replace(usage.items, item, name) + usages_cache[name] = usages_cache[name] or {} + table.insert(usages_cache[name], usage) + added[name] = true + end + end + elseif show_item(minetest.registered_items[item]) then + usages_cache[item] = usages_cache[item] or {} + table.insert(usages_cache[item], recipe) + end + added[item] = true + end + end +end + +minetest.register_on_mods_loaded(function() + for name, def in pairs(minetest.registered_items) do + if show_item(def) then + local recipes = get_craftable_recipes(name) + if recipes then + recipes_cache[name] = recipes + for _, recipe in ipairs(recipes) do + cache_usages(recipe) + end + end + end + end + for name, def in pairs(minetest.registered_items) do + if recipes_cache[name] or usages_cache[name] then + table.insert(init_items, name) + end + end + table.sort(init_items) +end) + +local function coords(i, cols) + return i % cols, math.floor(i / cols) +end + +local function is_fuel(item) + return minetest.get_craft_result({method="fuel", items={item}}).time > 0 +end + +local function item_button_fs(fs, x, y, item, element_name, groups) + table.insert(fs, ("item_image_button[%s,%s;1.05,1.05;%s;%s;%s]") + :format(x, y, item, element_name, groups and "\n"..esc(S("G")) or "")) + + local tooltip + if groups then + table.sort(groups) + tooltip = group_names[table.concat(groups, ",")] + if not tooltip then + local groupstr = {} + for _, group in ipairs(groups) do + table.insert(groupstr, minetest.colorize("yellow", group)) + end + groupstr = table.concat(groupstr, ", ") + tooltip = S("Any item belonging to the group(s): @1", groupstr) + end + elseif is_fuel(item) then + local itemdef = minetest.registered_items[item:match("%S*")] + local desc = itemdef and itemdef.description or S("Unknown Item") + tooltip = desc.."\n"..minetest.colorize("orange", S("Fuel")) + end + if tooltip then + table.insert(fs, ("tooltip[%s;%s]"):format(element_name, esc(tooltip))) + end +end + +local function recipe_fs(fs, data) + local recipe = data.recipes[data.rnum] + local width = recipe.width + local cooktime, shapeless + + if recipe.method == "cooking" then + cooktime, width = width, 1 + elseif width == 0 then + shapeless = true + if #recipe.items == 1 then + width = 1 + elseif #recipe.items <= 4 then + width = 2 + else + width = 3 + end + end + + table.insert(fs, ("label[5.5,1;%s]"):format(esc(data.show_usages + and S("Usage @1 of @2", data.rnum, #data.recipes) + or S("Recipe @1 of @2", data.rnum, #data.recipes)))) + + if #data.recipes > 1 then + table.insert(fs, + "image_button[5.5,1.6;0.8,0.8;craftguide_prev_icon.png;recipe_prev;]".. + "image_button[6.2,1.6;0.8,0.8;craftguide_next_icon.png;recipe_next;]".. + "tooltip[recipe_prev;"..esc(S("Previous recipe")).."]".. + "tooltip[recipe_next;"..esc(S("Next recipe")).."]") + end + + local rows = math.ceil(table.maxn(recipe.items) / width) + if width > 3 or rows > 3 then + table.insert(fs, ("label[0,1;%s]") + :format(esc(S("Recipe is too big to be displayed.")))) + return + end + + local base_x = 3 - width + local base_y = rows == 1 and 1 or 0 + + for i, item in pairs(recipe.items) do + local x, y = coords(i - 1, width) + + local elem_name = item + local groups = extract_groups(item) + if groups then + item = groups_to_item(groups) + elem_name = esc(item.."."..table.concat(groups, "+")) + end + item_button_fs(fs, base_x + x, base_y + y, item, elem_name, groups) + end + + if shapeless or recipe.method == "cooking" then + table.insert(fs, ("image[3.2,0.5;0.5,0.5;craftguide_%s.png]") + :format(shapeless and "shapeless" or "furnace")) + local tooltip = shapeless and S("Shapeless") or + S("Cooking time: @1", minetest.colorize("yellow", cooktime)) + table.insert(fs, "tooltip[3.2,0.5;0.5,0.5;"..esc(tooltip).."]") + end + table.insert(fs, "image[3,1;1,1;sfinv_crafting_arrow.png]") + + item_button_fs(fs, 4, 1, recipe.output, recipe.output:match("%S*")) +end + +local function get_formspec(player) + local name = player:get_player_name() + local data = player_data[name] + data.pagemax = math.max(1, math.ceil(#data.items / 32)) + + local fs = {} + table.insert(fs, + "style_type[item_image_button;padding=2]".. + "field[0.3,4.2;2.8,1.2;filter;;"..esc(data.filter).."]".. + "label[5.8,4.15;"..minetest.colorize("yellow", data.pagenum).." / ".. + data.pagemax.."]".. + "image_button[2.63,4.05;0.8,0.8;craftguide_search_icon.png;search;]".. + "image_button[3.25,4.05;0.8,0.8;craftguide_clear_icon.png;clear;]".. + "image_button[5,4.05;0.8,0.8;craftguide_prev_icon.png;prev;]".. + "image_button[7.25,4.05;0.8,0.8;craftguide_next_icon.png;next;]".. + "tooltip[search;"..esc(S("Search")).."]".. + "tooltip[clear;"..esc(S("Reset")).."]".. + "tooltip[prev;"..esc(S("Previous page")).."]".. + "tooltip[next;"..esc(S("Next page")).."]".. + "field_close_on_enter[filter;false]") + + if #data.items == 0 then + table.insert(fs, "label[3,2;"..esc(S("No items to show.")).."]") + else + local first_item = (data.pagenum - 1) * 32 + for i = first_item, first_item + 31 do + local item = data.items[i + 1] + if not item then + break + end + local x, y = coords(i % 32, 8) + item_button_fs(fs, x, y, item, item) + end + end + + table.insert(fs, "container[0,5.6]") + if data.recipes then + recipe_fs(fs, data) + elseif data.prev_item then + table.insert(fs, ("label[2,1;%s]"):format(esc(data.show_usages + and S("No usages.").."\n"..S("Click again to show recipes.") + or S("No recipes.").."\n"..S("Click again to show usages.")))) + end + table.insert(fs, "container_end[]") + + return table.concat(fs) +end + +local function imatch(str, filter) + return str:lower():find(filter, 1, true) ~= nil +end + +local function execute_search(data) + local filter = data.filter + if filter == "" then + data.items = init_items + return + end + data.items = {} + + for _, item in ipairs(init_items) do + local def = minetest.registered_items[item] + local desc = def and minetest.get_translated_string(data.lang_code, def.description) + + if imatch(item, filter) or desc and imatch(desc, filter) then + table.insert(data.items, item) + end + end +end + +local function on_receive_fields(player, fields) + local name = player:get_player_name() + local data = player_data[name] + + if fields.clear then + data.filter = "" + data.pagenum = 1 + data.prev_item = nil + data.recipes = nil + data.items = init_items + return true + + elseif fields.key_enter_field == "filter" or fields.search then + local new = fields.filter:lower() + if data.filter == new then + return + end + data.filter = new + data.pagenum = 1 + execute_search(data) + return true + + elseif fields.prev or fields.next then + if data.pagemax == 1 then + return + end + data.pagenum = data.pagenum + (fields.next and 1 or -1) + if data.pagenum > data.pagemax then + data.pagenum = 1 + elseif data.pagenum == 0 then + data.pagenum = data.pagemax + end + return true + + elseif fields.recipe_next or fields.recipe_prev then + data.rnum = data.rnum + (fields.recipe_next and 1 or -1) + if data.rnum > #data.recipes then + data.rnum = 1 + elseif data.rnum == 0 then + data.rnum = #data.recipes + end + return true + + else + local item + for field in pairs(fields) do + if field:find(":") then + item = field:match("[%w_:]+") + break + end + end + if not item then + return + end + + if item == data.prev_item then + data.show_usages = not data.show_usages + else + data.show_usages = nil + end + if data.show_usages then + data.recipes = usages_cache[item] + else + data.recipes = recipes_cache[item] + end + data.prev_item = item + data.rnum = 1 + return true + end +end + +minetest.register_on_joinplayer(function(player) + local name = player:get_player_name() + local info = minetest.get_player_information(name) + + player_data[name] = { + filter = "", + pagenum = 1, + items = init_items, + lang_code = info.lang_code + } +end) + +minetest.register_on_leaveplayer(function(player) + local name = player:get_player_name() + player_data[name] = nil +end) + +sfinv.register_page("mtg_craftguide:craftguide", { + title = esc(S("Recipes")), + get = function(self, player, context) + return sfinv.make_formspec(player, context, get_formspec(player)) + end, + on_player_receive_fields = function(self, player, context, fields) + if on_receive_fields(player, fields) then + sfinv.set_player_inventory_formspec(player) + end + end +}) diff --git a/mods/mtg_craftguide/license.txt b/mods/mtg_craftguide/license.txt new file mode 100644 index 00000000..8d28c5c7 --- /dev/null +++ b/mods/mtg_craftguide/license.txt @@ -0,0 +1,63 @@ +License of source code +---------------------- + +The MIT License (MIT) + +Copyright (C) 2015-2019 Jean-Patrick Guerrero and contributors. +Copyright (C) 2020 pauloue + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) + +Copyright (C) 2018 paramat +Copyright (C) Neuromancer +Copyright (C) 2017 Wuzzy + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/mtg_craftguide/locale/mtg_craftguide.de.tr b/mods/mtg_craftguide/locale/mtg_craftguide.de.tr new file mode 100644 index 00000000..d90f833d --- /dev/null +++ b/mods/mtg_craftguide/locale/mtg_craftguide.de.tr @@ -0,0 +1,53 @@ +# textdomain: mtg_craftguide +Any coal=Beliebige Kohle +Any sand=Beliebiger Sand +Any wool=Beliebige Wolle +Any stick=Beliebiger Stock +Any vessel=Beliebiges Gefäß +Any wood planks=Beliebige Holzplanken +Any kind of stone block=Beliebige Art von Steinblock +Any red flower=Beliebige rote Blume +Any blue flower=Beliebige blaue Blume +Any black flower=Beliebige schwarze Blume +Any green flower=Beliebige grüne Blume +Any white flower=Beliebige weiße Blume +Any orange flower=Beliebige orange Blume +Any violet flower=Beliebige violette Blume +Any yellow flower=Beliebige gelbe Blume +Any red dye=Beliebiger roter Farbstoff +Any blue dye=Beliebiger blauer Farbstoff +Any cyan dye=Beliebiger türkiser Farbstoff +Any grey dye=Beliebiger grauer Farbstoff +Any pink dye=Beliebiger rosa Farbstoff +Any black dye=Beliebiger schwarzer Farbstoff +Any brown dye=Beliebiger brauner Farbstoff +Any green dye=Beliebiger grüner Farbstoff +Any white dye=Beliebiger weißer Farbstoff +Any orange dye=Beliebiger orange Farbstoff +Any violet dye=Beliebiger violetter Farbstoff +Any yellow dye=Beliebiger gelber Farbstoff +Any magenta dye=Beliebiger magenta Farbstoff +Any dark grey dye=Beliebiger dunkelgrauer Farbstoff +Any dark green dye=Beliebiger dunkelgrüner Farbstoff +# Label for group ingredients +G=G +Any item belonging to the group(s): @1=Beliebiger Gegenstand, der zu Gruppe(n) gehört: @1 +Unknown Item=Unbekannter Gegenstand +Fuel=Brennstoff +Usage @1 of @2=Verwendung @1 von @2 +Recipe @1 of @2=Rezept @1 von @2 +Previous recipe=Vorheriges Rezept +Next recipe=Nächstes Rezept +Recipe is too big to be displayed.=Rezept ist zu groß für die Anzeige. +Shapeless=Formlos +Cooking time: @1=Kochdauer: @1 +Search=Suche +Reset=Zurücksetzen +Previous page=Vorherige Seite +Next page=Nächste Seite +No items to show.=Keine Gegenstände anzuzeigen. +No usages.=Keine Verwendungen. +Click again to show recipes.=Erneut klicken, um Rezepte zu zeigen. +No recipes.=Keine Rezepte. +Click again to show usages.=Erneut klicken, um Verwendungen zu zeigen. +Recipes=Rezepte diff --git a/mods/mtg_craftguide/locale/mtg_craftguide.eo.tr b/mods/mtg_craftguide/locale/mtg_craftguide.eo.tr new file mode 100644 index 00000000..6e0f028c --- /dev/null +++ b/mods/mtg_craftguide/locale/mtg_craftguide.eo.tr @@ -0,0 +1,54 @@ +# textdomain: mtg_craftguide + +Any coal=Ajna karbo +Any sand=Ajna sablo +Any wool=Ajna lano +Any stick=Ajna bastono +Any vessel=Ajna vazo +Any wood planks=Ajnaj lignaj tabuloj +Any kind of stone block=Ia ŝtona bloko +Any red flower=Ajna ruĝa floro +Any blue flower=Ajna blua floro +Any black flower=Ajna nigra floro +Any green flower=Ajna verda floro +Any white flower=Ajna blanka floro +Any orange flower=Ajna oranĝkolora floro +Any violet flower=Ajna violkolora floro +Any yellow flower=Ajna flava floro +Any red dye=Ajna ruĝa tinkturo +Any blue dye=Ajna blua tinkturo +Any cyan dye=Ajna bluverda tinkturo +Any grey dye=Ajna griza tinkturo +Any pink dye=Ajna rozkolora tinkturo +Any black dye=Ajna nigra tinkturo +Any brown dye=Ajna bruna tinkturo +Any green dye=Ajna verda tinkturo +Any white dye=Ajna blanka tinkturo +Any orange dye=Ajna oranĝkolora tinkturo +Any violet dye=Ajna violkolora tinkturo +Any yellow dye=Ajna flava tinkturo +Any magenta dye=Ajna fuksina tinkturo +Any dark grey dye=Ajna malhela griza tinkturo +Any dark green dye=Ajna malhela verda tinkturo +# Label for group ingredients +G=A +Any item belonging to the group(s): @1=Ajna objekto de la aro(j): @1 +Unknown Item=Nekonata Objekto +Fuel=Brulaĵo +Usage @1 of @2=Uzo @1 el @2 +Recipe @1 of @2=Recepto @1 el @2 +Previous recipe=Antaŭa recepto +Next recipe=Sekva recepto +Recipe is too big to be displayed.=La recepto estas tro granda por prezenti. +Shapeless=Senforma +Cooking time: @1=Tempo por kuirado: @1 +Search=Serĉi +Reset=Rekomincigi +Previous page=Antaŭa paĝo +Next page=Sekva paĝo +No items to show.=Neniu objekto por prezenti. +No usages.=Neniu uzo. +Click again to show recipes.=Reklaki por prezenti receptojn. +No recipes.=Neniu recepto. +Click again to show usages.=Reklaki por prezenti uzojn. +Recipes=Receptoj diff --git a/mods/mtg_craftguide/locale/mtg_craftguide.es.tr b/mods/mtg_craftguide/locale/mtg_craftguide.es.tr new file mode 100644 index 00000000..a5b5149d --- /dev/null +++ b/mods/mtg_craftguide/locale/mtg_craftguide.es.tr @@ -0,0 +1,53 @@ +# textdomain: mtg_craftguide +Any coal=Carbón +Any sand=Arena +Any wool=Lana +Any stick=Palitos +Any vessel=Recipiente +Any wood planks=Tablas de madera +Any kind of stone block=Derivado de bloque de piedra +Any red flower=Flor roja +Any blue flower=Flor azul +Any black flower=Flor negra +Any green flower=Flor verde +Any white flower=Flor blanca +Any orange flower=Flor naranja +Any violet flower=Flor violeta +Any yellow flower=Flor amarilla +Any red dye=Tinte rojo +Any blue dye=Tinte azul +Any cyan dye=Tinte cian +Any grey dye=Tinte gris +Any pink dye=Tinte rosa +Any black dye=Tinte negro +Any brown dye=Tinte marrón +Any green dye=Tinte verde +Any white dye=Tinte blanco +Any orange dye=Tinte naranja +Any violet dye=Tinte violeta +Any yellow dye=Tinte amarillo +Any magenta dye=Tinte magenta +Any dark grey dye=Tinte gris oscuro +Any dark green dye=Tinte verde oscuro +# Label for group ingredients +G=G +Any item belonging to the group(s): @1=Objeto del grupo: @1 +Unknown Item=Objeto desconocido +Fuel=Combustible +Usage @1 of @2=Usa @1 en @2 +Recipe @1 of @2=Receta @1 en @2 +Previous recipe=Receta anterior +Next recipe=Próxima Receta +Recipe is too big to be displayed.=La receta es muy grande para ser mostrada. +Shapeless=Sin forma +Cooking time: @1=Tiempo de cocción: @1 +Search=Buscar +Reset=Resetear +Previous page=Página anterior +Next page=Próxima página +No items to show.=No hay objetos para mostrar. +No usages.=Sin usos. +Click again to show recipes.=Clica de nuevo para mostrar recetas. +No recipes.=No hay recetas. +Click again to show usages.=Clica de nuevo para mostrar usos. +Recipes=Recetas diff --git a/mods/mtg_craftguide/locale/mtg_craftguide.fr.tr b/mods/mtg_craftguide/locale/mtg_craftguide.fr.tr new file mode 100644 index 00000000..afc82249 --- /dev/null +++ b/mods/mtg_craftguide/locale/mtg_craftguide.fr.tr @@ -0,0 +1,54 @@ +# textdomain: mtg_craftguide + +Any coal=Quelconque charbon +Any sand=Quelconque sable +Any wool=Quelconque laine +Any stick=Quelconque bâton +Any vessel=Quelconque couvert +Any wood planks=Quelconques planches de bois +Any kind of stone block=Quelconque roche +Any red flower=Quelconque fleur rouge +Any blue flower=Quelconque fleur bleue +Any black flower=Quelconque fleur noire +Any green flower=Quelconque fleur verte +Any white flower=Quelconque fleur blanche +Any orange flower=Quelconque fleur orange +Any violet flower=Quelconque fleur violette +Any yellow flower=Quelconque fleur jaune +Any red dye=Quelconque colorant rouge +Any blue dye=Quelconque colorant bleu +Any cyan dye=Quelconque colorant bleu ciel +Any grey dye=Quelconque colorant gris +Any pink dye=Quelconque colorant rose +Any black dye=Quelconque colorant noir +Any brown dye=Quelconque colorant marron +Any green dye=Quelconque colorant vert +Any white dye=Quelconque colorant blanc +Any orange dye=Quelconque colorant orange +Any violet dye=Quelconque colorant violet +Any yellow dye=Quelconque colorant jaune +Any magenta dye=Quelconque colorant magenta +Any dark grey dye=Quelconque colorant gris foncé +Any dark green dye=Quelconque colorant vert foncé +# Label for group ingredients +G=G +Any item belonging to the group(s): @1=Tout item appartenant au(x) groupe(s) : @1 +Unknown Item=Object inconnu +Fuel=Combustible +Usage @1 of @2=Usage @1 sur @2 +Recipe @1 of @2=Recette @1 sur @2 +Previous recipe=Recette précédente +Next recipe=Prochaine recette +Recipe is too big to be displayed.=Recette trop grande pour être affichée. +Shapeless=Sans forme +Cooking time: @1=Temps de cuisson : @1 +Search=Recherche +Reset=Réinitialiser +Previous page=Page précédente +Next page=Prochaine page +No items to show.=Aucun item à afficher. +No usages.=Sans utilité. +Click again to show recipes.=Cliquez encore pour afficher la recette. +No recipes.=Aucune recette. +Click again to show usages.=Cliquez encore pour afficher l'usage. +Recipes=Recettes diff --git a/mods/mtg_craftguide/locale/mtg_craftguide.ja.tr b/mods/mtg_craftguide/locale/mtg_craftguide.ja.tr new file mode 100644 index 00000000..c6ec66ae --- /dev/null +++ b/mods/mtg_craftguide/locale/mtg_craftguide.ja.tr @@ -0,0 +1,53 @@ +# textdomain: mtg_craftguide +Any coal=石炭 +Any sand=砂 +Any wool=羊毛 +Any stick=棒 +Any vessel=瓶 +Any wood planks=板材 +Any kind of stone block=石のブロック +Any red flower=赤色の花 +Any blue flower=青色の花 +Any black flower=黒色の花 +Any green flower=緑色の花 +Any white flower=白色の花 +Any orange flower=橙色の花 +Any violet flower=紫色の花 +Any yellow flower=黄色の花 +Any red dye=赤色の染料 +Any blue dye=青色の染料 +Any cyan dye=青緑色の染料 +Any grey dye=灰色の染料 +Any pink dye=桃色の染料 +Any black dye=黒色の染料 +Any brown dye=茶色の染料 +Any green dye=緑色の染料 +Any white dye=白色の染料 +Any orange dye=橙色の染料 +Any violet dye=紫色の染料 +Any yellow dye=黄色の染料 +Any magenta dye=赤紫色の染料 +Any dark grey dye=濃灰色の染料 +Any dark green dye=濃緑色の染料 +# Label for group ingredients +G= +Any item belonging to the group(s): @1=グループに属するアイテム: @1 +Unknown Item=不明なアイテム +Fuel=燃料 +Usage @1 of @2=利用方法 @1 / @2 +Recipe @1 of @2=レシピ @1 / @2 +Previous recipe=前のレシピ +Next recipe=次のレシピ +Recipe is too big to be displayed.=レシピが大きすぎて表示できません。 +Shapeless=無形 +Cooking time: @1=調理時間: @1 +Search=検索 +Reset=リセット +Previous page=前のページ +Next page=次のページ +No items to show.=表示する項目がありません。 +No usages.=利用方法がありません。 +Click again to show recipes.=もう一度クリックするとレシピを表示します。 +No recipes.=レシピがありません。 +Click again to show usages.=もう一度クリックすると使用方法を表示します。 +Recipes=レシピ diff --git a/mods/mtg_craftguide/locale/mtg_craftguide.jbo.tr b/mods/mtg_craftguide/locale/mtg_craftguide.jbo.tr new file mode 100644 index 00000000..c9e6fbf0 --- /dev/null +++ b/mods/mtg_craftguide/locale/mtg_craftguide.jbo.tr @@ -0,0 +1,54 @@ +# textdomain: mtg_craftguide +Any coal=lo cmina lo'i kolme +Any sand=lo cmima lo'i sance +Any wool=lo cmima lo'i sunla +Any stick=lo cmima lo'i grana +Any vessel=lo cmima lo'i vasru +Any wood planks=lo cmima lo'i mudri tanbo +Any kind of stone block=lo cmima lo'i rokci bliku +Any red flower=lo cmima lo'i xunre xrula +Any blue flower=lo cmima lo'i blanu xrula +Any black flower=lo cmima lo'i xekri xrula +Any green flower=lo cmima lo'i crino xrula +Any white flower=lo cmima lo'i blabi xrula +Any orange flower=lo cmima lo'i narju xrula +Any violet flower=lo cmima lo'i zirpu xrula +Any yellow flower=lo cmima lo'i pelxu xrula +Any red dye=lo cmima lo'i xunre xinmo +Any blue dye=lo cmima lo'i blanu xinmo +Any cyan dye=lo cmima lo'i cicna xinmo +Any grey dye=lo cmima lo'i grusi xinmo +Any pink dye=lo cmima lo'i xunblabi xinmo +Any black dye=lo cmima lo'i xekri xinmo +Any brown dye=lo cmima lo'i bunre xinmo +Any green dye=lo cmima lo'i crino xinmo +Any white dye=lo cmima lo'i blabi xinmo +Any orange dye=lo cmima lo'i narju xinmo +Any violet dye=lo cmima lo'i zirpu xinmo +Any yellow dye=lo cmima lo'i pelxu xinmo +Any magenta dye=lo cmima lo'i nukni xinmo +Any dark grey dye=lo cmima lo'i xekri grusi xinmo +Any dark green dye=lo cmima lo'i xekri crino xinmo +# Label for group ingredients +# c = cmima +G=c +Any item belonging to the group(s): @1=lo cmima lo'i me zoi gi'u.@1.gi'u +Unknown Item=lo na te djuno dacti +Fuel=.i livla +Usage @1 of @2=.i meirmoi fe li @1 li @2@nle'i te zbasu +Recipe @1 of @2=.i meirmoi fe li @1 li @2@nle'i te jukpa +Previous recipe=lidne +Next recipe=selyli'e +Recipe is too big to be displayed.=.i lo te jukpa cu dukse lo ka barda tezu'e lo nu jarco +Shapeless=tarmi claxu +Cooking time: @1=lo pu'u jukpa cu snidu li @1 +Search=sisku +Reset=kraga'igau +Previous page=lidne +Next page=selyli'e +No items to show.=no da dacti cu se jarco +No usages.=na te zbasu +Click again to show recipes.=.i ko rapli .iklki fi lo nu .arco lo te jukpa +No recipes.=na te jukpa +Click again to show usages.=.i ko rapli .iklki fi lo nu .arco lo te zbasu +Recipes=lo te jukpa diff --git a/mods/mtg_craftguide/locale/mtg_craftguide.pl.tr b/mods/mtg_craftguide/locale/mtg_craftguide.pl.tr new file mode 100644 index 00000000..88d8e95e --- /dev/null +++ b/mods/mtg_craftguide/locale/mtg_craftguide.pl.tr @@ -0,0 +1,53 @@ +# textdomain: mtg_craftguide +Any coal=Dowolny węgiel +Any sand=Dowonly piasek +Any wool=Dowolna wełna +Any stick=Dowolny patyk +Any vessel=Dowolne naczynie +Any wood planks=Dowolne deski +Any kind of stone block=Dowolny rodzaj kamiennego bloku +Any red flower=Dowolny czerwony kwiat +Any blue flower=Dowolny niebieski kwiat +Any black flower=Dowolny czarny kwiat +Any green flower=Dowolny zielony kwiat +Any white flower=Dowolny biały kwiat +Any orange flower=Dowolny pomarańczowy kwiat +Any violet flower=Dowolny fioletowy kwiat +Any yellow flower=Dowolny żółty kwiat +Any red dye=Dowolny czerwony barwnik +Any blue dye=Dowolny niebieski barwnik +Any cyan dye=Dowolny cyjanowy barwnik +Any grey dye=Dowolny szary barwnik +Any pink dye=Dowolny różowy barwnik +Any black dye=Dowolny czarny barwnik +Any brown dye=Dowolny brązowy barwnik +Any green dye=Dowolny zielony barwnik +Any white dye=Dowolny biały barwnik +Any orange dye=Dowolny pomarańczowy barwnik +Any violet dye=Dowolny fioletowy barwnik +Any yellow dye=Dowolny zółty barwnik +Any magenta dye=Dowolny karmazynowy barwnik +Any dark grey dye=Dowolny ciemnoszary barwnik +Any dark green dye=Dowolny ciemnozielony barwnik +# Label for group ingredients +G=G +Any item belonging to the group(s): @1= +Unknown Item=Nieznany przedmiot +Fuel=Paliwo +Usage @1 of @2=Użycie @1 z @2 +Recipe @1 of @2=Receptura @1 z @2 +Previous recipe=Poprzednia receptura +Next recipe=Następna receptura +Recipe is too big to be displayed.=Receptura jest zbyt duża aby mogła być wyświetlona. +Shapeless=Bez kształtu +Cooking time: @1=Czas przepalania: @1 +Search=Wyszukaj +Reset=Zresetuj +Previous page=Poprzednia strona +Next page=Następna strona +No items to show.=Brak przedmiotów do pokazania. +No usages.=Brak użyć. +Click again to show recipes.=Naciśnij jeszcze raz aby pokazać receptury. +No recipes.=Brak receptur. +Click again to show usages.=Naciśnij jeszcze raz aby pokazać użycia. +Recipes=Receptury diff --git a/mods/mtg_craftguide/locale/mtg_craftguide.pt_BR.tr b/mods/mtg_craftguide/locale/mtg_craftguide.pt_BR.tr new file mode 100644 index 00000000..a4bbf7f9 --- /dev/null +++ b/mods/mtg_craftguide/locale/mtg_craftguide.pt_BR.tr @@ -0,0 +1,53 @@ +# textdomain: mtg_craftguide +Any coal=Qualquer carvão +Any sand=Qualquer areia +Any wool=Qualquer madeira +Any stick=Qualquer graveto +Any vessel=Qualquer navio +Any wood planks=Qualquer tábua de madeira +Any kind of stone block=Qualquer tipo de bloco de pedra +Any red flower=Qualquer flor vermelha +Any blue flower=Qualquer flor azul +Any black flower=Qualquer flor preta +Any green flower=Qualquer flor verde +Any white flower=Qualquer flor branca +Any orange flower=Qualquer flor laranja +Any violet flower=Qualquer flor violeta +Any yellow flower=Qualquer flor amarela +Any red dye=Qualquer tinta vermelha +Any blue dye=Qualquer tinta azul +Any cyan dye=Qualquer tinta ciano +Any grey dye=Qualquer tinta cinza +Any pink dye=Qualquer tinta rosa +Any black dye=Qualquer tinta preto +Any brown dye=Qualquer tinta marrom +Any green dye=Qualquer tinta verde +Any white dye=Qualquer tinta branca +Any orange dye=Qualquer tinta laranja +Any violet dye=Qualquer tinta violeta +Any yellow dye=Qualquer tinta amarela +Any magenta dye=Qualquer tinta magenta +Any dark grey dye=Qualquer tinta cinza-escuro +Any dark green dye=Qualquer tinta cinza-escuro +# Label for group ingredients +G=G +Any item belonging to the group(s): @1=Qualquer item pertencente ao(s) grupo(s): @1 +Unknown Item=Item Desconhecido +Fuel=Combustível +Usage @1 of @2=Uso @1 de @2 +Recipe @1 of @2=Receita @1 de @2 +Previous recipe=Receita anterior +Next recipe=Próxima receita +Recipe is too big to be displayed.=Receita é muito grande para ser exibida. +Shapeless=Sem forma +Cooking time: @1=Tempo de Cozimento: @1 +Search=Buscar +Reset=Redefinir +Previous page=Página anterior +Next page=Próxima página +No items to show.=Nenhum item para mostrar. +No usages.=Nenhum uso. +Click again to show recipes.=Clique novamente para mostrar receitas. +No recipes.=Nenhuma receita. +Click again to show usages.=Clique novamente para mostrar os usos. +Recipes=Receitas diff --git a/mods/mtg_craftguide/locale/mtg_craftguide.ru.tr b/mods/mtg_craftguide/locale/mtg_craftguide.ru.tr new file mode 100644 index 00000000..dde5f120 --- /dev/null +++ b/mods/mtg_craftguide/locale/mtg_craftguide.ru.tr @@ -0,0 +1,53 @@ +# textdomain: mtg_craftguide +Any coal=Любой уголь +Any sand=Любой песок +Any wool=Любая шерсть +Any stick=Любая палка +Any vessel=Любой сосуд +Any wood planks=Любые доски +Any kind of stone block=Любой вид каменного блока +Any red flower=Любой красный цветок +Any blue flower=Любой синий цветок +Any black flower=Любой чёрный цветок +Any green flower=Любой зелёный цветок +Any white flower=Любой белый цветок +Any orange flower=Любой оранжевый цветок +Any violet flower=Любой фиолетовый цветок +Any yellow flower=Любой жёлтый цветок +Any red dye=Любая красная краска +Any blue dye=Любая синяя краска +Any cyan dye=Любая голубая краска +Any grey dye=Любая серая краска +Any pink dye=Любая розовая краска +Any black dye=Любая чёрная краска +Any brown dye=Любая бурая краска +Any green dye=Любая зелёная краска +Any white dye=Любая белая краска +Any orange dye=Любая оранжевая краска +Any violet dye=Любая фиолетовая краска +Any yellow dye=Любая жёлтая краска +Any magenta dye=Любая пурпурная краска +Any dark grey dye=Любая тёмно-серая краска +Any dark green dye=Любая тёмно-зелёная краска +# Label for group ingredients +G=Г +Any item belonging to the group(s): @1=Любой предмет принадлежащий группам: @1 +Unknown Item=Неизвестный предмет +Fuel=Топливо +Usage @1 of @2=Использование @1 из @2 +Recipe @1 of @2=Рецепт @1 из @2 +Previous recipe=Предыдущий рецепт +Next recipe=Следующий рецепт +Recipe is too big to be displayed.=Рецепт слишком большой для отображения. +Shapeless=Формонезависимый +Cooking time: @1=Время приготовления: @1 +Search=Поиск +Reset=Сброс +Previous page=Предыдущая страница +Next page=Следующая страница +No items to show.=Нет предметов для отображения. +No usages.=Нет использований. +Click again to show recipes.=Кликните снова чтобы увидеть рецепты. +No recipes.=Нет рецептов. +Click again to show usages.=Кликните снова чтобы увидеть использования. +Recipes=Рецепты diff --git a/mods/mtg_craftguide/locale/mtg_craftguide.sv.tr b/mods/mtg_craftguide/locale/mtg_craftguide.sv.tr new file mode 100644 index 00000000..00b40564 --- /dev/null +++ b/mods/mtg_craftguide/locale/mtg_craftguide.sv.tr @@ -0,0 +1,53 @@ +# textdomain: mtg_craftguide +Any coal=Någon typ av kol +Any sand=Någon typ av sand +Any wool=Någon typ av ull +Any stick=Någon typ av pinne +Any vessel=Någon typ av fartygshylla +Any wood planks=Någon typ av träplanka +Any kind of stone block=Någon typ av stenblock +Any red flower=Någon typ av röd blomma +Any blue flower=Någon typ av blå blomma +Any black flower=Någon typ av svart blomma +Any green flower=Någon typ av grön blomma +Any white flower=Någon typ av vit blomma +Any orange flower=Någon typ av orange blomma +Any violet flower=Någon typ av violett blomma +Any yellow flower=Någon typ av gul blomma +Any red dye=Någon typ av röd färg +Any blue dye=Någon typ av blå färg +Any cyan dye=Någon typ av cyan färg +Any grey dye=Någon typ av grå färg +Any pink dye=Någon typ av rosa färg +Any black dye=Någon typ av svart färg +Any brown dye=Någon typ av brun färg +Any green dye=Någon typ av grön färg +Any white dye=Någon typ av vit färg +Any orange dye=Någon typ av orange färg +Any violet dye=Någon typ av violett färg +Any yellow dye=Någon typ av gul färg +Any magenta dye=Någon typ av magenta färg +Any dark grey dye=Någon typ av mörkgrå färg +Any dark green dye=Någon typ av mörkgrön färg +# Label for group ingredients +G=G +Any item belonging to the group(s): @1=Vilket föremål som helst som tillhör grupp(erna): @1 +Unknown Item=Okänt föremål +Fuel=Bränsle +Usage @1 of @2=Användning @1 av @2 +Recipe @1 of @2=Recept @1 av @2 +Previous recipe=Föregående recept +Next recipe=Nästa recept +Recipe is too big to be displayed.=Receptet är för stort för att visas. +Shapeless=Formlöst +Cooking time: @1=Tillagningstid: @1 +Search=Sök +Reset=Återställ +Previous page=Föregående sida +Next page=Nästa sida +No items to show.=Inga föremål att visa. +No usages.=Inga användningsområden. +Click again to show recipes.=Tryck igen för att visa recept. +No recipes.=Inga recept. +Click again to show usages.=Tryck igen för att visa användningsområden. +Recipes=Recept diff --git a/mods/mtg_craftguide/locale/mtg_craftguide.uk.tr b/mods/mtg_craftguide/locale/mtg_craftguide.uk.tr new file mode 100644 index 00000000..52d33a45 --- /dev/null +++ b/mods/mtg_craftguide/locale/mtg_craftguide.uk.tr @@ -0,0 +1,53 @@ +# textdomain: mtg_craftguide +Any coal=Будь-яке вугілля +Any sand=Будь-якій пісок +Any wool=Будь-яка вовна +Any stick=Будь-яка паличка +Any vessel=Будь-який посуд +Any wood planks=Будь-які дерев'яні палички +Any kind of stone block=Будь-який кам'яний блок +Any red flower=Будь-яка червона квітка +Any blue flower=Будь-яка синя квітка +Any black flower=Будь-яка чорна квітка +Any green flower=Будь-яка зелена квітка +Any white flower=Будь-яка біла квітка +Any orange flower=Будь-яка помаранчева квітка +Any violet flower=Будь-яка фіолетова квітка +Any yellow flower=Будь-яка жовта квітка +Any red dye=Будь-яка червона фарба +Any blue dye=Будь-яка синя фарба +Any cyan dye=Будь-яка синьо-зелена фарба +Any grey dye=Будь-яка сіра фарба +Any pink dye=Будь-яка рожева фарба +Any black dye=Будь-яка чорна фарба +Any brown dye=Будь-яка коричнева фарба +Any green dye=Будь-яка зелена фарба +Any white dye=Будь-яка біла фарба +Any orange dye=Будь-яка помаранчева фарба +Any violet dye=Будь-яка фіолетова фарба +Any yellow dye=Будь-яка жовта фарба +Any magenta dye=Будь-який пурпурна фарба +Any dark grey dye=Будь-яка темно-сіра фарба +Any dark green dye=Будь-яка темно-зелена фарба +# Label for group ingredients +G= +Any item belonging to the group(s): @1=Будь-який предмет з груп(и): @1 +Unknown Item=Невідомий предмет +Fuel=Паливо +Usage @1 of @2=Використано @1 з @2 +Recipe @1 of @2=Рецепт @1 з @2 +Previous recipe=Попередній рецепт +Next recipe=Наступний рецепт +Recipe is too big to be displayed.=Рецепт занадто великий для показу. +Shapeless=Безформний +Cooking time: @1=Час виготовлення: @1 +Search=Пошук +Reset=Скинути +Previous page=Попередня сторінка +Next page=Наступна сторінка +No items to show.=Немає елементів для показу. +No usages.=Не використовується. +Click again to show recipes.=Натисніть ще раз, щоб показати рецепти. +No recipes.=Немає рецептів. +Click again to show usages.=Натисніть ще раз, щоб показати використання. +Recipes=Рецепти diff --git a/mods/mtg_craftguide/locale/mtg_craftguide.zh_CN.tr b/mods/mtg_craftguide/locale/mtg_craftguide.zh_CN.tr new file mode 100644 index 00000000..56ae7d5a --- /dev/null +++ b/mods/mtg_craftguide/locale/mtg_craftguide.zh_CN.tr @@ -0,0 +1,53 @@ +# textdomain: mtg_craftguide +Any coal=任何煤炭 +Any sand=任何沙子 +Any wool=任何羊毛 +Any stick=任何棒 +Any vessel=任何容器 +Any wood planks=任何木板 +Any kind of stone block=任何种类的石块 +Any red flower=任何红色花朵 +Any blue flower=任何蓝色花朵 +Any black flower=任何黑色花朵 +Any green flower=任何绿色花朵 +Any white flower=任何白色花朵 +Any orange flower=任何橙色花朵 +Any violet flower=任何紫色花朵 +Any yellow flower=任何黄色花朵 +Any red dye=任何红色染料 +Any blue dye=任何蓝色染料 +Any cyan dye=任何青色染料 +Any grey dye=任何灰色染料 +Any pink dye=任何粉色染料 +Any black dye=任何黑色染料 +Any brown dye=任何棕色染料 +Any green dye=任何绿色染料 +Any white dye=任何白色染料 +Any orange dye=任何橙色染料 +Any violet dye=任何紫色染料 +Any yellow dye=任何黄色染料 +Any magenta dye=任何品红染料 +Any dark grey dye=任何暗灰染料 +Any dark green dye=任何暗绿染料 +# Label for group ingredients +G= +Any item belonging to the group(s): @1=属于该组的任何项目:@1 +Unknown Item=未知项目 +Fuel=燃料 +Usage @1 of @2=用法@1,共@2个 +Recipe @1 of @2=配方@1,共@2个 +Previous recipe=上一配方 +Next recipe=下一配方 +Recipe is too big to be displayed.=配方太大,无法显示 +Shapeless=没有形状 +Cooking time: @1=烹饪时间:@1 +Search=搜索 +Reset=重置 +Previous page=上一页 +Next page=下一页 +No items to show.=没有项目可以显示。 +No usages.=没有用法 +Click again to show recipes.=再次单击以显示配方。 +No recipes.=没有配方。 +Click again to show usages.=再次单击以显示用法 +Recipes=配方 diff --git a/mods/mtg_craftguide/locale/mtg_craftguide.zh_TW.tr b/mods/mtg_craftguide/locale/mtg_craftguide.zh_TW.tr new file mode 100644 index 00000000..859cdfe6 --- /dev/null +++ b/mods/mtg_craftguide/locale/mtg_craftguide.zh_TW.tr @@ -0,0 +1,53 @@ +# textdomain: mtg_craftguide +Any coal=任何煤炭 +Any sand=任何沙子 +Any wool=任何羊毛 +Any stick=任何棒 +Any vessel=任何容器 +Any wood planks=任何木板 +Any kind of stone block=任何種類的石塊 +Any red flower=任何紅色花朵 +Any blue flower=任何藍色花朵 +Any black flower=任何黑色花朵 +Any green flower=任何綠色花朵 +Any white flower=任何白色花朵 +Any orange flower=任何橙色花朵 +Any violet flower=任何紫色花朵 +Any yellow flower=任何黃色花朵 +Any red dye=任何紅色染料 +Any blue dye=任何藍色染料 +Any cyan dye=任何青色染料 +Any grey dye=任何灰色染料 +Any pink dye=任何粉色染料 +Any black dye=任何黑色染料 +Any brown dye=任何棕色染料 +Any green dye=任何綠色染料 +Any white dye=任何白色染料 +Any orange dye=任何橙色染料 +Any violet dye=任何紫色染料 +Any yellow dye=任何黃色染料 +Any magenta dye=任何品紅染料 +Any dark grey dye=任何暗灰染料 +Any dark green dye=任何暗綠染料 +# Label for group ingredients +G= +Any item belonging to the group(s): @1=屬於該組的任何項目:@1 +Unknown Item=未知項目 +Fuel=燃料 +Usage @1 of @2=用法@1,共@2個 +Recipe @1 of @2=配方@1,共@2個 +Previous recipe=上一配方 +Next recipe=下一配方 +Recipe is too big to be displayed.=配方太大,無法顯示 +Shapeless=沒有形狀 +Cooking time: @1=烹飪時間:@1 +Search=搜索 +Reset=重置 +Previous page=上一頁 +Next page=下一頁 +No items to show.=沒有項目可以顯示。 +No usages.=沒有用法 +Click again to show recipes.=再次單擊以顯示配方。 +No recipes.=沒有配方。 +Click again to show usages.=再次單擊以顯示用法 +Recipes=配方 diff --git a/mods/mtg_craftguide/locale/template.txt b/mods/mtg_craftguide/locale/template.txt new file mode 100644 index 00000000..e02a721d --- /dev/null +++ b/mods/mtg_craftguide/locale/template.txt @@ -0,0 +1,53 @@ +# textdomain: mtg_craftguide +Any coal= +Any sand= +Any wool= +Any stick= +Any vessel= +Any wood planks= +Any kind of stone block= +Any red flower= +Any blue flower= +Any black flower= +Any green flower= +Any white flower= +Any orange flower= +Any violet flower= +Any yellow flower= +Any red dye= +Any blue dye= +Any cyan dye= +Any grey dye= +Any pink dye= +Any black dye= +Any brown dye= +Any green dye= +Any white dye= +Any orange dye= +Any violet dye= +Any yellow dye= +Any magenta dye= +Any dark grey dye= +Any dark green dye= +# Label for group ingredients +G= +Any item belonging to the group(s): @1= +Unknown Item= +Fuel= +Usage @1 of @2= +Recipe @1 of @2= +Previous recipe= +Next recipe= +Recipe is too big to be displayed.= +Shapeless= +Cooking time: @1= +Search= +Reset= +Previous page= +Next page= +No items to show.= +No usages.= +Click again to show recipes.= +No recipes.= +Click again to show usages.= +Recipes= diff --git a/mods/mtg_craftguide/mod.conf b/mods/mtg_craftguide/mod.conf new file mode 100644 index 00000000..3b2d975f --- /dev/null +++ b/mods/mtg_craftguide/mod.conf @@ -0,0 +1,3 @@ +name = mtg_craftguide +description = Minetest Game mod: mtg_craftguide +depends = sfinv diff --git a/mods/mtg_craftguide/textures/craftguide_clear_icon.png b/mods/mtg_craftguide/textures/craftguide_clear_icon.png new file mode 100644 index 00000000..1a0e513f Binary files /dev/null and b/mods/mtg_craftguide/textures/craftguide_clear_icon.png differ diff --git a/mods/mtg_craftguide/textures/craftguide_furnace.png b/mods/mtg_craftguide/textures/craftguide_furnace.png new file mode 100644 index 00000000..60d1a619 Binary files /dev/null and b/mods/mtg_craftguide/textures/craftguide_furnace.png differ diff --git a/mods/mtg_craftguide/textures/craftguide_next_icon.png b/mods/mtg_craftguide/textures/craftguide_next_icon.png new file mode 100644 index 00000000..266c9ba6 Binary files /dev/null and b/mods/mtg_craftguide/textures/craftguide_next_icon.png differ diff --git a/mods/mtg_craftguide/textures/craftguide_prev_icon.png b/mods/mtg_craftguide/textures/craftguide_prev_icon.png new file mode 100644 index 00000000..c8072961 Binary files /dev/null and b/mods/mtg_craftguide/textures/craftguide_prev_icon.png differ diff --git a/mods/mtg_craftguide/textures/craftguide_search_icon.png b/mods/mtg_craftguide/textures/craftguide_search_icon.png new file mode 100644 index 00000000..1c374cad Binary files /dev/null and b/mods/mtg_craftguide/textures/craftguide_search_icon.png differ diff --git a/mods/mtg_craftguide/textures/craftguide_shapeless.png b/mods/mtg_craftguide/textures/craftguide_shapeless.png new file mode 100644 index 00000000..51d8ce50 Binary files /dev/null and b/mods/mtg_craftguide/textures/craftguide_shapeless.png differ diff --git a/mods/my_door_wood b/mods/my_door_wood new file mode 120000 index 00000000..24282df6 --- /dev/null +++ b/mods/my_door_wood @@ -0,0 +1 @@ +../modpacks/mydoors/my_door_wood \ No newline at end of file diff --git a/mods/my_future_doors b/mods/my_future_doors new file mode 120000 index 00000000..055c4d95 --- /dev/null +++ b/mods/my_future_doors @@ -0,0 +1 @@ +../modpacks/mydoors/my_future_doors \ No newline at end of file diff --git a/mods/mycastle b/mods/mycastle new file mode 160000 index 00000000..43f35b41 --- /dev/null +++ b/mods/mycastle @@ -0,0 +1 @@ +Subproject commit 43f35b419b24dfdd01fe45b65df92bfb78542512 diff --git a/mods/names_per_ip b/mods/names_per_ip new file mode 160000 index 00000000..3530fa92 --- /dev/null +++ b/mods/names_per_ip @@ -0,0 +1 @@ +Subproject commit 3530fa92773a1c713c43c0e014df544f9c992dca diff --git a/mods/nyancat/README.txt b/mods/nyancat/README.txt new file mode 100644 index 00000000..fadc1d23 --- /dev/null +++ b/mods/nyancat/README.txt @@ -0,0 +1,16 @@ +Minetest Game mod: nyancat +========================== +See license.txt for license information. + +Authors of source code +---------------------- +Originally by celeron55, Perttu Ahola (LGPL 2.1) +Various Minetest developers and contributors (LGPL 2.1) + +Authors of media files +---------------------- +VanessaE (CC BY-SA 3.0): + nyancat_front.png + nyancat_back.png + nyancat_side.png + nyancat_rainbow.png diff --git a/mods/legacy/depends.txt b/mods/nyancat/depends.txt similarity index 88% rename from mods/legacy/depends.txt rename to mods/nyancat/depends.txt index 3a7daa1d..4ad96d51 100644 --- a/mods/legacy/depends.txt +++ b/mods/nyancat/depends.txt @@ -1,2 +1 @@ default - diff --git a/mods/nyancat/init.lua b/mods/nyancat/init.lua new file mode 100644 index 00000000..2feaa9e5 --- /dev/null +++ b/mods/nyancat/init.lua @@ -0,0 +1,92 @@ +minetest.register_node("nyancat:nyancat", { + description = "Nyan Cat", + tiles = {"nyancat_side.png", "nyancat_side.png", "nyancat_side.png", + "nyancat_side.png", "nyancat_back.png", "nyancat_front.png"}, + paramtype = "light", + light_source = default.LIGHT_MAX, + paramtype2 = "facedir", + groups = {cracky = 2}, + is_ground_content = false, + legacy_facedir_simple = true, + sounds = default.node_sound_defaults(), +}) + +minetest.register_node("nyancat:nyancat_rainbow", { + description = "Nyan Cat Rainbow", + tiles = { + "nyancat_rainbow.png^[transformR90", + "nyancat_rainbow.png^[transformR90", + "nyancat_rainbow.png" + }, + paramtype = "light", + light_source = default.LIGHT_MAX, + paramtype2 = "facedir", + groups = {cracky = 2}, + is_ground_content = false, + sounds = default.node_sound_defaults(), +}) + +minetest.register_craft({ + type = "fuel", + recipe = "nyancat:nyancat", + burntime = 1, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "nyancat:nyancat_rainbow", + burntime = 1, +}) + +nyancat = {} + +function nyancat.place(pos, facedir, length) + if facedir > 3 then + facedir = 0 + end + local tailvec = minetest.facedir_to_dir(facedir) + local p = {x = pos.x, y = pos.y, z = pos.z} + minetest.set_node(p, {name = "nyancat:nyancat", param2 = facedir}) + for i = 1, length do + p.x = p.x + tailvec.x + p.z = p.z + tailvec.z + minetest.set_node(p, {name = "nyancat:nyancat_rainbow", param2 = facedir}) + end +end + +function nyancat.generate(minp, maxp, seed) + local height_min = -31000 + local height_max = -32 + if maxp.y < height_min or minp.y > height_max then + return + end + local y_min = math.max(minp.y, height_min) + local y_max = math.min(maxp.y, height_max) + local volume = (maxp.x - minp.x + 1) * (y_max - y_min + 1) * (maxp.z - minp.z + 1) + local pr = PseudoRandom(seed + 9324342) + local max_num_nyancats = math.floor(volume / (16 * 16 * 16)) + for i = 1, max_num_nyancats do + if pr:next(0, 1000) == 0 then + local x0 = pr:next(minp.x, maxp.x) + local y0 = pr:next(minp.y, maxp.y) + local z0 = pr:next(minp.z, maxp.z) + local p0 = {x = x0, y = y0, z = z0} + nyancat.place(p0, pr:next(0, 3), pr:next(3, 15)) + end + end +end + +minetest.register_on_generated(function(minp, maxp, seed) + nyancat.generate(minp, maxp, seed) +end) + +-- Legacy +minetest.register_alias("default:nyancat", "nyancat:nyancat") +minetest.register_alias("default:nyancat_rainbow", "nyancat:nyancat_rainbow") +minetest.register_alias("nyancat", "nyancat:nyancat") +minetest.register_alias("nyancat_rainbow", "nyancat:nyancat_rainbow") +minetest.register_alias("default:nyancat_rainbow_doublepanel", "nyancat:nyancat_rainbow_doublepanel") +minetest.register_alias("default:nyancat_rainbow_outerstair", "nyancat:nyancat_rainbow_outerstair") + +default.make_nyancat = nyancat.place +default.generate_nyancats = nyancat.generate diff --git a/mods/nyancat/license.txt b/mods/nyancat/license.txt new file mode 100644 index 00000000..3aa38617 --- /dev/null +++ b/mods/nyancat/license.txt @@ -0,0 +1,50 @@ +License of source code +---------------------- + +GNU Lesser General Public License, version 2.1 +Copyright (C) 2011-2016 celeron55, Perttu Ahola +Copyright (C) 2012-2016 Various Minetest developers and contributors + +This program is free software; you can redistribute it and/or modify it under the terms +of the GNU Lesser General Public License as published by the Free Software Foundation; +either version 2.1 of the License, or (at your option) any later version. + +This program 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 Lesser General Public License for more details: +https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2012-2016 VanessaE + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/nyancat/textures/nyancat_back.png b/mods/nyancat/textures/nyancat_back.png new file mode 100644 index 00000000..e479ace8 Binary files /dev/null and b/mods/nyancat/textures/nyancat_back.png differ diff --git a/mods/nyancat/textures/nyancat_front.png b/mods/nyancat/textures/nyancat_front.png new file mode 100644 index 00000000..c9dd6a33 Binary files /dev/null and b/mods/nyancat/textures/nyancat_front.png differ diff --git a/mods/nyancat/textures/nyancat_rainbow.png b/mods/nyancat/textures/nyancat_rainbow.png new file mode 100644 index 00000000..685a22cc Binary files /dev/null and b/mods/nyancat/textures/nyancat_rainbow.png differ diff --git a/mods/nyancat/textures/nyancat_side.png b/mods/nyancat/textures/nyancat_side.png new file mode 100644 index 00000000..3152c337 Binary files /dev/null and b/mods/nyancat/textures/nyancat_side.png differ diff --git a/mods/other_worlds b/mods/other_worlds new file mode 160000 index 00000000..389aeec3 --- /dev/null +++ b/mods/other_worlds @@ -0,0 +1 @@ +Subproject commit 389aeec33ff466d63e4c63ab5919e16d22743cfa diff --git a/mods/give_initial_stuff/depends.txt b/mods/pbj_pup/depends.txt similarity index 88% rename from mods/give_initial_stuff/depends.txt rename to mods/pbj_pup/depends.txt index 3a7daa1d..4ad96d51 100644 --- a/mods/give_initial_stuff/depends.txt +++ b/mods/pbj_pup/depends.txt @@ -1,2 +1 @@ default - diff --git a/mods/pbj_pup/init.lua b/mods/pbj_pup/init.lua new file mode 100644 index 00000000..76eb1ac4 --- /dev/null +++ b/mods/pbj_pup/init.lua @@ -0,0 +1,136 @@ + +--[[ + + Minetest's official Peanut Butter & Jelly Pup mod + +]]-- + +local enable = minetest.setting_getbool("pbj_pup_enable") +if enable == false then + return +end + +local function howl(ttl, player) + if not player then + return + end + ttl = ttl - 15 + if ttl < 0 then + return + end + + minetest.sound_play("pbj_pup_howl", {object = player, loop = false}) + minetest.do_item_eat(5, nil, ItemStack("pbj_pup:pbj_pup"), player, nil) + + minetest.after(15, howl, ttl, player) +end + +-- +-- nodes +-- +minetest.register_node("pbj_pup:pbj_pup", { + description = "PB&J Pup", + tiles = { + "pbj_pup_sides.png", + "pbj_pup_jelly.png", + "pbj_pup_sides.png", + "pbj_pup_sides.png", + "pbj_pup_back.png", + "pbj_pup_front.png" + }, + paramtype = "light", + light_source = default.LIGHT_MAX, + paramtype2 = "facedir", + groups = {cracky = 2}, + is_ground_content = false, + legacy_facedir_simple = true, + sounds = default.node_sound_defaults(), + stack_max = 1, + on_use = function(itemstack, user, pointed_thing) + howl(300, user) + itemstack:take_item() + return itemstack + end, +}) + +minetest.register_node("pbj_pup:pbj_pup_candies", { + description = "PB&J Pup Candies", + tiles = {{ + name = "pbj_pup_candies_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1.6 + } + }}, + paramtype = "light", + light_source = default.LIGHT_MAX, + paramtype2 = "facedir", + groups = {cracky = 2}, + is_ground_content = false, + stack_max = 5, + sounds = default.node_sound_defaults(), + on_use = function(itemstack, user, pointed_thing) + minetest.do_item_eat(5, nil, itemstack, user, pointed_thing) + minetest.sound_play("pbj_pup_barks", {object = user, loop = false}) + itemstack:take_item() + return itemstack + end, +}) + +-- +-- mapgen +-- +local gen = minetest.setting_getbool("pbj_pup_generate") +if gen == nil or gen then + local function place(pos, facedir, length) + if facedir > 3 then + facedir = 0 + end + local tailvec = minetest.facedir_to_dir(facedir) + local p = {x = pos.x, y = pos.y, z = pos.z} + minetest.set_node(p, {name = "pbj_pup:pbj_pup", param2 = facedir}) + for i = 1, length do + p.x = p.x + tailvec.x + p.z = p.z + tailvec.z + minetest.set_node(p, {name = "pbj_pup:pbj_pup_candies", param2 = facedir}) + end + end + + local function generate(minp, maxp, seed) + local height_min = -31000 + local height_max = -32 + if maxp.y < height_min or minp.y > height_max then + return + end + local y_min = math.max(minp.y, height_min) + local y_max = math.min(maxp.y, height_max) + local volume = (maxp.x - minp.x + 1) * (y_max - y_min + 1) * (maxp.z - minp.z + 1) + local pr = PseudoRandom(seed + 9324342) + local max_num = math.floor(volume / (16 * 16 * 16)) + for i = 1, max_num do + if pr:next(0, 1000) == 0 then + local x0 = pr:next(minp.x, maxp.x) + local y0 = pr:next(minp.y, maxp.y) + local z0 = pr:next(minp.z, maxp.z) + local p0 = {x = x0, y = y0, z = z0} + place(p0, pr:next(0, 3), pr:next(3, 15)) + end + end + end + + minetest.register_on_generated(generate) +end +-- +-- compat +-- + +if minetest.setting_getbool("pbj_pup_alias_nyancat") then + minetest.register_alias("default:nyancat", "pbj_pup:pbj_pup") + minetest.register_alias("default:nyancat_rainbow","pbj_pup:pbj_pup_candies") + minetest.register_alias("nyancat", "pbj_pup:pbj_pup") + minetest.register_alias("nyancat_rainbow", "pbj_pup:pbj_pup_candies") + minetest.register_alias("nyancat:nyancat", "pbj_pup:pbj_pup") + minetest.register_alias("nyancat:nyancat_rainbow", "pbj_pup:pbj_pup_candies") +end diff --git a/mods/pbj_pup/license.md b/mods/pbj_pup/license.md new file mode 100644 index 00000000..b5fcf3a2 --- /dev/null +++ b/mods/pbj_pup/license.md @@ -0,0 +1,26 @@ + +## PB&J Pup + +PB&J Pup is a parody on the "Nyan Cat" TM toasted poptart meme. + + +## License and Copyright + +(C) 2017 Vanessa Ezekowitz, Auke Kok, celeron55 + + * All Code: LGPL-2.1+ + * All Images: CC-BY-4.0 + + +## Sounds + + * `pbj_pup_barks.ogg`: + Artist: Tomlija + License: CC-BY-3.0 + Url: http://freesound.org/people/Tomlija/sounds/97392/ + + * `pbj_pup_howl.ogg`: + Copyright 2013 Iwan Gabovitch (qubodup) + License: CC-BY-3.0 + Url: http://freesound.org/people/qubodup/sounds/193394/ + diff --git a/mods/pbj_pup/sounds/pbj_pup_barks.ogg b/mods/pbj_pup/sounds/pbj_pup_barks.ogg new file mode 100644 index 00000000..bdd3440e Binary files /dev/null and b/mods/pbj_pup/sounds/pbj_pup_barks.ogg differ diff --git a/mods/pbj_pup/sounds/pbj_pup_howl.ogg b/mods/pbj_pup/sounds/pbj_pup_howl.ogg new file mode 100644 index 00000000..15e93bc2 Binary files /dev/null and b/mods/pbj_pup/sounds/pbj_pup_howl.ogg differ diff --git a/mods/pbj_pup/textures/pbj_pup_back.png b/mods/pbj_pup/textures/pbj_pup_back.png new file mode 100644 index 00000000..f72fc246 Binary files /dev/null and b/mods/pbj_pup/textures/pbj_pup_back.png differ diff --git a/mods/pbj_pup/textures/pbj_pup_candies.png b/mods/pbj_pup/textures/pbj_pup_candies.png new file mode 100644 index 00000000..185fa2d8 Binary files /dev/null and b/mods/pbj_pup/textures/pbj_pup_candies.png differ diff --git a/mods/pbj_pup/textures/pbj_pup_candies_animated.png b/mods/pbj_pup/textures/pbj_pup_candies_animated.png new file mode 100644 index 00000000..d092759a Binary files /dev/null and b/mods/pbj_pup/textures/pbj_pup_candies_animated.png differ diff --git a/mods/pbj_pup/textures/pbj_pup_front.png b/mods/pbj_pup/textures/pbj_pup_front.png new file mode 100644 index 00000000..d1c5739f Binary files /dev/null and b/mods/pbj_pup/textures/pbj_pup_front.png differ diff --git a/mods/pbj_pup/textures/pbj_pup_jelly.png b/mods/pbj_pup/textures/pbj_pup_jelly.png new file mode 100644 index 00000000..ec0c1ebf Binary files /dev/null and b/mods/pbj_pup/textures/pbj_pup_jelly.png differ diff --git a/mods/pbj_pup/textures/pbj_pup_sides.png b/mods/pbj_pup/textures/pbj_pup_sides.png new file mode 100644 index 00000000..d65d7be7 Binary files /dev/null and b/mods/pbj_pup/textures/pbj_pup_sides.png differ diff --git a/mods/pipeworks b/mods/pipeworks new file mode 160000 index 00000000..75894355 --- /dev/null +++ b/mods/pipeworks @@ -0,0 +1 @@ +Subproject commit 75894355d4f7b043dcf881cd8b39bd2b883995c8 diff --git a/mods/pkarcs b/mods/pkarcs new file mode 160000 index 00000000..9569c96f --- /dev/null +++ b/mods/pkarcs @@ -0,0 +1 @@ +Subproject commit 9569c96f4c9b45190fa723abf63f524c48e75eba diff --git a/mods/player_api/README.txt b/mods/player_api/README.txt new file mode 100644 index 00000000..37afadfa --- /dev/null +++ b/mods/player_api/README.txt @@ -0,0 +1,27 @@ +Minetest Game mod: player_api +============================= +See license.txt for license information. + +Provides an API to allow multiple mods to set player models and textures. +Also sets the default model, texture, and player flags. +This mod is only for content related to the Player API and the player object. + +Authors of source code +---------------------- +Originally by celeron55, Perttu Ahola (LGPLv2.1+) +Various Minetest developers and contributors (LGPLv2.1+) + +Authors of media (textures, models and sounds) +---------------------------------------------- +Original model by MirceaKitsune (CC BY-SA 3.0). +Various alterations and fixes by kilbith, sofar, xunto, Rogier-5, TeTpaAka, Desour, +stujones11, An0n3m0us (CC BY-SA 3.0): + character.b3d + character.blend + +Jordach (CC BY-SA 3.0): + character.png + +celeron55, Perttu Ahola (CC BY-SA 3.0): + player.png + player_back.png diff --git a/mods/player_api/api.lua b/mods/player_api/api.lua new file mode 100644 index 00000000..e39847db --- /dev/null +++ b/mods/player_api/api.lua @@ -0,0 +1,228 @@ +player_api = {} + +-- Player animation blending +-- Note: This is currently broken due to a bug in Irrlicht, leave at 0 +local animation_blend = 0 + +player_api.registered_models = {} + +-- Local for speed. +local models = player_api.registered_models + +local function collisionbox_equals(collisionbox, other_collisionbox) + if collisionbox == other_collisionbox then + return true + end + for index = 1, 6 do + if collisionbox[index] ~= other_collisionbox[index] then + return false + end + end + return true +end + +function player_api.register_model(name, def) + models[name] = def + def.visual_size = def.visual_size or {x = 1, y = 1} + def.collisionbox = def.collisionbox or {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3} + def.stepheight = def.stepheight or 0.6 + def.eye_height = def.eye_height or 1.47 + + -- Sort animations into property classes: + -- Animations with same properties have the same _equals value + for animation_name, animation in pairs(def.animations) do + animation.eye_height = animation.eye_height or def.eye_height + animation.collisionbox = animation.collisionbox or def.collisionbox + animation.override_local = animation.override_local or false + + for _, other_animation in pairs(def.animations) do + if other_animation._equals then + if collisionbox_equals(animation.collisionbox, other_animation.collisionbox) + and animation.eye_height == other_animation.eye_height then + animation._equals = other_animation._equals + break + end + end + end + animation._equals = animation._equals or animation_name + end +end + +-- Player stats and animations +-- model, textures, animation +local players = {} +player_api.player_attached = {} + +local function get_player_data(player) + return assert(players[player:get_player_name()]) +end + +function player_api.get_animation(player) + return get_player_data(player) +end + +-- Called when a player's appearance needs to be updated +function player_api.set_model(player, model_name) + local player_data = get_player_data(player) + if player_data.model == model_name then + return + end + player_data.model = model_name + + local model = models[model_name] + if model then + player:set_properties({ + mesh = model_name, + textures = player_data.textures or model.textures, + visual = "mesh", + visual_size = model.visual_size, + stepheight = model.stepheight + }) + -- sets local_animation, collisionbox & eye_height + player_api.set_animation(player, "stand") + else + player:set_properties({ + textures = {"player.png", "player_back.png"}, + visual = "upright_sprite", + visual_size = {x = 1, y = 2}, + collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.75, 0.3}, + stepheight = 0.6, + eye_height = 1.625, + }) + end +end + +function player_api.get_textures(player) + local player_data = get_player_data(player) + local model = models[player_data.model] + return assert(player_data.textures or (model and model.textures)) +end + +function player_api.set_textures(player, textures) + local player_data = get_player_data(player) + local model = models[player_data.model] + local new_textures = assert(textures or (model and model.textures)) + player_data.textures = new_textures + player:set_properties({textures = new_textures}) +end + +function player_api.set_texture(player, index, texture) + local textures = table.copy(player_api.get_textures(player)) + textures[index] = texture + player_api.set_textures(player, textures) +end + +function player_api.set_animation(player, anim_name, speed) + local player_data = get_player_data(player) + local model = models[player_data.model] + if not (model and model.animations[anim_name]) then + return + end + speed = speed or model.animation_speed + if player_data.animation == anim_name and player_data.animation_speed == speed then + return + end + local previous_anim = model.animations[player_data.animation] or {} + local anim = model.animations[anim_name] + player_data.animation = anim_name + player_data.animation_speed = speed + -- If necessary change the local animation (only seen by the client of *that* player) + -- `override_local` <=> suspend local animations while this one is active + -- (this is basically a hack, proper engine feature needed...) + if anim.override_local ~= previous_anim.override_local then + if anim.override_local then + local none = {x=0, y=0} + player:set_local_animation(none, none, none, none, 1) + else + local a = model.animations -- (not specific to the animation being set) + player:set_local_animation( + a.stand, a.walk, a.mine, a.walk_mine, + model.animation_speed or 30 + ) + end + end + -- Set the animation seen by everyone else + player:set_animation(anim, speed, animation_blend) + -- Update related properties if they changed + if anim._equals ~= previous_anim._equals then + player:set_properties({ + collisionbox = anim.collisionbox, + eye_height = anim.eye_height + }) + end +end + +minetest.register_on_joinplayer(function(player) + local name = player:get_player_name() + players[name] = {} + player_api.player_attached[name] = false +end) + +minetest.register_on_leaveplayer(function(player) + local name = player:get_player_name() + players[name] = nil + player_api.player_attached[name] = nil +end) + +-- Localize for better performance. +local player_set_animation = player_api.set_animation +local player_attached = player_api.player_attached + +-- Prevent knockback for attached players +local old_calculate_knockback = minetest.calculate_knockback +function minetest.calculate_knockback(player, ...) + if player_attached[player:get_player_name()] then + return 0 + end + return old_calculate_knockback(player, ...) +end + +-- Check each player and apply animations +function player_api.globalstep() + for _, player in ipairs(minetest.get_connected_players()) do + local name = player:get_player_name() + local player_data = players[name] + local model = player_data and models[player_data.model] + if model and not player_attached[name] then + local controls = player:get_player_control() + local animation_speed_mod = model.animation_speed or 30 + + -- Determine if the player is sneaking, and reduce animation speed if so + if controls.sneak then + animation_speed_mod = animation_speed_mod / 2 + end + + -- Apply animations based on what the player is doing + if player:get_hp() == 0 then + player_set_animation(player, "lay") + elseif controls.up or controls.down or controls.left or controls.right then + if controls.LMB or controls.RMB then + player_set_animation(player, "walk_mine", animation_speed_mod) + else + player_set_animation(player, "walk", animation_speed_mod) + end + elseif controls.LMB or controls.RMB then + player_set_animation(player, "mine", animation_speed_mod) + else + player_set_animation(player, "stand", animation_speed_mod) + end + end + end +end + +-- Mods can modify the globalstep by overriding player_api.globalstep +minetest.register_globalstep(function(...) + player_api.globalstep(...) +end) + +for _, api_function in pairs({"get_animation", "set_animation", "set_model", "set_textures"}) do + local original_function = player_api[api_function] + player_api[api_function] = function(player, ...) + if not players[player:get_player_name()] then + -- HACK for keeping backwards compatibility + minetest.log("warning", api_function .. " called on offline player") + return + end + return original_function(player, ...) + end +end diff --git a/mods/player_api/init.lua b/mods/player_api/init.lua new file mode 100644 index 00000000..f258aea7 --- /dev/null +++ b/mods/player_api/init.lua @@ -0,0 +1,26 @@ +dofile(minetest.get_modpath("player_api") .. "/api.lua") + +-- Default player appearance +player_api.register_model("character.b3d", { + animation_speed = 30, + textures = {"character.png"}, + animations = { + -- Standard animations. + stand = {x = 0, y = 79}, + lay = {x = 162, y = 166, eye_height = 0.3, override_local = true, + collisionbox = {-0.6, 0.0, -0.6, 0.6, 0.3, 0.6}}, + walk = {x = 168, y = 187}, + mine = {x = 189, y = 198}, + walk_mine = {x = 200, y = 219}, + sit = {x = 81, y = 160, eye_height = 0.8, override_local = true, + collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.0, 0.3}} + }, + collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3}, + stepheight = 0.6, + eye_height = 1.47, +}) + +-- Update appearance when the player joins +minetest.register_on_joinplayer(function(player) + player_api.set_model(player, "character.b3d") +end) diff --git a/mods/player_api/license.txt b/mods/player_api/license.txt new file mode 100644 index 00000000..bdc43154 --- /dev/null +++ b/mods/player_api/license.txt @@ -0,0 +1,60 @@ +License of source code +---------------------- + +GNU Lesser General Public License, version 2.1 +Copyright (C) 2011 celeron55, Perttu Ahola +Copyright (C) 2011 Various Minetest developers and contributors + +This program is free software; you can redistribute it and/or modify it under the terms +of the GNU Lesser General Public License as published by the Free Software Foundation; +either version 2.1 of the License, or (at your option) any later version. + +This program 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 Lesser General Public License for more details: +https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + + +Licenses of media (textures, models and sounds) +----------------------------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2011 celeron55, Perttu Ahola +Copyright (C) 2012 MirceaKitsune +Copyright (C) 2012 Jordach +Copyright (C) 2015 kilbith +Copyright (C) 2016 sofar +Copyright (C) 2016 xunto +Copyright (C) 2016 Rogier-5 +Copyright (C) 2017 TeTpaAka +Copyright (C) 2017 Desour +Copyright (C) 2018 stujones11 +Copyright (C) 2019 An0n3m0us + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/player_api/mod.conf b/mods/player_api/mod.conf new file mode 100644 index 00000000..bf62327b --- /dev/null +++ b/mods/player_api/mod.conf @@ -0,0 +1,2 @@ +name = player_api +description = Minetest Game mod: Manages player visuals diff --git a/mods/player_api/models/character.b3d b/mods/player_api/models/character.b3d new file mode 100644 index 00000000..3e0827e4 Binary files /dev/null and b/mods/player_api/models/character.b3d differ diff --git a/mods/player_api/models/character.blend b/mods/player_api/models/character.blend new file mode 100644 index 00000000..a32c3438 Binary files /dev/null and b/mods/player_api/models/character.blend differ diff --git a/mods/player_api/models/character.png b/mods/player_api/models/character.png new file mode 100644 index 00000000..05021781 Binary files /dev/null and b/mods/player_api/models/character.png differ diff --git a/mods/player_api/textures/player.png b/mods/player_api/textures/player.png new file mode 100644 index 00000000..6d61c434 Binary files /dev/null and b/mods/player_api/textures/player.png differ diff --git a/mods/player_api/textures/player_back.png b/mods/player_api/textures/player_back.png new file mode 100644 index 00000000..5e9ef054 Binary files /dev/null and b/mods/player_api/textures/player_back.png differ diff --git a/mods/player_monoids b/mods/player_monoids new file mode 160000 index 00000000..08bc018f --- /dev/null +++ b/mods/player_monoids @@ -0,0 +1 @@ +Subproject commit 08bc018f92b54732ade8c5e1ff38c404706e411e diff --git a/mods/playereffects b/mods/playereffects new file mode 160000 index 00000000..535cf87d --- /dev/null +++ b/mods/playereffects @@ -0,0 +1 @@ +Subproject commit 535cf87dc70627435d8802b2adad8aa040ebdd43 diff --git a/mods/playerskins b/mods/playerskins new file mode 160000 index 00000000..9107884f --- /dev/null +++ b/mods/playerskins @@ -0,0 +1 @@ +Subproject commit 9107884f0d278990c9974d3f59182c06c169864e diff --git a/mods/princess b/mods/princess new file mode 160000 index 00000000..122f28d1 --- /dev/null +++ b/mods/princess @@ -0,0 +1 @@ +Subproject commit 122f28d1dfb7c9fe9e32e50bd6cf0c1b6240e51b diff --git a/mods/protector b/mods/protector new file mode 160000 index 00000000..353ef107 --- /dev/null +++ b/mods/protector @@ -0,0 +1 @@ +Subproject commit 353ef107c91315b42e754342326880f6dc0632aa diff --git a/mods/quartz b/mods/quartz new file mode 160000 index 00000000..72ec06ff --- /dev/null +++ b/mods/quartz @@ -0,0 +1 @@ +Subproject commit 72ec06fff6bd613dd03d294f5a69fd0beec2b891 diff --git a/mods/random_messages/depends.txt b/mods/random_messages/depends.txt new file mode 100644 index 00000000..4ad96d51 --- /dev/null +++ b/mods/random_messages/depends.txt @@ -0,0 +1 @@ +default diff --git a/mods/random_messages/init.lua b/mods/random_messages/init.lua new file mode 100644 index 00000000..ad7b9a37 --- /dev/null +++ b/mods/random_messages/init.lua @@ -0,0 +1,155 @@ +--[[ +RandomMessages mod by arsdragonfly. +arsdragonfly@gmail.com +6/19/2013 +--]] +--Time between two subsequent messages. +local MESSAGE_INTERVAL = 0 + +math.randomseed(os.time()) + +random_messages = {} +random_messages.messages = {} --This table contains all messages. + +function table.count( t ) + local i = 0 + for k in pairs( t ) do i = i + 1 end + return i +end + +function table.random( t ) + local rk = math.random( 1, table.count( t ) ) + local i = 1 + for k, v in pairs( t ) do + if ( i == rk ) then return v, k end + i = i + 1 + end +end + +function random_messages.initialize() --Set the interval in minetest.conf. + minetest.setting_set("random_messages_interval",7200) + minetest.setting_save(); + return 1800 +end + +function random_messages.set_interval() --Read the interval from minetest.conf(set it if it doesn'st exist) + MESSAGE_INTERVAL = tonumber(minetest.setting_get("random_messages_interval")) or random_messages.initialize() +end + +function random_messages.check_params(name,func,params) + local stat,msg = func(params) + if not stat then + minetest.chat_send_player(name,msg) + return false + end + return true +end + +function random_messages.read_messages() + local mc = core.colorize + local base = "#A3B5CB" + local url = "#54a3a6"--[[good color but too agressive in this case "#44be72"]] + local highlight = "#4f8abd" + random_messages.messages = { + --mc(base, "# Illuna-Notes: Actually talk together on our ")..mc(highlight, "Mumbleserver")..mc(base," at ")..mc(url,"tchncs.de")..mc(base,"! It is similar to Teamspeak but free software and more powerful")..mc(base, "."), + mc(base, "# Illuna-Notes: Enjoy Illuna? Tell your friends and followers about it and")..mc(highlight," help this community to grow")..mc(base, "!"), + mc(base, "# Illuna-Notes: Have something in your mind? Meet your amazing community at ")..mc(url, "https://community.illuna.rocks")..mc(base," today")..mc(base, "!"), + mc(base, "# Illuna-Notes: Chat together! Even from outside the game! Join our connected Illuna ")..mc(highlight, "[ matrix ]")..mc(base, " room:")..mc(url," #illuna:tchncs.de")..mc(base, "."), + mc(base, "# Illuna-Notes: Chat together! Even from outside the game! Join our connected Illuna IRC room: ")..mc(url, "#illuna")..mc(base," on ")..mc(highlight, "Freenode")..mc(base, "."), + mc(base, "# Illuna-Notes: Chat together! Even from outside the game! Join our connected ")..mc(highlight, "Telegram")..mc(base," Group: ")..mc(url,"https://t.me/illunaminetest")..mc(base, "."), + mc(base, "# Illuna-Notes: Chat together! Even from outside the game! Join our connected ")..mc(highlight, "Discord Server")..mc(base," at ")..mc(url,"https://illuna.rocks/discord")..mc(base, "."), + mc(base, "# Illuna-Notes: ")..mc(highlight, "Illuna is powered by donations! ")..mc(base,"You can help us paying the bills at ")..mc(url,"https://illuna.rocks/donate")..mc(base,". Each tiny donation helps a bunch! And as a ")..mc(highlight, "*thank you*")..mc(base, " you'll get some Donorcoins for your donation. <3"), + mc(base, "# Illuna-Notes: It's players like you that keep the servers running, become a donor today at ")..mc(url,"https://illuna.rocks/donate")..mc(base,". In return for your support, Illuna stay's online and open for everyone, we can continue our development and you earn Donorcoins!"), + --mc(base, "# Illuna-Notes: Confused about the new, final spawnpoint? You can always go back to the old one with the ")..mc(highlight, "/spawn2")..mc(base," command")..mc(base, "."), + mc(base, "# Illuna-Notes: If you use ")..mc(highlight, "Pipeworks")..mc(base, ", please try to make as short pipes as possible using")..mc(highlight, " teleportation tubes")..mc(base, "."), + mc(base, "# Illuna-Notes: Discuss and request new mods and features in our Communityforum!"..mc(highlight, " https://community.illuna.rocks")), + mc(base, "# Illuna-Notes: On your way to the travelcenter? Why not give the")..mc(highlight, " postoffice ")..mc(base, "a visit too? it's just nearby and awaiting your beautiful/personal mailbox!"), + --mc(highlight, "# Illuna-Notes: Woohooo it's Christmas-time! Win cool exclusive items by solving the maze in the Event-Area next to the travelnet!"), + mc(highlight, "# Illuna-Notes: Coming from our VIP world or any other server? We'd be happy helping you by migrating your buildings to TechEth!"), + } +end + +function random_messages.display_message(message_number) + local msg = random_messages.messages[message_number] or message_number + if msg then + minetest.chat_send_all(msg) + end +end + +function random_messages.show_message() + random_messages.display_message(table.random(random_messages.messages)) +end + +function random_messages.list_messages() + local str = "" + for k,v in pairs(random_messages.messages) do + str = str .. k .. " | " .. v .. "\n" + end + return str +end + +function random_messages.remove_message(k) + table.remove(random_messages.messages,k) + random_messages.save_messages() +end + +function random_messages.add_message(t) + table.insert(random_messages.messages,table.concat(t," ",2)) + random_messages.save_messages() +end + +function random_messages.save_messages() + local output = io.open(minetest.get_worldpath().."/random_messages","w") + for k,v in pairs(random_messages.messages) do + output:write(v .. "\n") + end + io.close(output) +end + +--When server starts: +random_messages.set_interval() +random_messages.read_messages() + +local TIMER = 0 +minetest.register_globalstep(function(dtime) + TIMER = TIMER + dtime; + if TIMER > MESSAGE_INTERVAL then + random_messages.show_message() + TIMER = 0 + end +end) + +local register_chatcommand_table = { + params = "viewmessages | removemessage | addmessage ", + privs = {server = true}, + description = "View and/or alter the server's random messages", + func = function(name,param) + local t = string.split(param, " ") + if t[1] == "viewmessages" then + minetest.chat_send_player(name,random_messages.list_messages()) + elseif t[1] == "removemessage" then + if not random_messages.check_params( + name, + function (params) + if not tonumber(params[2]) or + random_messages.messages[tonumber(params[2])] == nil then + return false,"ERROR: No such message." + end + return true + end, + t) then return end + random_messages.remove_message(t[2]) + elseif t[1] == "addmessage" then + if not t[2] then + minetest.chat_send_player(name,"ERROR: No message.") + else + random_messages.add_message(t) + end + else + minetest.chat_send_player(name,"ERROR: Invalid command.") + end + end +} + +minetest.register_chatcommand("random_messages", register_chatcommand_table) +minetest.register_chatcommand("rmessages", register_chatcommand_table) diff --git a/mods/random_messages/readme.md b/mods/random_messages/readme.md new file mode 100644 index 00000000..ead798a7 --- /dev/null +++ b/mods/random_messages/readme.md @@ -0,0 +1,17 @@ +RandomMessages mod by arsdragonfly. +Put your messages in (world directory)/random_messages,1 message per line. +Messages can be all kinds of hints, mod usage, etc. +Add/Remove messages on the fly: +/rmessages viewmessages +to see all the messages. +/rmessages addmessage blah blah blah +to add the random message blah blah blah. +/rmessages removemessage 2 +to remove the 2nd random message in /rmessages viewmessages . +In minetest.conf, random_messages_interval decides how often a message is sent. +Released under CC0. +Special thanks to: +Michael Rasmussen (michael@jamhome.us) +Enjoy it! ^_^ +arsdragonfly@gmail.com +6/19/2013 \ No newline at end of file diff --git a/mods/replacer b/mods/replacer new file mode 160000 index 00000000..d69fcb31 --- /dev/null +++ b/mods/replacer @@ -0,0 +1 @@ +Subproject commit d69fcb319810caf560d274d81801bb13d1d2c850 diff --git a/mods/rhotator b/mods/rhotator new file mode 160000 index 00000000..3c9a9cbe --- /dev/null +++ b/mods/rhotator @@ -0,0 +1 @@ +Subproject commit 3c9a9cbe439694216746545714d9e74716140f38 diff --git a/mods/scifi_nodes/.gitattributes b/mods/scifi_nodes/.gitattributes new file mode 100644 index 00000000..bdb0cabc --- /dev/null +++ b/mods/scifi_nodes/.gitattributes @@ -0,0 +1,17 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp + +# 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 diff --git a/mods/scifi_nodes/.gitignore b/mods/scifi_nodes/.gitignore new file mode 100644 index 00000000..cd2946ad --- /dev/null +++ b/mods/scifi_nodes/.gitignore @@ -0,0 +1,47 @@ +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# ========================= +# Operating System Files +# ========================= + +# OSX +# ========================= + +.DS_Store +.AppleDouble +.LSOverride + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk diff --git a/mods/scifi_nodes/README.md b/mods/scifi_nodes/README.md new file mode 100644 index 00000000..d890e5ba --- /dev/null +++ b/mods/scifi_nodes/README.md @@ -0,0 +1,3 @@ +Minetest mod that adds scifi themed nodes by https://github.com/D00Med/scifi_nodes + +you should definitly check out the original mod diff --git a/mods/scifi_nodes/crafts.lua b/mods/scifi_nodes/crafts.lua new file mode 100644 index 00000000..a9de6a24 --- /dev/null +++ b/mods/scifi_nodes/crafts.lua @@ -0,0 +1,1174 @@ +-- CRAFTING RECIPES FOR SCIFI NODES + +-- 6 basic plastic (scifi_nodes:white2) from 9 homedecor plastic sheet +minetest.register_craft({ + output = "scifi_nodes:white2 6", + recipe = { + {"homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting"}, + {"homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting"}, + {"homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting"} + } +}) + +-- Recycle / Alternative recipes for basic plastic (scifi_nodes:white2) - to recycle similar nodes +----- + +local scifi_craft_shapeless_1 = function(a, b) +minetest.register_craft({ + output = "scifi_nodes:"..a, + recipe = { + {b} + } +}) +end + +scifi_craft_shapeless_1("white2", "scifi_nodes:white") +scifi_craft_shapeless_1("white2", "scifi_nodes:tile") +scifi_craft_shapeless_1("white2", "scifi_nodes:white_base") +scifi_craft_shapeless_1("white2", "scifi_nodes:whiteoct") +scifi_craft_shapeless_1("white2", "scifi_nodes:whitetile") +scifi_craft_shapeless_1("white2", "scifi_nodes:whtlightbnd") + + +----- + +-- 6 plastic wall from 6 plastic +minetest.register_craft({ + output = "scifi_nodes:white 6", + recipe = { + {"scifi_nodes:white2", "scifi_nodes:white2", "scifi_nodes:white2"}, + {"scifi_nodes:white2", "scifi_nodes:white2", "scifi_nodes:white2"} + } +}) + +-- 6 white tile from 6 plastic and 1 black dye +minetest.register_craft({ + output = "scifi_nodes:tile 6", + recipe = { + {"scifi_nodes:white2", "", "scifi_nodes:white2"}, + {"scifi_nodes:white2", "dye:black", "scifi_nodes:white2"}, + {"scifi_nodes:white2", "", "scifi_nodes:white2"} + } +}) + +-- 4 white tile2 from 4 plastic +minetest.register_craft({ + output = "scifi_nodes:whitetile 4", + recipe = { + {"scifi_nodes:white2", "", "scifi_nodes:white2"}, + {"", "dye:black", ""}, + {"scifi_nodes:white2", "", "scifi_nodes:white2"} + } +}) + +-- 8 white octagon from 8 plastic and 1 black dye +minetest.register_craft({ + output = "scifi_nodes:whiteoct 8", + recipe = { + {"scifi_nodes:white2", "scifi_nodes:white2", "scifi_nodes:white2"}, + {"scifi_nodes:white2", "dye:black", "scifi_nodes:white2"}, + {"scifi_nodes:white2", "scifi_nodes:white2", "scifi_nodes:white2"} + } +}) + +-- 6 white wall base from 6 plastic and 3 black dye +minetest.register_craft({ + output = "scifi_nodes:white_base 6", + recipe = { + {"scifi_nodes:white2", "scifi_nodes:white2", "scifi_nodes:white2"}, + {"dye:black", "dye:black", "dye:black"}, + {"scifi_nodes:white2", "scifi_nodes:white2", "scifi_nodes:white2"} + } +}) + +-- 1 white keypad from 1 button and 1 plastic +minetest.register_craft({ + output = "scifi_nodes:white_pad", + recipe = { + {"mesecons_button:button_off", "scifi_nodes:white2"} + } +}) + +-- 1 black from 1 plastic and 1 black dye +minetest.register_craft({ + output = "scifi_nodes:black 4", + recipe = { + {"scifi_nodes:white2", "scifi_nodes:white2", "dye:black"}, + {"scifi_nodes:white2", "scifi_nodes:white2", ""} + } +}) + +-- 6 ceiling light from 2 plastic and 1 trap super glow glass +minetest.register_craft({ + output = "scifi_nodes:lightbar 6", + recipe = { + {"scifi_nodes:white2", "moreblocks:trap_super_glow_glass", "scifi_nodes:white2"} + } +}) + +-- 1 wall light from 2 ceiling light +minetest.register_craft({ + output = "scifi_nodes:light_dynamic", + recipe = { + {"scifi_nodes:lightbar", "scifi_nodes:lightbar"} + } +}) + +-- 6 white light stripe from 6 plastic, 2 blue dye, 1 lightbar +minetest.register_craft({ + output = "scifi_nodes:whtlightbnd 4", + recipe = { + {"scifi_nodes:white2", "dye:blue", "scifi_nodes:white2"}, + {"", "scifi_nodes:lightbar", ""}, + {"scifi_nodes:white2", "dye:blue", "scifi_nodes:white2"} + } +}) + +-- 1 dark glass from 1 obsidian glass and 1 black dye +minetest.register_craft({ + output = "scifi_nodes:glass", + recipe = { + {"default:obsidian_glass", "dye:black"} + } +}) + +-- 6 tallscreen from 4 black wall, 2 obsidian glass and 1 cyan dye +minetest.register_craft({ + output = "scifi_nodes:tallscreen 6", + recipe = { + {"scifi_nodes:black", "", "scifi_nodes:black"}, + {"default:obsidian_glass", "dye:cyan", "default:obsidian_glass"}, + {"scifi_nodes:black", "", "scifi_nodes:black"} + } +}) + +-- 6 widescreen from 4 black wall, 2 obsidian glass and 1 cyan dye +minetest.register_craft({ + output = "scifi_nodes:widescreen 6", + recipe = { + {"scifi_nodes:black", "default:obsidian_glass", "scifi_nodes:black"}, + {"", "dye:cyan", ""}, + {"scifi_nodes:black", "default:obsidian_glass", "scifi_nodes:black"} + } +}) + +-- 6 strong window from 3 dark glass, 3 plastic wall +minetest.register_craft({ + output = "scifi_nodes:windowstraight 6", + recipe = { + {"scifi_nodes:glass", "scifi_nodes:glass", "scifi_nodes:glass"}, + {"scifi_nodes:white", "scifi_nodes:white", "scifi_nodes:white"}, + {"", "", ""} + } +}) + +-- 6 strong window (black) from 3 dark glass, 3 black wall +minetest.register_craft({ + output = "scifi_nodes:windowstraight2 6", + recipe = { + {"scifi_nodes:glass", "scifi_nodes:glass", "scifi_nodes:glass"}, + {"scifi_nodes:black", "scifi_nodes:black", "scifi_nodes:black"}, + {"", "", ""} + } +}) + +-- 4 strong window corner from 3 dark glass, 5 plastic wall +minetest.register_craft({ + output = "scifi_nodes:windowcorner 4", + recipe = { + {"scifi_nodes:glass", "scifi_nodes:glass", "scifi_nodes:white"}, + {"scifi_nodes:glass", "", "scifi_nodes:white"}, + {"scifi_nodes:white", "scifi_nodes:white", "scifi_nodes:white"} + } +}) + +-- 4 strong window corner (black) from 3 dark glass, 5 black wall +minetest.register_craft({ + output = "scifi_nodes:windowcorner2 4", + recipe = { + {"scifi_nodes:glass", "scifi_nodes:glass", "scifi_nodes:black"}, + {"scifi_nodes:glass", "", "scifi_nodes:black"}, + {"scifi_nodes:black", "scifi_nodes:black", "scifi_nodes:black"} + } +}) + +-- 8 metal block from 8 black wall and 1 iron ingot +minetest.register_craft({ + output = "scifi_nodes:lighttop 8", + recipe = { + {"scifi_nodes:black", "scifi_nodes:black", "scifi_nodes:black"}, + {"scifi_nodes:black", "default:steel_ingot", "scifi_nodes:black"}, + {"scifi_nodes:black", "scifi_nodes:black", "scifi_nodes:black"} + } +}) + +-- 1 damaged black wall from 1 black wall +minetest.register_craft({ + output = "scifi_nodes:blackdmg", + recipe = { + {"scifi_nodes:black"} + } +}) + +-- 4 electronic screen from 4 plastic, 1 trap glow glass, 2 cyan dye, 2 +-- microcontroller +minetest.register_craft({ + output = "scifi_nodes:screen 4", + recipe = { + {"scifi_nodes:white2", "mesecons_microcontroller:microcontroller0000", "scifi_nodes:white2"}, + {"dye:cyan", "scifi_nodes:lightbar", "dye:cyan"}, + {"scifi_nodes:white2", "mesecons_microcontroller:microcontroller0000", "scifi_nodes:white2"} + } +}) + +-- 4 electronic screen2 from 4 plastic, 1 trap glow glass, 2 green dye, 2 +-- microcontroller +minetest.register_craft({ + output = "scifi_nodes:screen2 4", + recipe = { + {"scifi_nodes:white2", "mesecons_microcontroller:microcontroller0000", "scifi_nodes:white2"}, + {"dye:green", "scifi_nodes:lightbar", "dye:green"}, + {"scifi_nodes:white2", "mesecons_microcontroller:microcontroller0000", "scifi_nodes:white2"} + } +}) + +-- 4 black wall screen from 4 black meshes and 1 electronic screen2 +minetest.register_craft({ + output = "scifi_nodes:black_screen 4", + recipe = { + {"scifi_nodes:black_mesh", "", "scifi_nodes:black_mesh"}, + {"", "scifi_nodes:screen2", ""}, + {"scifi_nodes:black_mesh", "", "scifi_nodes:black_mesh"} + } +}) + +-- 1 dented metal block from 1 metal block +minetest.register_craft({ + type = "cooking", + output = "scifi_nodes:dent", + recipe = "scifi_nodes:lighttop", +}) + +-- 9 ladder 1 dented metal block +minetest.register_craft({ + output = "scifi_nodes:ladder 9", + recipe = { + {"scifi_nodes:dent"} + } +}) + +-- 6 black vent block from 4 black wall and 1 dented metal block +minetest.register_craft({ + output = "scifi_nodes:black_mesh 6", + recipe = { + {"scifi_nodes:black", "", "scifi_nodes:black"}, + {"scifi_nodes:dent", "", "scifi_nodes:dent"}, + {"scifi_nodes:black", "", "scifi_nodes:black"} + } +}) + +-- 6 black detail from 6 black wall and 3 white dye +minetest.register_craft({ + output = "scifi_nodes:black_detail 6", + recipe = { + {"scifi_nodes:black", "dye:white", "scifi_nodes:black"}, + {"scifi_nodes:black", "dye:white", "scifi_nodes:black"}, + {"scifi_nodes:black", "dye:white", "scifi_nodes:black"} + } +}) + +-- 6 blue floor from 6 black wall, 1 blue dye, 1 white dye and 1 trap glow glass +minetest.register_craft({ + output = "scifi_nodes:bfloor 6", + recipe = { + {"dye:blue", "scifi_nodes:black", "dye:white"}, + {"scifi_nodes:black", "scifi_nodes:lightbar", "scifi_nodes:black"}, + {"scifi_nodes:black", "scifi_nodes:black", "scifi_nodes:black"} + } +}) + +-- 8 metal wall from 4 black wall and 4 dented metal block +minetest.register_craft({ + output = "scifi_nodes:wall 8", + recipe = { + {"scifi_nodes:black", "scifi_nodes:dent", "scifi_nodes:black"}, + {"scifi_nodes:dent", "", "scifi_nodes:dent"}, + {"scifi_nodes:black", "scifi_nodes:dent", "scifi_nodes:black"} + } +}) + +-- 6 vent from 6 dented metal block +minetest.register_craft({ + output = "scifi_nodes:vent2 6", + recipe = { + {"scifi_nodes:dent", "scifi_nodes:dent", "scifi_nodes:dent"}, + {"", "", ""}, + {"scifi_nodes:dent", "scifi_nodes:dent", "scifi_nodes:dent"} + } +}) + +-- 6 black vent from 6 black wall +minetest.register_craft({ + output = "scifi_nodes:blackvent 6", + recipe = { + {"scifi_nodes:black", "scifi_nodes:black", "scifi_nodes:black"}, + {"", "", ""}, + {"scifi_nodes:black", "scifi_nodes:black", "scifi_nodes:black"} + } +}) + +-- 1 hazard stripe from 1 black wall and 2 yellow dye +minetest.register_craft({ + output = "scifi_nodes:stripes", + recipe = { + {"dye:yellow", "", ""}, + {"", "scifi_nodes:black", ""}, + {"", "", "dye:yellow"} + } +}) + +-- 1 laptop from 2 black, 1 widescreen, 1 black detail, 1 microcontroller, 1 +-- mesecon button +minetest.register_craft({ + output = "scifi_nodes:laptop_closed", + recipe = { + {"scifi_nodes:black", "scifi_nodes:widescreen"}, + {"mesecons_microcontroller:microcontroller0000", "scifi_nodes:black_detail"}, + {"scifi_nodes:black", "mesecons_button:button_off"} + } +}) + +-- 1 keyboard and monitor from 3 black, 1 widescreen, 1 black detail, 1 microcontroller +minetest.register_craft({ + output = "scifi_nodes:keysmonitor", + recipe = { + {"scifi_nodes:black", "scifi_nodes:widescreen", "scifi_nodes:black"}, + {"mesecons_microcontroller:microcontroller0000", "scifi_nodes:black_detail", "mesecons_microcontroller:microcontroller0000"} + } +}) + +-- 4 black tile from 4 black and 1 white dye +minetest.register_craft({ + output = "scifi_nodes:blacktile 4", + recipe = { + {"scifi_nodes:black", "", "scifi_nodes:black"}, + {"", "dye:white", ""}, + {"scifi_nodes:black", "", "scifi_nodes:black"} + } +}) + +-- 4 black tile2 from 4 black +minetest.register_craft({ + output = "scifi_nodes:blacktile2 4", + recipe = { + {"scifi_nodes:black", "", "scifi_nodes:black"}, + {"", "", ""}, + {"scifi_nodes:black", "", "scifi_nodes:black"} + } +}) + +-- 4 blackplate from 4 black and 1 dent +minetest.register_craft({ + output = "scifi_nodes:blackplate 4", + recipe = { + {"scifi_nodes:black", "", "scifi_nodes:black"}, + {"", "scifi_nodes:dent", ""}, + {"scifi_nodes:black", "", "scifi_nodes:black"} + } +}) + +-- 8 black octagon from 8 black and 1 white dye +minetest.register_craft({ + output = "scifi_nodes:blackoct 8", + recipe = { + {"scifi_nodes:black", "scifi_nodes:black", "scifi_nodes:black"}, + {"scifi_nodes:black", "dye:white", "scifi_nodes:black"}, + {"scifi_nodes:black", "scifi_nodes:black", "scifi_nodes:black"} + } +}) + +-- 4 damaged black wall (stripes) from 4 damaged black wall and 1 hazard stripe +minetest.register_craft({ + output = "scifi_nodes:blackdmgstripe 4", + recipe = { + {"scifi_nodes:blackdmg", "", "scifi_nodes:blackdmg"}, + {"", "scifi_nodes:stripes", ""}, + {"scifi_nodes:blackdmg", "", "scifi_nodes:blackdmg"} + } +}) + +-- 1 blink from 1 black,1 dented metal block, 1 mesecon torch and 4 mesecon +minetest.register_craft({ + output = "scifi_nodes:blink", + recipe = { + {"", "scifi_nodes:black", ""}, + {"mesecons:wire_00000000_off", "scifi_nodes:dent", "mesecons_torch:mesecon_torch_on"}, + {"mesecons:wire_00000000_off", "mesecons:wire_00000000_off", "mesecons:wire_00000000_off"} + } +}) + +-- 4 black light stripe from 4 black, 2 white dye, 1 lightbar +minetest.register_craft({ + output = "scifi_nodes:blklt2 6", + recipe = { + {"scifi_nodes:black", "", "scifi_nodes:black"}, + {"dye:white", "scifi_nodes:lightbar", "dye:white"}, + {"scifi_nodes:black", "", "scifi_nodes:black"} + } +}) + +-- 4 metal mesh from 4 metal block +minetest.register_craft({ + output = "scifi_nodes:mesh 4", + recipe = { + {"", "scifi_nodes:lighttop", ""}, + {"scifi_nodes:lighttop", "", "scifi_nodes:lighttop"}, + {"", "scifi_nodes:lighttop", ""} + } +}) + +-- 4 metal floormesh from 4 metal block +minetest.register_craft({ + output = "scifi_nodes:mesh2 4", + recipe = { + {"scifi_nodes:lighttop", "", "scifi_nodes:lighttop"}, + {"", "", ""}, + {"scifi_nodes:lighttop", "", "scifi_nodes:lighttop"} + } +}) + +-- 1 storage box from 8 dented metal block +minetest.register_craft({ + output = "scifi_nodes:box", + recipe = { + {"scifi_nodes:dent", "scifi_nodes:dent", "scifi_nodes:dent"}, + {"scifi_nodes:dent", "", "scifi_nodes:dent"}, + {"scifi_nodes:dent", "scifi_nodes:dent", "scifi_nodes:dent"} + } +}) + +-- 6 blue metal from 6 plastic, 2 blue dye, 1 dented metal block +minetest.register_craft({ + output = "scifi_nodes:bluemetal 6", + recipe = { + {"scifi_nodes:white2", "dye:blue", "scifi_nodes:white2"}, + {"scifi_nodes:white2", "scifi_nodes:dent", "scifi_nodes:white2"}, + {"scifi_nodes:white2", "dye:blue", "scifi_nodes:white2"} + } +}) + +-- 6 blue bars from 6 blue metal +minetest.register_craft({ + output = "scifi_nodes:bluebars 6", + recipe = { + {"scifi_nodes:bluemetal", "", "scifi_nodes:bluemetal"}, + {"scifi_nodes:bluemetal", "", "scifi_nodes:bluemetal"}, + {"scifi_nodes:bluemetal", "", "scifi_nodes:bluemetal"} + } +}) + +-- 4 blue tile from 4 blue metal +minetest.register_craft({ + output = "scifi_nodes:bluetile 4", + recipe = { + {"scifi_nodes:bluemetal", "scifi_nodes:bluemetal"}, + {"scifi_nodes:bluemetal", "scifi_nodes:bluemetal"} + } +}) + +-- 4 blue metal block from 4 blue metal +minetest.register_craft({ + output = "scifi_nodes:blue_square 4", + recipe = { + {"scifi_nodes:bluemetal", "", "scifi_nodes:bluemetal"}, + {"", "", ""}, + {"scifi_nodes:bluemetal", "", "scifi_nodes:bluemetal"} + } +}) + +-- 4 blue lines from 4 black plate and 1 blue dye +minetest.register_craft({ + output = "scifi_nodes:blue 4", + recipe = { + {"scifi_nodes:blackplate", "", "scifi_nodes:blackplate"}, + {"", "dye:blue", ""}, + {"scifi_nodes:blackplate", "", "scifi_nodes:blackplate"} + } +}) + +-- 1 blue metal light from 1 blue metal and 1 lightbar +minetest.register_craft({ + output = "scifi_nodes:blumetlight", + recipe = { + {"scifi_nodes:bluemetal", "scifi_nodes:lightbar"} + } +}) + +-- 4 blue stripe light from 4 blue metal and 1 light bar +minetest.register_craft({ + output = "scifi_nodes:blumetstr 4", + recipe = { + {"scifi_nodes:bluemetal", "scifi_nodes:lightbar", "scifi_nodes:bluemetal"}, + {"scifi_nodes:bluemetal", "", "scifi_nodes:bluemetal"} + } +}) + +-- 6 capsule from 1 plastic, 1 glass, 1 orange dye, 1 green dye and +-- 1 cyan dye +minetest.register_craft({ + output = "scifi_nodes:capsule 6", + recipe = { + {"", "dye:orange", ""}, + {"scifi_nodes:glass", "dye:green", "scifi_nodes:white2"}, + {"", "dye:cyan", ""} + } +}) + +-- 9 disc from 1 plastic and 1 blue dye +minetest.register_craft({ + output = "scifi_nodes:disc 9", + recipe = { + {"scifi_nodes:white2", "dye:blue"} + } +}) + +-- 6 disc shelves from 3 dented metal block and 6 disc +minetest.register_craft({ + output = "scifi_nodes:discs 6", + recipe = { + {"scifi_nodes:disc", "scifi_nodes:disc", "scifi_nodes:disc"}, + {"scifi_nodes:dent", "scifi_nodes:dent", "scifi_nodes:dent"}, + {"scifi_nodes:disc", "scifi_nodes:disc", "scifi_nodes:disc"} + } +}) + +-- 6 bluelightbox from 6 metal block, 2 blue dye and 1 light bar +minetest.register_craft({ + output = "scifi_nodes:light 6", + recipe = { + {"scifi_nodes:lighttop", "dye:blue", "scifi_nodes:lighttop"}, + {"scifi_nodes:lighttop", "scifi_nodes:lightbar", "scifi_nodes:lighttop"}, + {"scifi_nodes:lighttop", "dye:blue", "scifi_nodes:lighttop"} + } +}) + +-- 4 blue octagon glass from 4 glass, 2 blue dye and 1 lightbar +minetest.register_craft({ + output = "scifi_nodes:octbl 4", + recipe = { + {"dye:blue", "scifi_nodes:glass", ""}, + {"scifi_nodes:glass", "scifi_nodes:lightbar", "scifi_nodes:glass"}, + {"", "scifi_nodes:glass", "dye:blue"} + } +}) + +-- 4 wall monitor from 4 glass, 1 black wall +minetest.register_craft({ + output = "scifi_nodes:monitorwall 4", + recipe = { + {"scifi_nodes:glass", "", "scifi_nodes:glass"}, + {"", "scifi_nodes:black", ""}, + {"scifi_nodes:glass", "", "scifi_nodes:glass"} + } +}) + +-- 1 microscope from 2 glass, 1 plastic +minetest.register_craft({ + output = "scifi_nodes:microscope", + recipe = { + {"scifi_nodes:glass"}, + {"scifi_nodes:white2"}, + {"scifi_nodes:glass"} + } +}) + +-- 4 Blue wall light from 4 plastic, 1 wall light, 2 blue dye +minetest.register_craft({ + output = "scifi_nodes:bluwllight 4", + recipe = { + {"scifi_nodes:white2", "", "scifi_nodes:white2"}, + {"dye:blue", "scifi_nodes:light_dynamic", "dye:blue"}, + {"scifi_nodes:white2", "", "scifi_nodes:white2"} + } +}) + +-- 6 twin lights from 6 black vent, 3 wall lights +minetest.register_craft({ + output = "scifi_nodes:lightstp 6", + recipe = { + {"scifi_nodes:blackvent", "scifi_nodes:blackvent", "scifi_nodes:blackvent"}, + {"scifi_nodes:light_dynamic", "scifi_nodes:light_dynamic", "scifi_nodes:light_dynamic"}, + {"scifi_nodes:blackvent", "scifi_nodes:blackvent", "scifi_nodes:blackvent"} + } +}) + +-- 1 black wallpanel from 1 red, 1 green, 1 yellow dye, 1 microcontroller +-- and one black wall +minetest.register_craft({ + output = "scifi_nodes:black_lights", + recipe = { + {"dye:red", "dye:green", "dye:yellow"}, + {"mesecons_microcontroller:microcontroller0000", "scifi_nodes:black", "mesecons_microcontroller:microcontroller0000"} + } +}) + +-- 4 Doom light from 4 red dye and 4 black +minetest.register_craft({ + output = "scifi_nodes:doomlight 4", + recipe = { + {"dye:red", "scifi_nodes:black", "dye:red"}, + {"scifi_nodes:black", "scifi_nodes:lightbar", "scifi_nodes:black"}, + {"dye:red", "scifi_nodes:black", "dye:red"} + } +}) + +-- 6 Doom wall1 from 4 white wall, 2 black wall, 1 red dye +minetest.register_craft({ + output = "scifi_nodes:doomwall1 6", + recipe = { + {"scifi_nodes:white", "scifi_nodes:white", "scifi_nodes:white"}, + {"scifi_nodes:black", "dye:red", "scifi_nodes:black"}, + {"scifi_nodes:white", "scifi_nodes:white", "scifi_nodes:white"} + } +}) + +-- 6 Doom wall2 from 4 white wall, 2 black wall, 1 green dye +minetest.register_craft({ + output = "scifi_nodes:doomwall2 6", + recipe = { + {"scifi_nodes:white", "scifi_nodes:white", "scifi_nodes:white"}, + {"scifi_nodes:black", "dye:green", "scifi_nodes:black"}, + {"scifi_nodes:white", "scifi_nodes:white", "scifi_nodes:white"} + } +}) + +-- 6 Doom wall3 from 4 white wall, 2 black wall, 1 grey dye +minetest.register_craft({ + output = "scifi_nodes:doomwall3 6", + recipe = { + {"scifi_nodes:white", "scifi_nodes:white", "scifi_nodes:white"}, + {"scifi_nodes:black", "dye:red", "scifi_nodes:black"}, + {"scifi_nodes:white", "scifi_nodes:white", "scifi_nodes:white"} + } +}) + +-- 4 fan from 4 vent, 4 plastic sheet, 1 red dye +minetest.register_craft({ + output = "scifi_nodes:fan 4", + recipe = { + {"scifi_nodes:vent2", "homedecor:plastic_sheeting", "scifi_nodes:vent2"}, + {"homedecor:plastic_sheeting", "dye:red", "homedecor:plastic_sheeting"}, + {"scifi_nodes:vent2", "homedecor:plastic_sheeting", "scifi_nodes:vent2"} + } +}) + +-- 6 green metal from 6 plastic, 2 green dye, 1 dented metal block +minetest.register_craft({ + output = "scifi_nodes:greenmetal 6", + recipe = { + {"scifi_nodes:white2", "dye:green", "scifi_nodes:white2"}, + {"scifi_nodes:white2", "scifi_nodes:dent", "scifi_nodes:white2"}, + {"scifi_nodes:white2", "dye:green", "scifi_nodes:white2"} + } +}) + +-- 4 green lines from 4 black plate and 1 green dye +minetest.register_craft({ + output = "scifi_nodes:green 4", + recipe = { + {"scifi_nodes:blackplate", "", "scifi_nodes:blackplate"}, + {"", "dye:green", ""}, + {"scifi_nodes:blackplate", "", "scifi_nodes:blackplate"} + } +}) + +-- 6 green pipe from 6 green metal and 1 vent +minetest.register_craft({ + output = "scifi_nodes:grnpipe 6", + recipe = { + {"scifi_nodes:greenmetal", "", "scifi_nodes:greenmetal"}, + {"scifi_nodes:greenmetal", "scifi_nodes:vent2", "scifi_nodes:greenmetal"}, + {"scifi_nodes:greenmetal", "", "scifi_nodes:greenmetal"} + } +}) + +-- 1 broken green pipe from 1 green pipe +minetest.register_craft({ + output = "scifi_nodes:grnpipe2", + recipe = { + {"scifi_nodes:grnpipe"} + } +}) + +-- 6 green lightbox from 6 metal block, 2 green dye and 1 light bar +minetest.register_craft({ + output = "scifi_nodes:green_light 6", + recipe = { + {"scifi_nodes:lighttop", "dye:green", "scifi_nodes:lighttop"}, + {"scifi_nodes:lighttop", "scifi_nodes:lightbar", "scifi_nodes:lighttop"}, + {"scifi_nodes:lighttop", "dye:green", "scifi_nodes:lighttop"} + } +}) + +-- 6 green tubes from 6 green pipe +minetest.register_craft({ + output = "scifi_nodes:greentubes 6", + recipe = { + {"scifi_nodes:grnpipe", "", "scifi_nodes:grnpipe"}, + {"scifi_nodes:grnpipe", "", "scifi_nodes:grnpipe"}, + {"scifi_nodes:grnpipe", "", "scifi_nodes:grnpipe"} + } +}) + +-- 4 green metal wall2 from 4 green metal, 1 white dye +minetest.register_craft({ + output = "scifi_nodes:greenmetal2 4", + recipe = { + {"scifi_nodes:greenmetal", "dye:white", "scifi_nodes:greenmetal"}, + {"scifi_nodes:greenmetal", "", "scifi_nodes:greenmetal"} + } +}) + +-- 6 green wall lights2 from 6 green metal, 2 green dye, 1 lightbar +minetest.register_craft({ + output = "scifi_nodes:greenlights2 6", + recipe = { + {"scifi_nodes:greenmetal", "scifi_nodes:greenmetal", "scifi_nodes:greenmetal"}, + {"dye:green", "scifi_nodes:lightbar", "dye:green"}, + {"scifi_nodes:greenmetal", "scifi_nodes:greenmetal", "scifi_nodes:greenmetal"} + } +}) + +-- 6 green wall lights from 6 green metal2, 2 green dye, 1 lightbar +minetest.register_craft({ + output = "scifi_nodes:greenlights 6", + recipe = { + {"scifi_nodes:greenmetal2", "scifi_nodes:greenmetal2", "scifi_nodes:greenmetal2"}, + {"dye:green", "scifi_nodes:lightbar", "dye:green"}, + {"scifi_nodes:greenmetal2", "scifi_nodes:greenmetal2", "scifi_nodes:greenmetal2"} + } +}) + +-- 4 green light bar from 4 green metal, 2 green dye, 1 lightbar +minetest.register_craft({ + output = "scifi_nodes:greenbar 4", + recipe = { + {"scifi_nodes:greenmetal", "", "scifi_nodes:greenmetal"}, + {"dye:green", "scifi_nodes:lightbar", "dye:green"}, + {"scifi_nodes:greenmetal", "", "scifi_nodes:greenmetal"} + } +}) + +-- 4 green metal block from 4 green metal +minetest.register_craft({ + output = "scifi_nodes:green_square 4", + recipe = { + {"scifi_nodes:greenmetal", "", "scifi_nodes:greenmetal"}, + {"", "", ""}, + {"scifi_nodes:greenmetal", "", "scifi_nodes:greenmetal"} + } +}) + +-- 4 green octagon glass from 4 glass, 2 green dye and 1 lightbar +minetest.register_craft({ + output = "scifi_nodes:octgrn 4", + recipe = { + {"dye:green", "scifi_nodes:glass", ""}, + {"scifi_nodes:glass", "scifi_nodes:lightbar", "scifi_nodes:glass"}, + {"", "scifi_nodes:glass", "dye:green"} + } +}) + +-- 1 grey from 1 plastic and 1 grey dye +minetest.register_craft({ + output = "scifi_nodes:grey", + recipe = { + {"scifi_nodes:white2", "dye:grey"} + } +}) + +-- 4 grey metal block from 4 grey and 1 dented metal block +minetest.register_craft({ + output = "scifi_nodes:grey_square 4", + recipe = { + {"scifi_nodes:grey", "", "scifi_nodes:grey"}, + {"", "scifi_nodes:dent", ""}, + {"scifi_nodes:grey", "", "scifi_nodes:grey"} + } +}) + +-- 6 grey bars from 4 grey and 2 grey metal block +minetest.register_craft({ + output = "scifi_nodes:greybars 6", + recipe = { + {"scifi_nodes:grey", "", "scifi_nodes:grey"}, + {"scifi_nodes:grey_square", "", "scifi_nodes:grey_square"}, + {"scifi_nodes:grey", "", "scifi_nodes:grey"} + } +}) + +-- 6 grey wall bolts from 4 grey wall and 2 grey metal block +minetest.register_craft({ + output = "scifi_nodes:greybolts 6", + recipe = { + {"scifi_nodes:grey_square", "scifi_nodes:grey", "scifi_nodes:grey_square"}, + {"scifi_nodes:grey", "scifi_nodes:grey", "scifi_nodes:grey"} + } +}) + +-- 4 grey wall dots from 4 grey wall and 1 white dye, 1 grey dye +minetest.register_craft({ + output = "scifi_nodes:greydots 4", + recipe = { + {"dye:white", "scifi_nodes:grey", "dye:grey"}, + {"scifi_nodes:grey", "scifi_nodes:grey", "scifi_nodes:grey"} + } +}) + +-- 6 grey power pipe from 6 grey and 2 green dye and 1 light bar +minetest.register_craft({ + output = "scifi_nodes:greygreenbar 6", + recipe = { + {"scifi_nodes:grey", "scifi_nodes:grey", "scifi_nodes:grey"}, + {"dye:green", "scifi_nodes:lightbar", "dye:green"}, + {"scifi_nodes:grey", "scifi_nodes:grey", "scifi_nodes:grey"} + } +}) + +-- 4 grey tile from 4 grey and 1 black dye and 1 white dye +minetest.register_craft({ + output = "scifi_nodes:greytile 4", + recipe = { + {"scifi_nodes:grey", "dye:black", "scifi_nodes:grey"}, + {"", "", ""}, + {"scifi_nodes:grey", "dye:white", "scifi_nodes:grey"} + } +}) + +-- 4 metal table from 2 grey and 2 dented metal block +minetest.register_craft({ + output = "scifi_nodes:table 4", + recipe = { + {"scifi_nodes:grey", "scifi_nodes:dent", "scifi_nodes:grey"}, + {"", "scifi_nodes:dent", ""} + } +}) + +-- 8 doom floor from 4 plastic, 1 black dye, 4 stones +minetest.register_craft({ + output = "scifi_nodes:octofloor 8", + recipe = { + {"scifi_nodes:white2", "default:stone", "scifi_nodes:white2"}, + {"default:stone", "dye:black", "default:stone"}, + {"scifi_nodes:white2", "default:stone", "scifi_nodes:white2"} + } +}) + +-- 8 brown doom floor from 4 plastic, 1 black dye, 4 woods +minetest.register_craft({ + output = "scifi_nodes:octofloor2 8", + recipe = { + {"scifi_nodes:white2", "default:wood", "scifi_nodes:white2"}, + {"default:wood", "dye:black", "default:wood"}, + {"scifi_nodes:white2", "default:wood", "scifi_nodes:white2"} + } +}) + +-- 4 purple octagon glass from 4 glass, 1 red dye, 1 blue dye and 1 lightbar +minetest.register_craft({ + output = "scifi_nodes:octppl 4", + recipe = { + {"dye:red", "scifi_nodes:glass", ""}, + {"scifi_nodes:glass", "scifi_nodes:lightbar", "scifi_nodes:glass"}, + {"", "scifi_nodes:glass", "dye:blue"} + } +}) + +-- 4 orange octagon glass from 4 glass, 2 orange dye and 1 lightbar +minetest.register_craft({ + output = "scifi_nodes:octrng 4", + recipe = { + {"dye:orange", "scifi_nodes:glass", ""}, + {"scifi_nodes:glass", "scifi_nodes:lightbar", "scifi_nodes:glass"}, + {"", "scifi_nodes:glass", "dye:orange"} + } +}) + +-- 1 purple node from 1 plastic, 1 blue dye and 1 red dye +minetest.register_craft({ + output = "scifi_nodes:purple", + recipe = { + {"dye:red", "scifi_nodes:white2", "dye:blue"} + } +}) + +-- 4 purple tile from 4 purple node +minetest.register_craft({ + output = "scifi_nodes:pplblk 4", + recipe = { + {"scifi_nodes:purple", "", "scifi_nodes:purple"}, + {"", "scifi_nodes:dent", ""}, + {"scifi_nodes:purple", "", "scifi_nodes:purple"} + } +}) + +-- 6 purple window from 2 purple node, 1 orange octagon glass +minetest.register_craft({ + output = "scifi_nodes:pplwndw 6", + recipe = { + {"scifi_nodes:purple", "scifi_nodes:octrng", "scifi_nodes:purple"} + } +}) + +-- 6 purple wall4 from 6 purple nodes, 3 white dyes +minetest.register_craft({ + output = "scifi_nodes:pplwll4 6", + recipe = { + {"dye:white", "dye:white", "dye:white"}, + {"scifi_nodes:purple", "scifi_nodes:purple", "scifi_nodes:purple"}, + {"scifi_nodes:purple", "scifi_nodes:purple", "scifi_nodes:purple"} + } +}) + +-- 6 purple wall3 from 6 purple nodes, 3 white dyes +minetest.register_craft({ + output = "scifi_nodes:pplwll3 6", + recipe = { + {"dye:white", "scifi_nodes:purple", "scifi_nodes:purple"}, + {"dye:white", "scifi_nodes:purple", "scifi_nodes:purple"}, + {"dye:white", "scifi_nodes:purple", "scifi_nodes:purple"} + } +}) + +-- 6 purple wall2 from 6 purple nodes, 3 black dye +minetest.register_craft({ + output = "scifi_nodes:pplwll2 6", + recipe = { + {"scifi_nodes:purple", "scifi_nodes:purple", "scifi_nodes:purple"}, + {"scifi_nodes:purple", "scifi_nodes:purple", "scifi_nodes:purple"}, + {"dye:black", "dye:black", "dye:black"} + } +}) + +-- 1 purple wall from 1 purple wall2 +minetest.register_craft({ + output = "scifi_nodes:pplwll", + recipe = { + {"scifi_nodes:pplwll2"} + } +}) + +-- 6 red lightbox from 6 metal block, 2 red dye and 1 light bar +minetest.register_craft({ + output = "scifi_nodes:red_light 6", + recipe = { + {"scifi_nodes:lighttop", "dye:red", "scifi_nodes:lighttop"}, + {"scifi_nodes:lighttop", "scifi_nodes:lightbar", "scifi_nodes:lighttop"}, + {"scifi_nodes:lighttop", "dye:red", "scifi_nodes:lighttop"} + } +}) + +-- 1 rough metal from 1 metal block and 1 compressed cobblestone +minetest.register_craft({ + output = "scifi_nodes:rough", + recipe = { + {"scifi_nodes:lighttop", "moreblocks:cobble_compressed"} + } +}) + +--1 rusty metal from 1 rough metal and 1 water bucket +minetest.register_craft({ + output = "scifi_nodes:rust", + recipe = { + {"scifi_nodes:rough", "bucket:bucket_water"} + }, + replacements = {{"bucket:bucket_water", "bucket:bucket_empty"}} +}) + +-- 4 red metal block from 4 rusty metal and 1 dented metal block +minetest.register_craft({ + output = "scifi_nodes:red_square 4", + recipe = { + {"scifi_nodes:rust", "", "scifi_nodes:rust"}, + {"", "scifi_nodes:dent", ""}, + {"scifi_nodes:rust", "", "scifi_nodes:rust"} + } +}) + +-- 6 rusty floor from 6 rusty metal, 1 black dye, 1 white dye and 1 trap glow glass +minetest.register_craft({ + output = "scifi_nodes:rfloor 6", + recipe = { + {"dye:black", "scifi_nodes:rust", "dye:white"}, + {"scifi_nodes:rust", "scifi_nodes:lightbar", "scifi_nodes:rust"}, + {"scifi_nodes:rust", "scifi_nodes:rust", "scifi_nodes:rust"} + } +}) + +-- 1 moonstone from 1 rough metal and 1 plastic +minetest.register_craft({ + output = "scifi_nodes:rock", + recipe = { + {"scifi_nodes:rough", "scifi_nodes:white2"} + } +}) + +-- 1 moonstone2 from 1 rough metal and 1 plastic +minetest.register_craft({ + output = "scifi_nodes:rock2", + recipe = { + {"scifi_nodes:rough"}, + {"scifi_nodes:white2"} + } +}) + +-- 6 glass screen from 1 plastic, 1 dark glass, 1 green dye +minetest.register_craft({ + output = "scifi_nodes:glassscreen 6", + recipe = { + {"scifi_nodes:glass", "scifi_nodes:light_dynamic"}, + {"dye:green", "scifi_nodes:white2"} + } +}) + +-- 4 purple wall light from 4 purple tiles, 4 cyan dye and 1 wall light +minetest.register_craft({ + output = "scifi_nodes:ppllght 4", + recipe = { + {"scifi_nodes:pplblk", "dye:cyan", "scifi_nodes:pplblk"}, + {"dye:cyan", "scifi_nodes:light_dynamic", "dye:cyan"}, + {"scifi_nodes:pplblk", "dye:cyan", "scifi_nodes:pplblk"} + } +}) + +-- 1 orange lightbars from 4 lightbar, 1 orange dye +minetest.register_craft({ + output = "scifi_nodes:lightbars", + recipe = { + {"scifi_nodes:lightbar", "", "scifi_nodes:lightbar"}, + {"", "dye:orange", ""}, + {"scifi_nodes:lightbar", "", "scifi_nodes:lightbar"} + } +}) + +-- 4 liquid pipe from 2 dark glass, 2 green dye, 1 wall light +minetest.register_craft({ + output = "scifi_nodes:liquid_pipe 4", + recipe = { + {"", "dye:green", ""}, + {"scifi_nodes:glass", "scifi_nodes:light_dynamic", "scifi_nodes:glass"}, + {"", "dye:green", ""} + } +}) + +-- 4 liquid pipe2 from 2 dark glass, 4 orange dye, 1 wall light +minetest.register_craft({ + output = "scifi_nodes:liquid_pipe2 4", + recipe = { + {"dye:orange", "", "dye:orange"}, + {"scifi_nodes:glass", "scifi_nodes:light_dynamic", "scifi_nodes:glass"}, + {"dye:orange", "", "dye:orange"} + } +}) + +-- 1 metal plant pot from 1 greybolts and 1 clean glass +minetest.register_craft({ + output = "scifi_nodes:pot", + recipe = { + {"moreblocks:clean_glass"}, + {"default:dirt"}, + {"scifi_nodes:greybolts"} + } +}) + +-- 6 itemholder from 2 dented metal block and 1 plastic +minetest.register_craft({ + output = "scifi_nodes:itemholder 6", + recipe = { + {"scifi_nodes:dent"}, + {"scifi_nodes:white2"}, + {"scifi_nodes:dent"} + } +}) + +-- FEW SLOPES (will be making more when respective block recipe will be ready) + + + +-- slopes from original full node +local scifi_craft_slopes = function(a, b, c, d) +minetest.register_craft({ + output = "scifi_nodes:"..a, + recipe = { + { b, "" }, + { c, d } + } +}) +end + +scifi_craft_slopes("slope_alien 6", "scifi_nodes:alien", "scifi_nodes:alien", "scifi_nodes:alien") +scifi_craft_slopes("slope_black 6", "scifi_nodes:black", "scifi_nodes:black", "scifi_nodes:black") +scifi_craft_slopes("slope_blight 6", "scifi_nodes:light", "scifi_nodes:light", "scifi_nodes:light") +scifi_craft_slopes("slope_blight2 6", "scifi_nodes:bluwllight", "scifi_nodes:bluwllight", "scifi_nodes:bluwllight") +scifi_craft_slopes("slope_blklt2 6", "scifi_nodes:blklt2", "scifi_nodes:blklt2", "scifi_nodes:blklt2") +scifi_craft_slopes("slope_bluebars 6", "scifi_nodes:bluebars", "scifi_nodes:bluebars", "scifi_nodes:bluebars") +scifi_craft_slopes("slope_bluemetal 6", "scifi_nodes:bluemetal", "scifi_nodes:bluemetal", "scifi_nodes:bluemetal") +scifi_craft_slopes("slope_gblock 6", "scifi_nodes:gblock", "scifi_nodes:gblock", "scifi_nodes:gblock") +scifi_craft_slopes("slope_glight 6", "scifi_nodes:green_light", "scifi_nodes:green_light", "scifi_nodes:green_light") +scifi_craft_slopes("slope_greenmetal 6", "scifi_nodes:greenmetal", "scifi_nodes:greenmetal", "scifi_nodes:greenmetal") +scifi_craft_slopes("slope_grey 6", "scifi_nodes:grey", "scifi_nodes:grey", "scifi_nodes:grey") +scifi_craft_slopes("slope_holes 6", "scifi_nodes:holes", "scifi_nodes:holes", "scifi_nodes:holes") +scifi_craft_slopes("slope_lightstripe 6", "scifi_nodes:lightstp", "scifi_nodes:lightstp", "scifi_nodes:lightstp") +scifi_craft_slopes("slope_mesh 6", "scifi_nodes:mesh", "scifi_nodes:mesh", "scifi_nodes:mesh") +scifi_craft_slopes("slope_mesh2 6", "scifi_nodes:mesh2", "scifi_nodes:mesh2", "scifi_nodes:mesh2") +scifi_craft_slopes("slope_pipe 6", "scifi_nodes:pipe", "scifi_nodes:pipe", "scifi_nodes:pipe") +scifi_craft_slopes("slope_purple 6", "scifi_nodes:purple", "scifi_nodes:purple", "scifi_nodes:purple") +scifi_craft_slopes("slope_rlight 6", "scifi_nodes:red_light", "scifi_nodes:red_light", "scifi_nodes:red_light") +scifi_craft_slopes("slope_rough 6", "scifi_nodes:rough", "scifi_nodes:rough", "scifi_nodes:rough") +scifi_craft_slopes("slope_sreen 6", "scifi_nodes:sreen", "scifi_nodes:sreen", "scifi_nodes:sreen") +scifi_craft_slopes("slope_stripes 6", "scifi_nodes:stripes", "scifi_nodes:stripes", "scifi_nodes:stripes") +scifi_craft_slopes("slope_vent 6", "scifi_nodes:vent", "scifi_nodes:vent", "scifi_nodes:vent") +scifi_craft_slopes("slope_wall 6", "scifi_nodes:wall", "scifi_nodes:wall", "scifi_nodes:wall") +scifi_craft_slopes("slope_wallpipe 6", "scifi_nodes:wallpipe", "scifi_nodes:wallpipe", "scifi_nodes:wallpipe") +scifi_craft_slopes("slope_white 6", "scifi_nodes:white", "scifi_nodes:white", "scifi_nodes:white") +scifi_craft_slopes("slope_white2 6", "scifi_nodes:white2", "scifi_nodes:white2", "scifi_nodes:white2") + + +-- recycle slopes back to original full node +local scifi_craft_slopes_BA = function(a, b, c) +minetest.register_craft({ + output = "scifi_nodes:"..a, + recipe = { + { b,c } + } +}) +end + +scifi_craft_slopes_BA("alien", "scifi_nodes:slope_alien", "scifi_nodes:slope_alien") +scifi_craft_slopes_BA("black", "scifi_nodes:slope_black", "scifi_nodes:slope_black") +scifi_craft_slopes_BA("light", "scifi_nodes:slope_blight", "scifi_nodes:slope_blight") +scifi_craft_slopes_BA("bluwllight", "scifi_nodes:slope_blight2", "scifi_nodes:slope_blight2") +scifi_craft_slopes_BA("blklt2", "scifi_nodes:slope_blklt2", "scifi_nodes:slope_blklt2") +scifi_craft_slopes_BA("bluebars", "scifi_nodes:slope_bluebars", "scifi_nodes:slope_bluebars") +scifi_craft_slopes_BA("bluemetal", "scifi_nodes:slope_bluemetal", "scifi_nodes:slope_bluemetal") +scifi_craft_slopes_BA("gblock", "scifi_nodes:slope_gblock", "scifi_nodes:slope_gblock") +scifi_craft_slopes_BA("green_light", "scifi_nodes:slope_glight", "scifi_nodes:slope_glight") +scifi_craft_slopes_BA("greenmetal", "scifi_nodes:slope_greenmetal", "scifi_nodes:slope_greenmetal") +scifi_craft_slopes_BA("grey", "scifi_nodes:slope_grey", "scifi_nodes:slope_grey") +scifi_craft_slopes_BA("holes", "scifi_nodes:slope_holes", "scifi_nodes:slope_holes") +scifi_craft_slopes_BA("lightstp", "scifi_nodes:slope_lightstripe", "scifi_nodes:slope_lightstripe") +scifi_craft_slopes_BA("mesh", "scifi_nodes:slope_mesh", "scifi_nodes:slope_mesh") +scifi_craft_slopes_BA("mesh2", "scifi_nodes:slope_mesh2", "scifi_nodes:slope_mesh2") +scifi_craft_slopes_BA("pipe", "scifi_nodes:slope_pipe", "scifi_nodes:slope_pipe") +scifi_craft_slopes_BA("purple", "scifi_nodes:slope_purple", "scifi_nodes:slope_purple") +scifi_craft_slopes_BA("red_light", "scifi_nodes:slope_rlight", "scifi_nodes:slope_rlight") +scifi_craft_slopes_BA("rough", "scifi_nodes:slope_rough", "scifi_nodes:slope_rough") +scifi_craft_slopes_BA("sreen", "scifi_nodes:slope_sreen", "scifi_nodes:slope_sreen") +scifi_craft_slopes_BA("stripes", "scifi_nodes:slope_stripes", "scifi_nodes:slope_stripes") +scifi_craft_slopes_BA("vent", "scifi_nodes:slope_vent", "scifi_nodes:slope_vent") +scifi_craft_slopes_BA("wall", "scifi_nodes:slope_wall", "scifi_nodes:slope_wall") +scifi_craft_slopes_BA("wallpipe", "scifi_nodes:slope_wallpipe", "scifi_nodes:slope_wallpipe") +scifi_craft_slopes_BA("white", "scifi_nodes:slope_white", "scifi_nodes:slope_white") +scifi_craft_slopes_BA("white2", "scifi_nodes:slope_white2", "scifi_nodes:slope_white2") + + diff --git a/mods/scifi_nodes/depends.txt b/mods/scifi_nodes/depends.txt new file mode 100644 index 00000000..bb9ab542 --- /dev/null +++ b/mods/scifi_nodes/depends.txt @@ -0,0 +1,8 @@ +default +xpanes? +moreblocks? +mesecons? +mesecons_microcontroller? +mesecons_button? +mesecons_torch? +dye? diff --git a/mods/scifi_nodes/doors.lua b/mods/scifi_nodes/doors.lua new file mode 100644 index 00000000..d0a28bb3 --- /dev/null +++ b/mods/scifi_nodes/doors.lua @@ -0,0 +1,259 @@ +-- mydoors mod by don +-- DO WHAT YOU WANT TO PUBLIC LICENSE +-- or abbreviated DWYWPL + +-- December 2nd 2015 +-- License Copyright (C) 2015 Michael Tomaino (PlatinumArts@gmail.com) +-- www.sandboxgamemaker.com/DWYWPL/ + +-- DO WHAT YOU WANT TO PUBLIC LICENSE +-- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +-- 1. You are allowed to do whatever you want to with what content is using this license. +-- 2. This content is provided 'as-is', without any express or implied warranty. In no event +-- will the authors be held liable for any damages arising from the use of this content. + +-- sliding door sound from marssurvive mod + +local doors = { + {"scifi_nodes:door2a","scifi_nodes:door2b","scifi_nodes:door2c","scifi_nodes:door2d","2","black"}, + {"scifi_nodes:door3a","scifi_nodes:door3b","scifi_nodes:door3c","scifi_nodes:door3d","3","white"}, + {"scifi_nodes:door4a","scifi_nodes:door4b","scifi_nodes:door4c","scifi_nodes:door4d","4","green"}, + {"scifi_nodes:door1a","scifi_nodes:door1b","scifi_nodes:door1c","scifi_nodes:door1d","1","Doom"},} + +for i in ipairs (doors) do +local doora = doors[i][1] +local doorb = doors[i][2] +local doorc = doors[i][3] +local doord = doors[i][4] +local num = doors[i][5] +local des = doors[i][6] + +function onplace(itemstack, placer, pointed_thing) + local pos1 = pointed_thing.above + local pos2 = {x=pos1.x, y=pos1.y, z=pos1.z} + pos2.y = pos2.y+1 + if + not minetest.registered_nodes[minetest.get_node(pos1).name].buildable_to or + not minetest.registered_nodes[minetest.get_node(pos2).name].buildable_to or + not placer or + not placer:is_player() then + return + end + local pt = pointed_thing.above + local pt2 = {x=pt.x, y=pt.y, z=pt.z} + pt2.y = pt2.y+1 + local p2 = minetest.dir_to_facedir(placer:get_look_dir()) + local pt3 = {x=pt.x, y=pt.y, z=pt.z} + local p4 = 0 + if p2 == 0 then + pt3.x = pt3.x-1 + p4 = 2 + elseif p2 == 1 then + pt3.z = pt3.z+1 + p4 = 3 + elseif p2 == 2 then + pt3.x = pt3.x+1 + p4 = 0 + elseif p2 == 3 then + pt3.z = pt3.z-1 + p4 = 1 + end + if minetest.get_node(pt3).name == doora then + minetest.set_node(pt, {name=doora, param2=p4}) + minetest.set_node(pt2, {name=doorb, param2=p4}) + else + minetest.set_node(pt, {name=doora, param2=p2}) + minetest.set_node(pt2, {name=doorb, param2=p2}) + end + itemstack:take_item() + return itemstack +end + +function afterdestruct(pos, oldnode) + minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name="air"}) +end + +function rightclick(pos, node, player, itemstack, pointed_thing) + local timer = minetest.get_node_timer(pos) + local a = minetest.get_node({x=pos.x, y=pos.y, z=pos.z-1}) + local b = minetest.get_node({x=pos.x, y=pos.y, z=pos.z+1}) + local c = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z}) + local d = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z}) + minetest.set_node(pos, {name=doorc, param2=node.param2}) + minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name=doord, param2=node.param2}) + + if a.name == doora then + minetest.set_node({x=pos.x, y=pos.y, z=pos.z-1}, {name=doorc, param2=a.param2}) + minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z-1}, {name=doord, param2=a.param2}) + end + if b.name == doora then + minetest.set_node({x=pos.x, y=pos.y, z=pos.z+1}, {name=doorc, param2=b.param2}) + minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z+1}, {name=doord, param2=b.param2}) + end + if c.name == doora then + minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z}, {name=doorc, param2=c.param2}) + minetest.set_node({x=pos.x+1,y=pos.y+1,z=pos.z}, {name=doord, param2=c.param2}) + end + if d.name == doora then + minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z}, {name=doorc, param2=d.param2}) + minetest.set_node({x=pos.x-1,y=pos.y+1,z=pos.z}, {name=doord, param2=d.param2}) + end + + timer:start(3) + + minetest.sound_play("slidingdoor", {pos=pos, gain = 1, max_hear_distance = 5}) + +end + +function afterplace(pos, placer, itemstack, pointed_thing) + minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name=doord,param2=nodeu.param2}) +end + +function ontimer(pos, elapsed) + local node = minetest.get_node(pos) + local a = minetest.get_node({x=pos.x, y=pos.y, z=pos.z-1}) + local b = minetest.get_node({x=pos.x, y=pos.y, z=pos.z+1}) + local c = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z}) + local d = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z}) + minetest.set_node(pos, {name=doora, param2=node.param2}) + minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name=doorb, param2=node.param2}) + + if a.name == doorc then + minetest.set_node({x=pos.x, y=pos.y, z=pos.z-1}, {name=doora, param2=a.param2}) + minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z-1}, {name=doorb, param2=a.param2}) + end + if b.name == doorc then + minetest.set_node({x=pos.x, y=pos.y, z=pos.z+1}, {name=doora, param2=b.param2}) + minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z+1}, {name=doorb, param2=b.param2}) + end + if c.name == doorc then + minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z}, {name=doora, param2=c.param2}) + minetest.set_node({x=pos.x+1,y=pos.y+1,z=pos.z}, {name=doorb, param2=c.param2}) + end + if d.name == doorc then + minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z}, {name=doora, param2=d.param2}) + minetest.set_node({x=pos.x-1,y=pos.y+1,z=pos.z}, {name=doorb, param2=d.param2}) + end + + minetest.sound_play("slidingdoor", {pos=pos, gain = 1, max_hear_distance = 5}) + +end + +minetest.register_node(doora, { + description = des.." Sliding Door", + inventory_image = "scifi_nodes_door"..num.."a_inv.png", + wield_image = "scifi_nodes_door"..num.."a_inv.png", + tiles = { + "scifi_nodes_door"..num.."a_edge.png", + "scifi_nodes_door"..num.."a_edge.png", + "scifi_nodes_door"..num.."a_edge.png", + "scifi_nodes_door"..num.."a_edge.png", + "scifi_nodes_door"..num.."a_rbottom.png", + "scifi_nodes_door"..num.."a_bottom.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 3}, + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.0625, 0.5, 0.5, 0.0625} + } + }, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.0625, 0.5, 1.5, 0.0625} + } + }, + +on_place = onplace, + +after_destruct = afterdestruct, + +on_rightclick = rightclick, +}) +minetest.register_node(doorb, { + tiles = { + "scifi_nodes_door"..num.."a_edge.png", + "scifi_nodes_door"..num.."a_edge.png", + "scifi_nodes_door"..num.."a_edge.png", + "scifi_nodes_door"..num.."a_edge.png", + "scifi_nodes_door"..num.."a_rtop.png", + "scifi_nodes_door"..num.."a_top.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 1}, + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.0625, 0.5, 0.5, 0.0625} + } + }, + selection_box = { + type = "fixed", + fixed = { + {0, 0, 0, 0, 0, 0}, + } + }, +})minetest.register_node(doorc, { + tiles = { + "scifi_nodes_door"..num.."a_edge.png", + "scifi_nodes_door"..num.."a_edge.png", + "scifi_nodes_door"..num.."a_edge.png", + "scifi_nodes_door"..num.."a_edge.png", + "scifi_nodes_door"..num.."a_rbottom0.png", + "scifi_nodes_door"..num.."a_bottom0.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + drop = doora, + groups = {cracky = 1}, + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.0625, -0.25, 0.5, 0.0625}, + } + }, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.0625, -0.25, 1.5, 0.0625}, + } + }, +after_place_node = afterplace, +after_destruct = afterdestruct, +on_timer = ontimer, +}) +minetest.register_node(doord, { + tiles = { + "scifi_nodes_door"..num.."a_edge.png", + "scifi_nodes_door"..num.."a_edge.png", + "scifi_nodes_door"..num.."a_edge.png", + "scifi_nodes_door"..num.."a_edge.png", + "scifi_nodes_door"..num.."a_rtopo.png", + "scifi_nodes_door"..num.."a_topo.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 1}, + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.0625, -0.25, 0.5, 0.0625}, + } + }, + selection_box = { + type = "fixed", + fixed = { + {0, 0, 0, 0, 0, 0}, + } + }, +}) +end diff --git a/mods/scifi_nodes/init.lua b/mods/scifi_nodes/init.lua new file mode 100644 index 00000000..3c655395 --- /dev/null +++ b/mods/scifi_nodes/init.lua @@ -0,0 +1,894 @@ + +--sounds added by Mahal + +local sound_wood = default.node_sound_wood_defaults() +local sound_stone = default.node_sound_stone_defaults() +local sound_metal = default.node_sound_metal_defaults() +local sound_glass = default.node_sound_glass_defaults() +local sound_dirt = default.node_sound_dirt_defaults() + +local sound_hard = default.node_sound_stone_defaults() +local sound_soft = default.node_sound_dirt_defaults() + + +--scifi_nodes by D00Med + +--the builder node + +local builder_formspec = + "size[8,9]" .. + default.gui_bg .. + default.gui_bg_img .. + default.gui_slots .. + "list[current_name;input;1,1;1,1;]" .. + "list[current_name;output;3,0;4,3;]" .. + "list[current_player;main;0,4.85;8,1;]" .. + "list[current_player;main;0,6.08;8,3;8]" .. + "listring[current_name;input]" .. + "listring[current_name;output]" .. + "listring[current_player;main]" .. + default.get_hotbar_bg(0,4.85) + +local input_items = { + {"default:steel_ingot 1", "scifi_nodes:black", "scifi_nodes:blue", "scifi_nodes:rough", "scifi_nodes:rust", "scifi_nodes:white", "scifi_nodes:grey", "scifi_nodes:pplwll", "scifi_nodes:greenmetal", "scifi_nodes:wall", "scifi_nodes:blue_square", "scifi_nodes:mesh", "scifi_nodes:greytile"} +} + +minetest.register_node("scifi_nodes:builder", { + description = "Sci-fi Node Builder", + tiles = { + "scifi_nodes_builder.png", + "scifi_nodes_builder.png", + "scifi_nodes_builder_side.png", + "scifi_nodes_builder_side.png", + "scifi_nodes_builder_side.png", + "scifi_nodes_builder_front.png" + }, + on_construct = function(pos) + --local meta = minetest.get_meta(pos) + --meta:set_string("infotext", "Node Builder (currently does nothing)") + + local meta = minetest.get_meta(pos) + meta:set_string("formspec", builder_formspec) + meta:set_string("infotext", "Node Builder") + local inv = meta:get_inventory() + inv:set_size("output", 4 * 3) + inv:set_size("input", 1 * 1) + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local player_inv = player:get_inventory() + if listname == "output" then + player_inv:add_item("main", stack) + inv:set_stack("output", index, "") + end + if listname == "input" then + for _, row in ipairs(input_items) do + local item = row[1] + if inv:contains_item("input", item) then + inv:set_stack("output", 1, row[2]) + inv:set_stack("output", 2, row[3]) + inv:set_stack("output", 3, row[4]) + inv:set_stack("output", 4, row[5]) + inv:set_stack("output", 5, row[6]) + inv:set_stack("output", 6, row[7]) + inv:set_stack("output", 7, row[8]) + inv:set_stack("output", 8, row[9]) + inv:set_stack("output", 9, row[10]) + inv:set_stack("output", 10, row[11]) + inv:set_stack("output", 11, row[12]) + inv:set_stack("output", 12, row[13]) + end + end + end + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local stack = inv:get_stack("input", 1) + local stack_name = stack:get_name() + inv:remove_item("input", stack_name.." 1") + + inv:set_stack("output", 1, "") + inv:set_stack("output", 2, "") + inv:set_stack("output", 3, "") + inv:set_stack("output", 4, "") + inv:set_stack("output", 5, "") + inv:set_stack("output", 6, "") + inv:set_stack("output", 7, "") + inv:set_stack("output", 8, "") + inv:set_stack("output", 9, "") + inv:set_stack("output", 10, "") + inv:set_stack("output", 11, "") + inv:set_stack("output", 12, "") + end, + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky=1, oddly_breakable_by_hand=1}, + sound = sound_metal +}) + +--nodes + +minetest.register_node("scifi_nodes:grassblk", { + description = "Dirt With Alien Grass", + tiles = {"default_grass.png^[colorize:cyan:80", "default_dirt.png", + {name = "default_dirt.png^(default_grass_side.png^[colorize:cyan:80)", + tileable_vertical = false}}, + light_source = 2, + groups = {crumbly=1, oddly_breakable_by_hand=1, soil=1}, + sounds = sound_dirt, +}) + +minetest.register_node("scifi_nodes:light", { + description = "blue lightbox", + sunlight_propagates = false, + tiles = { + "scifi_nodes_lighttop.png", + "scifi_nodes_lighttop.png", + "scifi_nodes_light.png", + "scifi_nodes_light.png", + "scifi_nodes_light.png", + "scifi_nodes_light.png" + }, + light_source = 10, + paramtype = "light", + groups = {cracky=1}, + sounds = sound_metal, +}) + +minetest.register_node("scifi_nodes:rfloor", { + description = "rusty floor", + tiles = { + "scifi_nodes_rustfloor.png", + }, + paramtype = "light", + paramtype2 = "facedir", + light_source = 10, + groups = {cracky=1}, + sounds = sound_metal, +}) + +minetest.register_node("scifi_nodes:bfloor", { + description = "blue floor", + tiles = { + "scifi_nodes_bluefloor.png", + }, + paramtype = "light", + paramtype2 = "facedir", + light_source = 10, + groups = {cracky=1}, + sounds = sound_metal, +}) + + +minetest.register_node("scifi_nodes:stripes2", { + description = "hazard stripes2", + sunlight_propagates = false, + tiles = { + "scifi_nodes_stripes2top.png", + "scifi_nodes_stripes2top.png", + "scifi_nodes_stripes2.png", + "scifi_nodes_stripes2.png", + "scifi_nodes_stripes2.png", + "scifi_nodes_stripes2.png" + }, + paramtype = "light", + groups = {cracky=1}, + sounds = sound_hard, +}) + +minetest.register_node("scifi_nodes:gblock", { + description = "Green metal block", + sunlight_propagates = false, + tiles = { + "scifi_nodes_gblock.png", + "scifi_nodes_gblock.png", + "scifi_nodes_gblock.png", + "scifi_nodes_gblock.png", + "scifi_nodes_gblock.png", + "scifi_nodes_gblock.png" + }, + paramtype = "light", + groups = {cracky=1}, + sounds = sound_metal, +}) + +minetest.register_node("scifi_nodes:gblock2", { + description = "Green metal block 2", + sunlight_propagates = false, + tiles = { + "scifi_nodes_gblock2_top.png", + "scifi_nodes_gblock.png", + "scifi_nodes_gblock2.png", + "scifi_nodes_gblock2_fx.png", + "scifi_nodes_gblock.png", + "scifi_nodes_gblock2_front1.png" + }, + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky=1}, + sounds = sound_metal, +}) + +minetest.register_node("scifi_nodes:gblock3", { + description = "Green metal block 3", + sunlight_propagates = false, + tiles = { + "scifi_nodes_gblock2_top.png", + "scifi_nodes_gblock.png", + "scifi_nodes_gblock2.png", + "scifi_nodes_gblock2_fx.png", + "scifi_nodes_gblock.png", + "scifi_nodes_gblock2_screen.png" + }, + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky=1}, + sounds = sound_metal, +}) + + + +minetest.register_node("scifi_nodes:green_light", { + description = "green lightbox", + sunlight_propagates = false, + tiles = { + "scifi_nodes_lighttop.png", + "scifi_nodes_lighttop.png", + "scifi_nodes_greenlight.png", + "scifi_nodes_greenlight.png", + "scifi_nodes_greenlight.png", + "scifi_nodes_greenlight.png" + }, + light_source = 10, + paramtype = "light", + groups = {cracky=1}, + sounds = sound_metal, +}) + +minetest.register_node("scifi_nodes:red_light", { + description = "red lightbox", + sunlight_propagates = false, + tiles = { + "scifi_nodes_lighttop.png", + "scifi_nodes_lighttop.png", + "scifi_nodes_redlight.png", + "scifi_nodes_redlight.png", + "scifi_nodes_redlight.png", + "scifi_nodes_redlight.png" + }, + light_source = 10, + paramtype = "light", + groups = {cracky=1}, + sounds = sound_metal, +}) + +minetest.register_node("scifi_nodes:discs", { + description = "disc shelves", + sunlight_propagates = false, + tiles = { + "scifi_nodes_box_top.png", + "scifi_nodes_box_top.png", + "scifi_nodes_discs.png", + "scifi_nodes_discs.png", + "scifi_nodes_discs.png", + "scifi_nodes_discs.png" + }, + paramtype = "light", + groups = {cracky=1}, + sounds = sound_metal, +}) + +minetest.register_node("scifi_nodes:disc", { + description = "disc", + drawtype = "torchlike", + sunlight_propagates = false, + tiles = { + "scifi_nodes_disc.png" + }, + inventory_image = "scifi_nodes_disc.png", + wield_image = "scifi_nodes_disc.png", + paramtype = "light", + groups = {cracky=1} +}) + + +minetest.register_node("scifi_nodes:blink", { + description = "blinking light", + sunlight_propagates = false, + tiles = {{ + name="scifi_nodes_lightbox.png", + animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.00}, + }}, + paramtype = "light", + groups = {cracky=1}, + light_source = 5, + sounds = sound_glass, +}) + +minetest.register_node("scifi_nodes:black_lights", { + description = "black wallpanel", + sunlight_propagates = false, + tiles = {{ + name="scifi_nodes_black_lights.png", + animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=0.50}, + }}, + paramtype = "light", + groups = {cracky=1}, + sounds = sound_metal, +}) + +minetest.register_node("scifi_nodes:black_screen", { + description = "black wall screen", + sunlight_propagates = false, + tiles = {{ + name="scifi_nodes_black_screen.png", + animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.00}, + }}, + paramtype = "light", + groups = {cracky=1}, + light_source = 1, + sounds = sound_glass, +}) + +minetest.register_node("scifi_nodes:screen", { + description = "electronic screen", + sunlight_propagates = false, + tiles = {{ + name="scifi_nodes_screen.png", + animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=0.50}, + }}, + paramtype = "light", + groups = {cracky=1}, + light_source = 5, + sounds = sound_glass, +}) + +minetest.register_node("scifi_nodes:screen2", { + description = "electronic screen 2", + sunlight_propagates = false, + tiles = {{ + name="scifi_nodes_screen2.png", + animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=0.50}, + }}, + paramtype = "light", + groups = {cracky=1}, + light_source = 5, + sounds = sound_glass, +}) + + + +minetest.register_node("scifi_nodes:white_pad", { + description = "white keypad", + sunlight_propagates = false, + tiles = { + "scifi_nodes_white2.png", + "scifi_nodes_white2.png", + "scifi_nodes_white2.png", + "scifi_nodes_white2.png", + "scifi_nodes_white2.png", + "scifi_nodes_white_pad.png" + }, + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky=1}, + sounds = sound_hard, + +}) + +minetest.register_node("scifi_nodes:white_base", { + description = "white wall base", + sunlight_propagates = false, + tiles = { + "scifi_nodes_white2.png", + "scifi_nodes_white2.png", + "scifi_nodes_white_side.png", + "scifi_nodes_white_side.png", + "scifi_nodes_white_side.png", + "scifi_nodes_white_side.png" + }, + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky=1}, + sounds = sound_hard, +}) + +minetest.register_node("scifi_nodes:grnpipe", { + description = "green pipe", + sunlight_propagates = false, + tiles = { + "scifi_nodes_greenpipe_front.png", + "scifi_nodes_greenpipe_front.png", + "scifi_nodes_greenpipe_top.png", + "scifi_nodes_greenpipe_top.png", + "scifi_nodes_greenpipe_top.png", + "scifi_nodes_greenpipe_top.png" + }, + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky=1}, + on_place = minetest.rotate_node, + sounds = sound_metal, +}) + + +minetest.register_node("scifi_nodes:grnpipe2", { + description = "broken green pipe", + sunlight_propagates = false, + tiles = { + "scifi_nodes_greenpipe_front.png", + "scifi_nodes_greenpipe_front.png", + "scifi_nodes_greenpipe2_top.png", + "scifi_nodes_greenpipe2_top.png", + "scifi_nodes_greenpipe2_top.png", + "scifi_nodes_greenpipe2_top.png" + }, + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky=1}, + on_place = minetest.rotate_node, + sounds = sound_metal, +}) + +minetest.register_node("scifi_nodes:octrng", { + description = "Orange Octagon Glass", + sunlight_propagates = false, + drawtype = "glasslike", + tiles = { + "scifi_nodes_octrng.png", + }, + paramtype = "light", + paramtype2 = "facedir", + use_texture_alpha = true, + light_source = 10, + groups = {cracky=2}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_node("scifi_nodes:octgrn", { + description = "Green Octagon Glass", + sunlight_propagates = false, + drawtype = "glasslike", + tiles = { + "scifi_nodes_octgrn.png", + }, + paramtype = "light", + paramtype2 = "facedir", + use_texture_alpha = true, + light_source = 10, + groups = {cracky=2}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_node("scifi_nodes:octbl", { + description = "Blue Octagon Glass", + sunlight_propagates = false, + drawtype = "glasslike", + tiles = { + "scifi_nodes_octbl.png", + }, + paramtype = "light", + paramtype2 = "facedir", + use_texture_alpha = true, + light_source = 10, + groups = {cracky=2}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_node("scifi_nodes:octppl", { + description = "Purple Octagon Glass", + sunlight_propagates = false, + drawtype = "glasslike", + tiles = { + "scifi_nodes_octppl.png", + }, + paramtype = "light", + paramtype2 = "facedir", + use_texture_alpha = true, + light_source = 10, + groups = {cracky=2}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_node("scifi_nodes:tower", { + description = "Wind tower", + sunlight_propagates = false, + drawtype = "plantlike", + tiles = {{ + name = "scifi_nodes_tower_anim.png", + animation = {type = "vertical_frames", aspect_w = 32, aspect_h = 32, length = 1.00}, + }}, + visual_scale = 2, + inventory_image = "scifi_nodes_tower.png", + paramtype = "light", + groups = {cracky=2}, +}) + +minetest.register_node("scifi_nodes:junk", { + description = "Junk", + sunlight_propagates = true, + paramtype = "light", + liquid_viscosity = 8, + liquidtype = "source", + liquid_alternative_flowing = "scifi_nodes:junk", + liquid_alternative_source = "scifi_nodes:junk", + liquid_renewable = false, + liquid_range = 0, + walkable = false, + tiles = { + "scifi_nodes_junk.png" + }, + groups = {snappy=1, oddly_breakable_by_hand=1, liquid=3, dig_immediate=1}, + sounds = sound_dirt, +}) + +--edited wool code (Copyright (C) 2012 celeron55, Perttu Ahola ) + +local node = {} +-- This uses a trick: you can first define the recipes using all of the base +-- colors, and then some recipes using more specific colors for a few non-base +-- colors available. When crafting, the last recipes will be checked first. +--add new block using texture name(without "scifi_nodes_" prefix) then the description, and then the name of the block +node.types = { + {"blue", "blue lines", "blue"}, + {"holes", "metal with holes","holes"}, + {"white2", "plastic", "white2"}, + {"engine", "engine", "engine"}, + {"wall", "metal wall", "wall"}, + {"white", "plastic wall", "white"}, + {"stripes2top", "dirty metal block","metal2"}, + {"rough", "rough metal", "rough"}, + {"lighttop", "metal block", "metal"}, + {"red", "red lines", "red"}, + {"green", "green lines", "green"}, + {"vent2", "vent", "vent"}, + {"stripes", "hazard stripes", "stripes"}, + {"rust", "rusty metal", "rust"}, + {"mesh", "metal mesh", "mesh"}, + {"black", "black wall", "black"}, + {"blackoct", "black octagon", "blackoct"}, + {"blackpipe", "black pipe", "blackpipe"}, + {"blacktile", "black tile", "blktl"}, + {"blacktile2", "black tile 2", "blktl2"}, + {"blackvent", "black vent", "blkvnt"}, + {"bluebars", "blue bars", "bluebars"}, + {"bluemetal", "blue metal", "blumtl"}, + {"bluetile", "blue tile", "blutl"}, + {"greytile", "grey tile", "grytl"}, + {"mesh2", "metal floormesh", "mesh2"}, + {"white", "plastic wall", "white"}, + {"pipe", "wall pipe", "pipe2"}, + {"pipeside", "side pipe", "pipe3"}, + {"tile", "white tile", "tile"}, + {"whiteoct", "white octagon", "whiteoct"}, + {"whitetile", "white tile2", "whttl"}, + {"black_detail", "black detail", "blckdtl"}, + {"green_square", "green metal block", "grnblck"}, + {"red_square", "red metal block", "redblck"}, + {"grey_square", "grey metal block", "greyblck"}, + {"blue_square", "blue metal block", "blublck"}, + {"black_mesh", "black vent block", "blckmsh"}, + {"dent", "dented metal block", "dent"}, + {"greenmetal", "green metal wall", "grnmetl"}, + {"greenmetal2", "green metal wall2", "grnmetl2"}, + {"greenlights", "green wall lights", "grnlt", 10}, + {"greenlights2", "green wall lights2", "grnlt2", 10}, + {"greenbar", "green light bar", "grnlghtbr", 10}, + {"green2", "green wall panel", "grn2"}, + {"greentubes", "green pipes", "grntubes"}, + {"grey", "grey wall", "gry"}, + {"greybolts", "grey wall bolts", "gryblts"}, + {"greybars", "grey bars", "grybrs"}, + {"greydots", "grey wall dots", "grydts"}, + {"greygreenbar", "gray power pipe", "grygrnbr", 10}, + {"octofloor", "Doom floor", "octofloor"}, + {"octofloor2", "Brown Doom floor", "octofloor2"}, + {"doomwall1", "Doom wall 1", "doomwall1"}, + {"doomwall2", "Doom wall 2", "doomwall2"}, + {"doomwall3", "Doom wall 3", "doomwall3"}, + {"doomwall4", "Doom wall 4", "doomwall4"}, + {"doomwall41", "Doom wall 4.1", "doomwall4.1"}, + {"doomwall42", "Doom wall 4.2", "doomwall4.2"}, + {"doomwall43", "Doom wall 4.3", "doomwall4.3"}, + {"doomwall431", "Doom wall 4.3.1", "doomwall4.3.1"}, + {"doomwall44", "Doom wall 4.4", "doomwall4.4"}, + {"blackdmg", "Damaged black wall", "blckdmg"}, + {"blackdmgstripe", "Damaged black wall(stripes)", "blckdmgstripe"}, + {"doomengine", "Doom engine wall", "doomengine"}, + {"monitorwall", "Wall monitors", "monitorwall"}, + {"screen3", "Wall monitor", "screen3"}, + {"doomlight", "Doom light", "doomlight", 12}, + {"bluwllight", "Blue wall light", "capsule3", 20}, + {"bluegrid", "Blue Grid", "bluegrid", 5}, + {"fan", "Fan", "fan"}, + {"ppllght", "Purple wall light", "", 50}, + {"pplwll", "Purple wall", "", 0}, + {"pplwll2", "Purple wall2", "", 0}, + {"pplwll3", "Purple wall3", "", 0}, + {"pplwll4", "Purple wall4", "", 0}, + {"pplblk", "Purple tile", "", 0}, + {"purple", "Purple node", "", 0}, + {"rock", "Moonstone", "", 0}, + {"rock2", "Moonstone2", "", 0}, + {"blackvnt", "Black vent", "", 0}, + {"blackplate", "Black plate", "", 0}, +} + +for _, row in ipairs(node.types) do + local name = row[1] + local desc = row[2] + local light = row[4] + -- Node Definition + minetest.register_node("scifi_nodes:"..name, { + description = desc, + tiles = {"scifi_nodes_"..name..".png"}, + groups = {cracky=1}, + paramtype = "light", + paramtype2 = "facedir", + light_source = light, + sounds = sound_hard, + }) +end + +node.plants = { + {"flower1", "Glow Flower", 1,0, 50}, + {"flower2", "Pink Flower", 1.5,0, 10}, + {"flower3", "Triffid", 2,5, 0}, + {"flower4", "Weeping flower", 1.5,0, 0}, + {"plant1", "Bulb Plant", 1,0, 0}, + {"plant2", "Trap Plant", 1.5,0, 30}, + {"plant3", "Blue Jelly Plant", 1.2,0, 10}, + {"plant4", "Green Jelly Plant", 1.2,0, 10}, + {"plant5", "Fern Plant", 1.7,0, 0}, + {"plant6", "Curly Plant", 1,0, 10}, + {"plant7", "Egg weed", 1,0, 0}, + {"plant8", "Slug weed", 1,0, 10}, + {"plant9", "Prickly Plant", 1,0, 0}, + {"plant10", "Umbrella weed", 1,0, 10}, + {"eyetree", "Eye Tree", 2.5,0, 0}, + {"grass", "Alien Grass", 1,0, 0}, +} + +for _, row in ipairs(node.plants) do + local name = row[1] + local desc = row[2] + local size = row[3] + local dmg = row[4] + local light = row[5] + -- Node Definition + minetest.register_node("scifi_nodes:"..name, { + description = desc, + tiles = {"scifi_nodes_"..name..".png"}, + drawtype = "plantlike", + inventory_image = "scifi_nodes_"..name..".png", + groups = {snappy=1, oddly_breakable_by_hand=1, dig_immediate=3, flora=1}, + paramtype = "light", + visual_scale = size, + buildable_to = true, + walkable = false, + damage_per_second = dmg, + selection_box = { + type = "fixed", + fixed = { + {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}, + } + }, + is_ground_content = false, + light_source = light, + }) +end + +--chest code from default(Copyright (C) 2012 celeron55, Perttu Ahola ) + +local chest_formspec = + "size[8,9]" .. + default.gui_bg .. + default.gui_bg_img .. + default.gui_slots .. + "list[current_name;main;0,0.3;8,4;]" .. + "list[current_player;main;0,4.85;8,1;]" .. + "list[current_player;main;0,6.08;8,3;8]" .. + "listring[current_name;main]" .. + "listring[current_player;main]" .. + default.get_hotbar_bg(0,4.85) + +local function get_locked_chest_formspec(pos) + local spos = pos.x .. "," .. pos.y .. "," .. pos.z + local formspec = + "size[8,9]" .. + default.gui_bg .. + default.gui_bg_img .. + default.gui_slots .. + "list[nodemeta:" .. spos .. ";main;0,0.3;8,4;]" .. + "list[current_player;main;0,4.85;8,1;]" .. + "list[current_player;main;0,6.08;8,3;8]" .. + "listring[nodemeta:" .. spos .. ";main]" .. + "listring[current_player;main]" .. + default.get_hotbar_bg(0,4.85) + return formspec +end + + +-- Helper functions + +local function drop_chest_stuff() + return function(pos, oldnode, oldmetadata, digger) + local meta = minetest.get_meta(pos) + meta:from_table(oldmetadata) + local inv = meta:get_inventory() + for i = 1, inv:get_size("main") do + local stack = inv:get_stack("main", i) + if not stack:is_empty() then + local p = { + x = pos.x + math.random(0, 5)/5 - 0.5, + y = pos.y, + z = pos.z + math.random(0, 5)/5 - 0.5} + minetest.add_item(p, stack) + end + end + end +end + +--chest code Copyright (C) 2011-2012 celeron55, Perttu Ahola +minetest.register_node("scifi_nodes:crate", { + description = "Crate", + tiles = {"scifi_nodes_crate.png"}, + paramtype2 = "facedir", + groups = {cracky = 1, oddly_breakable_by_hand = 2, fuel = 8}, + legacy_facedir_simple = true, + is_ground_content = false, + sounds = default.node_sound_wood_defaults(), + + after_dig_node = drop_chest_stuff(), + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", chest_formspec) + meta:set_string("infotext", "Crate") + local inv = meta:get_inventory() + inv:set_size("main", 8 * 4) + 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 chest 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 chest 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 chest at " .. minetest.pos_to_string(pos)) + end, +}) + +minetest.register_node("scifi_nodes:box", { + description = "Storage box", + tiles = { + "scifi_nodes_box_top.png", + "scifi_nodes_box_top.png", + "scifi_nodes_box.png", + "scifi_nodes_box.png", + "scifi_nodes_box.png", + "scifi_nodes_box.png" + }, + paramtype2 = "facedir", + groups = {cracky = 1}, + legacy_facedir_simple = true, + is_ground_content = false, + sounds = default.node_sound_metal_defaults(), + + after_dig_node = drop_chest_stuff(), + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", chest_formspec) + meta:set_string("infotext", "Box") + local inv = meta:get_inventory() + inv:set_size("main", 8 * 4) + 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 chest 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 chest 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 chest at " .. minetest.pos_to_string(pos)) + end, +}) +--end of chest code + +minetest.register_node("scifi_nodes:blumetlight", { + description = "blue metal light", + sunlight_propagates = false, + tiles = { + "scifi_nodes_bluemetal.png", + "scifi_nodes_bluemetal.png", + "scifi_nodes_blue_metal_light.png", + "scifi_nodes_blue_metal_light.png", + "scifi_nodes_blue_metal_light.png", + "scifi_nodes_blue_metal_light.png" + }, + light_source = 10, + paramtype = "light", + groups = {cracky=1}, + sounds = sound_metal, +}) + + +minetest.register_node("scifi_nodes:lightstp", { + description = "twin lights", + sunlight_propagates = false, + tiles = { + "scifi_nodes_lightstripe.png" + }, + light_source = 14, + paramtype = "light", + groups = {cracky=1}, + sounds = sound_glass, +}) + +minetest.register_node("scifi_nodes:blklt2", { + description = "black stripe light", + sunlight_propagates = false, + tiles = { + "scifi_nodes_black_light2.png" + }, + light_source = 10, + paramtype = "light", + groups = {cracky=1}, + sounds = sound_metal, +}) + +minetest.register_node("scifi_nodes:blumetstr", { + description = "blue stripe light", + sunlight_propagates = false, + tiles = { + "scifi_nodes_blue_metal_stripes2.png" + }, + light_source = 10, + paramtype = "light", + groups = {cracky=1}, + sounds = sound_metal, +}) + +minetest.register_node("scifi_nodes:glass", { + description = "dark glass", + drawtype = "glasslike", + sunlight_propagates = false, + tiles = { + "scifi_nodes_glass.png" + }, + use_texture_alpha = true, + paramtype = "light", + groups = {cracky=1}, + sounds = sound_glass, +}) + +minetest.register_node("scifi_nodes:whtlightbnd", { + description = "white light stripe", + sunlight_propagates = false, + tiles = { + "scifi_nodes_lightband.png" + }, + light_source = 10, + paramtype = "light", + groups = {cracky=1}, + sounds = sound_glass, +}) + +--extra stuff +local xpane = minetest.get_modnames() +if xpane == xpane then +dofile(minetest.get_modpath("scifi_nodes").."/panes.lua") +end +dofile(minetest.get_modpath("scifi_nodes").."/doors.lua") +dofile(minetest.get_modpath("scifi_nodes").."/nodeboxes.lua") +dofile(minetest.get_modpath("scifi_nodes").."/models.lua") +dofile(minetest.get_modpath("scifi_nodes").."/crafts.lua") diff --git a/mods/scifi_nodes/license.txt b/mods/scifi_nodes/license.txt new file mode 100644 index 00000000..41659ff0 --- /dev/null +++ b/mods/scifi_nodes/license.txt @@ -0,0 +1,64 @@ + +License for Code +---------------- + +Copyright (C) 2016 DOOMED + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program 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 Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +License for Textures, Models and Sounds +--------------------------------------- + +CC-BY-SA 3.0 UNPORTED. Created by DOOMED + +Code from Minetest_game (chests and furnace): +Copyright (C) 2011-2012 celeron55, Perttu Ahola +LGPL2.1(as shown above) + +With code from(doors.lua): +mydoors mod by don +license: +DO WHAT YOU WANT TO PUBLIC LICENSE +or abbreviated DWYWPL + +December 2nd 2015 +License Copyright (C) 2015 Michael Tomaino (PlatinumArts@gmail.com) +www.sandboxgamemaker.com/DWYWPL/ + +DO WHAT YOU WANT TO PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +1. You are allowed to do whatever you want to with what content is using this license. +2. This content is provided 'as-is', without any express or implied warranty. In no event +will the authors be held liable for any damages arising from the use of this content. + + +For moreblocks_slope.obj: + +zlib license +============ + +Copyright (c) 2011-2015 Calinou and contributors + +**This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.** + +Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source distribution. +**Forum topic:** \ No newline at end of file diff --git a/mods/scifi_nodes/models.lua b/mods/scifi_nodes/models.lua new file mode 100644 index 00000000..9a4f18ac --- /dev/null +++ b/mods/scifi_nodes/models.lua @@ -0,0 +1,65 @@ +--some code taken from moreblocks(the collision and selection boxes), license below: +--Copyright (c) 2011-2015 Calinou and contributors. +--Licensed under the zlib license. + +scifi_nodes = {} + +function scifi_nodes.register_slope(name, desc, texture, light) +minetest.register_node("scifi_nodes:slope_"..name, { + description = desc.." Slope", + sunlight_propagates = false, + drawtype = "mesh", + mesh = "moreblocks_slope.obj", + tiles = texture, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, + {-0.5, -0.25, -0.25, 0.5, 0, 0.5}, + {-0.5, 0, 0, 0.5, 0.25, 0.5}, + {-0.5, 0.25, 0.25, 0.5, 0.5, 0.5} + } + }, + collision_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, + {-0.5, -0.25, -0.25, 0.5, 0, 0.5}, + {-0.5, 0, 0, 0.5, 0.25, 0.5}, + {-0.5, 0.25, 0.25, 0.5, 0.5, 0.5} + } + }, + paramtype = "light", + paramtype2 = "facedir", + light_source = light, + groups = {cracky=1}, + on_place = minetest.rotate_node +}) +end + +scifi_nodes.register_slope("white2", "Plastic", {"scifi_nodes_white2.png",}, 0) +scifi_nodes.register_slope("black", "Black", {"scifi_nodes_black.png",}, 0) +scifi_nodes.register_slope("white", "White", {"scifi_nodes_white.png",}, 0) +scifi_nodes.register_slope("grey", "Grey", {"scifi_nodes_grey.png",}, 0) +scifi_nodes.register_slope("bluebars", "Blue bars", {"scifi_nodes_bluebars.png",}, 0) +scifi_nodes.register_slope("mesh2", "Metal floormesh", {"scifi_nodes_mesh2.png",}, 0) +scifi_nodes.register_slope("mesh", "Metal mesh", {"scifi_nodes_mesh.png",}, 0) +scifi_nodes.register_slope("vent", "Vent", {"scifi_nodes_vent2.png",}, 0) +scifi_nodes.register_slope("rlight", "Red light", {"scifi_nodes_redlight.png",}, 10) +scifi_nodes.register_slope("blight", "Blue light", {"scifi_nodes_light.png",}, 10) +scifi_nodes.register_slope("glight", "Green light", {"scifi_nodes_greenlight.png",}, 10) +scifi_nodes.register_slope("holes", "Holes", {"scifi_nodes_holes.png",}, 0) +scifi_nodes.register_slope("pipe", "Pipe", {"scifi_nodes_pipe.png",}, 0) +scifi_nodes.register_slope("stripes", "Stripes", {"scifi_nodes_stripes.png",}, 0) +scifi_nodes.register_slope("screen", "Screen", {"scifi_nodes_screen3.png",}, 5) +scifi_nodes.register_slope("lightstripe", "Lightstripe", {"scifi_nodes_lightstripe.png",}, 20) +scifi_nodes.register_slope("blight2", "Blue Light 2", {"scifi_nodes_capsule3.png",}, 20) +scifi_nodes.register_slope("wallpipe", "Alien Pipe", {"scifi_nodes_wallpipe.png",}, 0) +scifi_nodes.register_slope("alien", "Alien Wall", {"scifi_nodes_alnslp.png",}, 0) +scifi_nodes.register_slope("purple", "Purple", {"scifi_nodes_purple.png",}, 0) +scifi_nodes.register_slope("gblock", "Gblock", {"scifi_nodes_gblock2_front1.png",}, 0) +scifi_nodes.register_slope("greenmetal", "Green metal", {"scifi_nodes_greenmetal.png",}, 0) +scifi_nodes.register_slope("bluemetal", "Blue metal", {"scifi_nodes_bluemetal.png",}, 0) +scifi_nodes.register_slope("wall", "Metal wall", {"scifi_nodes_wall.png",}, 0) +scifi_nodes.register_slope("rough", "Rough metal", {"scifi_nodes_rough.png",}, 0) +scifi_nodes.register_slope("blklt2", "Black stripe light", {"scifi_nodes_black_light2.png",}, 10) diff --git a/mods/scifi_nodes/models/moreblocks_slope.obj b/mods/scifi_nodes/models/moreblocks_slope.obj new file mode 100644 index 00000000..05c853b7 --- /dev/null +++ b/mods/scifi_nodes/models/moreblocks_slope.obj @@ -0,0 +1,21 @@ +# Blender v2.69 (sub 0) OBJ File: 'slope_test_slope_onetexture.blend' +# www.blender.org +mtllib slope_test_slope_onetexture.mtl +o Cube_Cube.002 +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.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 -0.500000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +usemtl None +s off +f 1/1 2/2 3/3 4/4 +f 4/3 3/4 5/1 6/2 +f 2/1 5/3 3/4 +f 1/2 4/3 6/4 +f 2/1 1/2 6/3 5/4 diff --git a/mods/scifi_nodes/nodeboxes.lua b/mods/scifi_nodes/nodeboxes.lua new file mode 100644 index 00000000..3e1ddbeb --- /dev/null +++ b/mods/scifi_nodes/nodeboxes.lua @@ -0,0 +1,1241 @@ + +-- GENERATED CODE +-- Node Box Editor, version 0.9.0 + +position1 = nil +position2 = nil + +minetest.register_node("scifi_nodes:alienslope", { + description = "Alien Platform", + tiles = { + "scifi_nodes_alnslp_top2.png", + "scifi_nodes_alnslp_top.png", + "scifi_nodes_alnslp.png", + "scifi_nodes_alnslp.png", + "scifi_nodes_alnslp_top.png", + "scifi_nodes_alnslp_top.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky=1}, + sounds = default.node_sound_metal_defaults(), + node_box = { + type = "fixed", + fixed = { + {0, -0.5, -0.5, 0.5, 0.5, 0.5}, -- NodeBox10 + {-0.5, -0.5, -0.5, 0, -0.25, 0.5}, -- NodeBox11 + {-0.4375, -0.25, -0.5, 0, -0.125, 0.5}, -- NodeBox12 + {-0.375, -0.125, -0.5, 0, 0, 0.5}, -- NodeBox13 + {-0.3125, 0, -0.5, 0, 0.125, 0.5}, -- NodeBox14 + {-0.25, 0.125, -0.5, 0, 0.25, 0.5}, -- NodeBox15 + {-0.1875, 0.25, -0.5, 0.0625, 0.375, 0.5}, -- NodeBox16 + {-0.125, 0.375, -0.5, 0.5, 0.5, 0.5}, -- NodeBox17 + } + }, + on_place = minetest.rotate_node +}) + +minetest.register_node("scifi_nodes:wallpipe", { + description = "Alien wall pipe", + tiles = { + "scifi_nodes_wallpipe.png", + "scifi_nodes_wallpipe.png", + "scifi_nodes_wallpipe.png", + "scifi_nodes_wallpipe.png", + "scifi_nodes_wallpipe.png", + "scifi_nodes_wallpipe.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky=1}, + sounds = default.node_sound_metal_defaults(), + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.125, 0.5, 0.5, 0.5}, -- NodeBox18 + {-0.1875, -0.5, -0.0625, 0.1875, 0.5, 0.125}, -- NodeBox19 + {-0.125, -0.5, -0.125, 0.125, 0.5, 0.125}, -- NodeBox20 + {0.3125, -0.5, 0.0625, 0.4375, 0.5, 0.125}, -- NodeBox21 + {-0.4375, -0.5, 0.0625, -0.3125, 0.5, 0.125}, -- NodeBox22 + {-0.5, 0.0625, 0, 0.5, 0.1875, 0.0625}, -- NodeBox23 + {-0.5, -0.125, 0, 0.5, 0, 0.0625}, -- NodeBox24 + } + }, +}) + +minetest.register_node("scifi_nodes:plant_trap", { + description = "Hanging Trap Plant", + tiles = { + "scifi_nodes_traplant_top.png", + "scifi_nodes_traplant_side.png", + "scifi_nodes_traplant_side.png", + "scifi_nodes_traplant_side.png", + "scifi_nodes_traplant_side.png", + "scifi_nodes_traplant_side.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + light_source = 5, + walkable = false, + sunlight_propagates = false, + groups = {snappy=1, oddly_breakable_by_hand=1}, + node_box = { + type = "fixed", + fixed = { + {-0.125, -0.4375, -0.125, 0.125, 0.125, 0.125}, -- NodeBox25 + {-0.1875, 0.125, -0.1875, 0.1875, 0.1875, 0.1875}, -- NodeBox26 + {-0.0625, -0.5, -0.0625, 0, -0.4375, 0.375}, -- NodeBox27 + {-0.0625, -0.5, 0.3125, 0, 0.5, 0.375}, -- NodeBox28 + } + } +}) + +minetest.register_node("scifi_nodes:egg", { + description = "Alien Egg", + tiles = { + "scifi_nodes_egg_top.png", + "scifi_nodes_egg_top.png", + "scifi_nodes_egg_side.png", + "scifi_nodes_egg_side.png", + "scifi_nodes_egg_side.png", + "scifi_nodes_egg_side.png" + }, + sunlight_propagates = false, + drawtype = "nodebox", + paramtype = "light", + groups = {cracky=1, oddly_breakable_by_hand=1, dig_immediate=2, falling_node=1}, + light_source = 5, + sounds = default.node_sound_wood_defaults(), + node_box = { + type = "fixed", + fixed = { + {-0.25, -0.5, -0.25, 0.25, -0.4375, 0.25}, -- NodeBox1 + {-0.375, -0.4375, -0.375, 0.375, -0.3125, 0.375}, -- NodeBox2 + {-0.4375, -0.3125, -0.375, 0.4375, 0.3125, 0.375}, -- NodeBox3 + {-0.375, 0.3125, -0.375, 0.375, 0.4375, 0.375}, -- NodeBox4 + {-0.3125, 0.4375, -0.3125, 0.3125, 0.5625, 0.3125}, -- NodeBox5 + {-0.25, 0.5625, -0.25, 0.25, 0.6875, 0.25}, -- NodeBox6 + {-0.1875, 0.6875, -0.1875, 0.1875, 0.75, 0.1875}, -- NodeBox7 + {-0.125, 0.75, -0.125, 0.125, 0.8125, 0.125}, -- NodeBox8 + {-0.375, -0.3125, -0.4375, 0.375, 0.3125, 0.4375}, -- NodeBox9 + } + } +}) + +if minetest.get_modpath("scifi_mobs") then +minetest.register_abm({ + nodenames = {"scifi_nodes:egg"}, + interval = 30, chance = 10, + action = function(pos, node, _, _) + minetest.env:add_entity(pos, "scifi_mobs:xenomorph") + minetest.env:remove_node(pos) + end +}) +end + +minetest.register_node("scifi_nodes:pad", { + description = "teleport pad", + tiles = { + "scifi_nodes_pad.png", + "scifi_nodes_pad.png", + "scifi_nodes_pad.png", + "scifi_nodes_pad.png", + "scifi_nodes_pad.png", + "scifi_nodes_pad.png" + }, + drawtype = "nodebox", + paramtype = "light", + groups = {cracky=1, oddly_breakable_by_hand=1}, + light_source = 5, + sounds = default.node_sound_metal_defaults(), + on_construct = function(pos, node, placer) + local meta = minetest.get_meta(pos) + if position1 == nil then + position1 = pos + meta:set_int("type", 1) + elseif position2 == nil then + position2 = pos + meta:set_int("type", 2) + else + minetest.chat_send_all("There can only be two teleportation pads at a time!") + end + end, + on_rightclick = function(pos, node, clicker) + local meta = minetest.get_meta(pos) + if meta:get_int("type") == 1 and position2 ~= nil and position1 ~= nil then + minetest.add_particlespawner( + 25, --amount + 1.5, --time + {x=pos.x-0.9, y=pos.y-0.3, z=pos.z-0.9}, --minpos + {x=pos.x+0.9, y=pos.y-0.3, z=pos.z+0.9}, --maxpos + {x=0, y=0, z=0}, --minvel + {x=0, y=0, z=0}, --maxvel + {x=-0,y=1,z=-0}, --minacc + {x=0,y=2,z=0}, --maxacc + 0.5, --minexptime + 1, --maxexptime + 2, --minsize + 5, --maxsize + false, --collisiondetection + "scifi_nodes_tp_part.png" --texture + ) + minetest.after(1, function() + local ppos = clicker:getpos() + if minetest.get_node({x=ppos.x, y=ppos.y, z=ppos.z}).name == "scifi_nodes:pad" then + clicker:setpos(position2) + else + --minetest.chat_send_all("Nothing to teleport!") + end + local objs = minetest.env:get_objects_inside_radius(pos, 3) + for _, obj in pairs(objs) do + if obj:get_luaentity() and not obj:is_player() then + if obj:get_luaentity().name == "__builtin:item" then + local item1 = obj:get_luaentity().itemstring + local obj2 = minetest.env:add_entity(position2, "__builtin:item") + obj2:get_luaentity():set_item(item1) + obj:remove() + end + end + end + end) + elseif meta:get_int("type") == 2 and position1 ~= nil and position2 ~= nil then + minetest.add_particlespawner( + 25, --amount + 1.5, --time + {x=pos.x-0.9, y=pos.y-0.3, z=pos.z-0.9}, --minpos + {x=pos.x+0.9, y=pos.y-0.3, z=pos.z+0.9}, --maxpos + {x=0, y=0, z=0}, --minvel + {x=0, y=0, z=0}, --maxvel + {x=-0,y=1,z=-0}, --minacc + {x=0,y=2,z=0}, --maxacc + 0.5, --minexptime + 1, --maxexptime + 2, --minsize + 5, --maxsize + false, --collisiondetection + "scifi_nodes_tp_part.png" --texture + ) + minetest.after(1, function() + local ppos = clicker:getpos() + if minetest.get_node({x=ppos.x, y=ppos.y, z=ppos.z}).name == "scifi_nodes:pad" then + clicker:setpos(position1) + else + --minetest.chat_send_all("No-one to teleport!") + end + local objs = minetest.env:get_objects_inside_radius(pos, 3) + for _, obj in pairs(objs) do + if obj:get_luaentity() and not obj:is_player() then + if obj:get_luaentity().name == "__builtin:item" then + local item1 = obj:get_luaentity().itemstring + local obj2 = minetest.env:add_entity(position1, "__builtin:item") + obj2:get_luaentity():set_item(item1) + obj:remove() + end + end + end + end) + elseif position1 == nil and meta:get_int("type") ~= 2 then + position1 = pos + meta:set_int("type", 1) + minetest.chat_send_all("Teleporter 1 connected at "..minetest.pos_to_string(pos)) + elseif position2 == nil and meta:get_int("type") ~= 1 then + position2 = pos + meta:set_int("type", 2) + minetest.chat_send_all("Teleporter 2 connected at "..minetest.pos_to_string(pos)) + else minetest.chat_send_all("Teleporter error!") + end + end, + on_destruct = function(pos, oldnode, placer) + local meta = minetest.get_meta(pos) + if meta:get_int("type") == 1 then + position1 = nil + meta:set_int("type", 0) + elseif meta:get_int("type") == 2 then + position2 = nil + meta:set_int("type", 0) + end + end, + node_box = { + type = "fixed", + fixed = { + {-0.9375, -0.5, -0.75, 0.875, -0.375, 0.75}, -- NodeBox1 + {-0.8125, -0.5, -0.875, 0.75, -0.375, 0.875}, -- NodeBox2 + {-0.875, -0.5, -0.8125, 0.8125, -0.375, 0.8125}, -- NodeBox3 + {-0.8125, -0.5, -0.75, 0.75, -0.3125, 0.75}, -- NodeBox4 + } + } +}) + +minetest.register_node("scifi_nodes:pplwndw", { + description = "Purple Window", + tiles = { + "scifi_nodes_purple.png", + "scifi_nodes_purple.png", + "scifi_nodes_purple.png", + "scifi_nodes_purple.png", + "scifi_nodes_pplwndw.png", + "scifi_nodes_pplwndw.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + use_texture_alpha = true, + groups = {cracky=3}, + sounds = default.node_sound_glass_defaults(), + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.0625, 0.5, 0.5, 0.0625}, -- NodeBox1 + } + } +}) + +minetest.register_node("scifi_nodes:gloshroom", { + description = "Gloshroom", + tiles = { + "scifi_nodes_gloshroom.png", + "scifi_nodes_gloshroom_under.png", + "scifi_nodes_gloshroom.png", + "scifi_nodes_gloshroom.png", + "scifi_nodes_gloshroom.png", + "scifi_nodes_gloshroom.png" + }, + drawtype = "nodebox", + paramtype = "light", + light_source = 50, + walkable = false, + buildable_to = true, + sunlight_propagates = false, + use_texture_alpha = true, + groups = {fleshy=1, oddly_breakable_by_hand=1, dig_immediate=3}, + node_box = { + type = "fixed", + fixed = { + {-0.05, -0.5, -0.05, 0.05, 0.0625, 0.05}, -- NodeBox1 + {-0.4375, -0.0625, -0.375, 0.4375, 0, 0.375}, -- NodeBox2 + {-0.375, 0, -0.375, 0.375, 0.0625, 0.375}, -- NodeBox3 + {-0.3125, 0.0625, -0.3125, 0.3125, 0.125, 0.3125}, -- NodeBox4 + {-0.1875, 0.125, -0.1875, 0.1875, 0.1875, 0.1875}, -- NodeBox5 + {-0.375, -0.0625, -0.4375, 0.375, 0, 0.4375}, -- NodeBox6 + } + } +}) + +minetest.register_node("scifi_nodes:pot_lid", { + description = "plant pot lid(place above plant)", + tiles = { + "scifi_nodes_glass2.png", + "scifi_nodes_glass2.png", + "scifi_nodes_glass2.png", + "scifi_nodes_glass2.png", + "scifi_nodes_glass2.png", + "scifi_nodes_glass2.png" + }, + inventory_image = "scifi_nodes_pod_inv.png", + wield_image = "scifi_nodes_pod_inv.png", + use_texture_alpha = true, + drawtype = "nodebox", + paramtype = "light", + groups = {cracky=1, not_in_creative_inventory=1}, + sunlight_propagates = true, + selection_box = { + type = "fixed", + fixed = {0, 0, 0, 0, 0, 0} + }, + collision_box = { + type = "fixed", + fixed = {-0.5, -1.5, -0.5, 0.5, -0.5, 0.5} + }, + node_box = { + type = "fixed", + fixed = { + {-0.1875, -0.5625, -0.1875, 0.1875, -0.5, 0.1875}, -- NodeBox13 + {-0.25, -0.625, -0.25, 0.25, -0.5625, 0.25}, -- NodeBox14 + {-0.3125, -0.6875, -0.3125, 0.3125, -0.625, 0.3125}, -- NodeBox15 + {-0.375, -0.75, -0.375, 0.375, -0.6875, 0.375}, -- NodeBox16 + {-0.4375, -0.75, 0.375, 0.4375, -1.5, 0.4375}, -- NodeBox17 + {-0.4375, -0.75, -0.4375, 0.4375, -1.5, -0.375}, -- NodeBox18 + {0.375, -0.75, -0.4375, 0.4375, -1.5, 0.4375}, -- NodeBox19 + {-0.4375, -0.75, -0.4375, -0.375, -1.5, 0.4375}, -- NodeBox20 + } + }, + sounds = default.node_sound_glass_defaults() +}) + + + +minetest.register_node("scifi_nodes:pot", { + description = "metal plant pot (right click for lid, shift+rightclick to plant)", + tiles = { + "scifi_nodes_pot.png", + "scifi_nodes_greybolts.png", + "scifi_nodes_greybolts.png", + "scifi_nodes_greybolts.png", + "scifi_nodes_greybolts.png", + "scifi_nodes_greybolts.png" + }, + drawtype = "nodebox", + paramtype = "light", + groups = {cracky=1, soil=1, sand=1}, + sounds = default.node_sound_metal_defaults(), + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.25, -0.5, 0.5, 0.5, 0.5}, -- NodeBox1 + {0.1875, -0.5, 0.1875, 0.5, -0.25, 0.5}, -- NodeBox2 + {-0.5, -0.5, -0.5, -0.1875, -0.25, -0.1875}, -- NodeBox3 + {-0.5, -0.5, 0.1875, -0.1875, -0.25, 0.5}, -- NodeBox4 + {0.1875, -0.5, -0.5, 0.5, -0.25, -0.1875}, -- NodeBox5 + } + }, + on_rightclick = function(pos, node, clicker, item, _) + local node = minetest.get_node({x=pos.x, y=pos.y+2, z=pos.z}) + if node.name == "scifi_nodes:pot_lid" then + minetest.set_node({x=pos.x, y=pos.y+2, z=pos.z}, {name="air", param2=node.param2}) + elseif node.name ~= "scifi_nodes:pot_lid" and node.name == "air" then + minetest.set_node({x=pos.x, y=pos.y+2, z=pos.z}, {name="scifi_nodes:pot_lid", param2=node.param2}) + end + end, + on_destruct = function(pos, node, _) + minetest.remove_node({x=pos.x, y=pos.y+2, z=pos.z}) + end +}) + +minetest.register_node("scifi_nodes:pot2", { + description = "metal wet plant pot(right click for lid, shift+rightclick to plant)", + tiles = { + "scifi_nodes_pot.png^[colorize:black:100", + "scifi_nodes_greybolts.png", + "scifi_nodes_greybolts.png", + "scifi_nodes_greybolts.png", + "scifi_nodes_greybolts.png", + "scifi_nodes_greybolts.png" + }, + drawtype = "nodebox", + paramtype = "light", + groups = {cracky=1, soil=3, wet=1}, + sounds = default.node_sound_metal_defaults(), + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.25, -0.5, 0.5, 0.5, 0.5}, -- NodeBox1 + {0.1875, -0.5, 0.1875, 0.5, -0.25, 0.5}, -- NodeBox2 + {-0.5, -0.5, -0.5, -0.1875, -0.25, -0.1875}, -- NodeBox3 + {-0.5, -0.5, 0.1875, -0.1875, -0.25, 0.5}, -- NodeBox4 + {0.1875, -0.5, -0.5, 0.5, -0.25, -0.1875}, -- NodeBox5 + } + }, + on_rightclick = function(pos, node, clicker, item, _) + local node = minetest.get_node({x=pos.x, y=pos.y+2, z=pos.z}) + if node.name == "scifi_nodes:pot_lid" then + minetest.set_node({x=pos.x, y=pos.y+2, z=pos.z}, {name="air", param2=node.param2}) + elseif node.name ~= "scifi_nodes:pot_lid" and node.name == "air" then + minetest.set_node({x=pos.x, y=pos.y+2, z=pos.z}, {name="scifi_nodes:pot_lid", param2=node.param2}) + end + end, + on_destruct = function(pos, node, _) + minetest.remove_node({x=pos.x, y=pos.y+2, z=pos.z}) + end +}) + +minetest.register_node("scifi_nodes:lightbar", { + description = "ceiling light", + tiles = { + "scifi_nodes_white2.png", + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + light_source = 25, + node_box = { + type = "fixed", + fixed = { + {-0.125, -0.5, -0.5, 0.125, -0.375, 0.5}, -- NodeBox1 + } + }, + selection_box = { + type = "wallmounted", + wallmounted = { + {-0.125, -0.5, -0.5, 0.125, -0.375, 0.5}, -- NodeBox1 + } + }, + groups = {cracky=1}, + sounds = default.node_sound_glass_defaults() +}) +--wall switch, currently does not do anything +minetest.register_node("scifi_nodes:switch_off", { + description = "Wall switch", + tiles = { + "scifi_nodes_switch_off.png", + }, + inventory_image = "scifi_nodes_switch_on.png", + wield_image = "scifi_nodes_switch_on.png", + drawtype = "signlike", + sunlight_propagates = true, + selection_box = { + type = "wallmounted", + fixed = {-0.5, -0.3, -0.3, -0.45, 0.3, 0.3} + }, + paramtype = "light", + paramtype2 = "wallmounted", + groups = {cracky=1, oddly_breakable_by_hand=1}, + on_rightclick = function(pos, node, clicker, item, _) + minetest.set_node(pos, {name="scifi_nodes:switch_on", param2=node.param2}) + end, + sounds = default.node_sound_glass_defaults() +}) + +minetest.register_node("scifi_nodes:switch_on", { + description = "Wall switch", + sunlight_propagates = true, + tiles = { + "scifi_nodes_switch_on.png", + }, + inventory_image = "scifi_nodes_switch_on.png", + wield_image = "scifi_nodes_switch_on.png", + drawtype = "signlike", + selection_box = { + type = "wallmounted", + fixed = {-0.5, -0.3, -0.3, -0.45, 0.3, 0.3} + }, + paramtype = "light", + paramtype2 = "wallmounted", + light_source = 5, + groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1}, + on_rightclick = function(pos, node, clicker, item, _) + minetest.set_node(pos, {name="scifi_nodes:switch_off", param2=node.param2}) + end, + sounds = default.node_sound_glass_defaults() +}) +--end of wall switch + +minetest.register_node("scifi_nodes:light_dynamic", { + description = "Wall light", + tiles = { + "scifi_nodes_lightoverlay.png", + }, + inventory_image = "scifi_nodes_lightoverlay.png", + wield_image = "scifi_nodes_lightoverlay.png", + drawtype = "signlike", + paramtype = "light", + selection_box = { + type = "wallmounted", + fixed = {-0.5, -0.5, -0.5, -0.45, 0.5, 0.5} + }, + paramtype2 = "wallmounted", + light_source = 25, + groups = {cracky=1, oddly_breakable_by_hand=1}, + sounds = default.node_sound_glass_defaults() +}) + +minetest.register_node("scifi_nodes:ladder", { + description = "Metal Ladder", + tiles = { + "scifi_nodes_ladder.png", + }, + drawtype = "nodebox", + paramtype = "light", + selection_box = { + type = "wallmounted", + fixed = {-0.5, -0.5, -0.5, -0.45, 0.5, 0.5} + }, + node_box = { + type = "fixed", + fixed = { + {0.3125, -0.5, -0.4375, 0.4375, -0.375, -0.3125}, -- NodeBox12 + {-0.4375, -0.5, -0.4375, -0.3125, -0.375, -0.3125}, -- NodeBox13 + {-0.375, -0.375, -0.4375, 0.375, -0.3125, -0.3125}, -- NodeBox14 + {-0.375, -0.375, 0.3125, 0.375, -0.3125, 0.4375}, -- NodeBox18 + {-0.375, -0.375, 0.0625, 0.375, -0.3125, 0.1875}, -- NodeBox19 + {-0.375, -0.375, -0.1875, 0.375, -0.3125, -0.0625}, -- NodeBox20 + {-0.4375, -0.5, -0.1875, -0.3125, -0.375, -0.0625}, -- NodeBox21 + {-0.4375, -0.5, 0.0625, -0.3125, -0.375, 0.1875}, -- NodeBox22 + {-0.4375, -0.5, 0.3125, -0.3125, -0.375, 0.4375}, -- NodeBox23 + {0.3125, -0.5, 0.3125, 0.4375, -0.375, 0.4375}, -- NodeBox24 + {0.3125, -0.5, 0.0625, 0.4375, -0.375, 0.1875}, -- NodeBox25 + {0.3125, -0.5, -0.1875, 0.4375, -0.375, -0.0625}, -- NodeBox26 + } + }, + paramtype2 = "wallmounted", + walkable = false, + climbable = true, + groups = {cracky=1, oddly_breakable_by_hand=1}, + sounds = default.node_sound_metal_defaults(), +}) + +minetest.register_node("scifi_nodes:lightbars", { + description = "orange lightbars", + tiles = { + "scifi_nodes_orange2.png", + }, + drawtype = "nodebox", + paramtype = "light", + use_texture_alpha = true, + light_source = 25, + node_box = { + type = "fixed", + fixed = { + {0.125, -0.5, 0.125, 0.375, 0.5, 0.375}, -- NodeBox1 + {-0.375, -0.5, 0.125, -0.125, 0.5, 0.375}, -- NodeBox2 + {-0.375, -0.5, -0.375, -0.125, 0.5, -0.125}, -- NodeBox3 + {0.125, -0.5, -0.375, 0.375, 0.5, -0.125}, -- NodeBox4 + } + }, + groups = {cracky=1}, + sounds = default.node_sound_glass_defaults() +}) + +minetest.register_node("scifi_nodes:liquid_pipe", { + description = "Liquid pipe", +tiles = {{ + name = "scifi_nodes_liquid.png", + animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 1.00}, + }}, + use_texture_alpha = true, + light_source = 15, + drawtype = "nodebox", + sunlight_propagates = true, + paramtype = "light", + node_box = { + type = "fixed", + fixed = { + {-0.375, -0.5, -0.375, 0.375, 0.5, 0.375}, -- NodeBox1 + } + }, + groups = {cracky=1, oddly_breakable_by_hand=1}, + sounds = default.node_sound_glass_defaults() +}) + +minetest.register_node("scifi_nodes:liquid_pipe2", { + description = "Liquid pipe 2", +tiles = { + "scifi_nodes_orange.png", + }, + use_texture_alpha = true, + light_source = 20, + drawtype = "nodebox", + sunlight_propagates = true, + paramtype = "light", + node_box = { + type = "fixed", + fixed = { + {-0.375, -0.5, -0.375, 0.375, 0.5, 0.375}, -- NodeBox1 + } + }, + groups = {cracky=1, oddly_breakable_by_hand=1}, + sounds = default.node_sound_glass_defaults() +}) + +minetest.register_node("scifi_nodes:powered_stand", { + description = "powered stand", + tiles = { + "scifi_nodes_pwrstnd_top.png", + "scifi_nodes_pwrstnd_top.png", + "scifi_nodes_pwrstnd_side.png", + "scifi_nodes_pwrstnd_side.png", + "scifi_nodes_pwrstnd_side.png", + "scifi_nodes_pwrstnd_side.png" + }, + drawtype = "nodebox", + paramtype = "light", + node_box = { + type = "fixed", + fixed = { + {-0.375, 0.25, -0.3125, 0.375, 0.4375, 0.3125}, -- NodeBox1 + {-0.3125, 0.25, -0.375, 0.3125, 0.4375, 0.375}, -- NodeBox2 + {-0.3125, 0.4375, -0.3125, 0.3125, 0.5, 0.3125}, -- NodeBox3 + {-0.5, -0.5, -0.125, 0.5, 0.125, 0.125}, -- NodeBox4 + {-0.125, -0.5, -0.5, 0.125, 0.125, 0.5}, -- NodeBox5 + {-0.4375, 0.125, -0.125, 0.4375, 0.25, 0.125}, -- NodeBox6 + {-0.125, 0.125, -0.4375, 0.125, 0.25, 0.4375}, -- NodeBox7 + {-0.3125, -0.5, -0.375, 0.3125, 0.0625, 0.3125}, -- NodeBox8 + {-0.25, 0.0625, -0.3125, 0.25, 0.125, 0.3125}, -- NodeBox9 + } + }, + groups = {cracky=1, oddly_breakable_by_hand=1}, + sounds = default.node_sound_metal_defaults(), + on_rightclick = function(pos, node, clicker, item, _) + local wield_item = clicker:get_wielded_item():get_name() + item:take_item() + minetest.add_item({x=pos.x, y=pos.y+1, z=pos.z}, wield_item) + end, +}) + +minetest.register_node("scifi_nodes:cover", { + description = "Metal cover", + tiles = { + "scifi_nodes_pwrstnd_top.png", + "scifi_nodes_pwrstnd_top.png", + "scifi_nodes_pwrstnd_top.png", + "scifi_nodes_pwrstnd_top.png", + "scifi_nodes_pwrstnd_top.png", + "scifi_nodes_pwrstnd_top.png" + }, + drawtype = "nodebox", + paramtype = "light", + node_box = { + type = "fixed", + fixed = { + {-0.375, -0.5, -0.3125, 0.375, -0.375, 0.3125}, -- NodeBox1 + {-0.3125, -0.5, -0.375, 0.3125, -0.375, 0.375}, -- NodeBox5 + {-0.3125, -0.375, -0.3125, 0.3125, -0.3125, 0.3125}, -- NodeBox6 + } + }, + groups = {cracky=1, oddly_breakable_by_hand=1}, + sounds = default.node_sound_metal_defaults(), +}) + +minetest.register_node("scifi_nodes:computer", { + description = "computer", + tiles = { + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "scifi_nodes_blackvent.png", + "scifi_nodes_black.png", + "scifi_nodes_mesh2.png", + "scifi_nodes_pc.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + {-0.4375, -0.5, -0.5, 0.0625, 0.5, 0.5}, -- NodeBox1 + } + }, + groups = {cracky=1, oddly_breakable_by_hand=1}, + sounds = default.node_sound_metal_defaults(), +}) + +minetest.register_node("scifi_nodes:keysmonitor", { + description = "Keyboard and monitor", + tiles = { + "scifi_nodes_keyboard.png", + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "scifi_nodes_monitor.png" + }, + drawtype = "nodebox", + paramtype = "light", + sunlight_propagates = true, + paramtype2 = "facedir", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.4375, 0.5, -0.4375, -0.0625}, -- NodeBox1 + {-0.125, -0.5, 0.375, 0.125, 0.0625, 0.4375}, -- NodeBox2 + {-0.25, -0.5, 0.125, 0.25, -0.4375, 0.5}, -- NodeBox3 + {-0.5, -0.3125, 0.25, 0.5, 0.5, 0.375}, -- NodeBox4 + } + }, + groups = {cracky=1, oddly_breakable_by_hand=1}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("scifi_nodes:microscope", { + description = "Microscope", + tiles = { + "scifi_nodes_white.png", + "scifi_nodes_black.png", + "scifi_nodes_white_vent.png", + "scifi_nodes_white_vent.png", + "scifi_nodes_white_vent.png", + "scifi_nodes_white_vent.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + {-0.25, -0.5, -0.3125, 0.25, -0.375, 0.3125}, -- NodeBox1 + {-0.0625, -0.5, 0.125, 0.0625, 0.3125, 0.25}, -- NodeBox2 + {-0.0625, -0.0625, -0.0625, 0.0625, 0.5, 0.0625}, -- NodeBox3 + {-0.0625, 0.0625, 0.0625, 0.0625, 0.25, 0.125}, -- NodeBox4 + {-0.125, -0.25, -0.125, 0.125, -0.1875, 0.1875}, -- NodeBox5 + } + }, + groups = {cracky=1, oddly_breakable_by_hand=1}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_node("scifi_nodes:table", { + description = "Metal table", + tiles = { + "scifi_nodes_grey.png", + "scifi_nodes_grey.png", + "scifi_nodes_grey.png", + "scifi_nodes_grey.png", + "scifi_nodes_grey.png", + "scifi_nodes_grey.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + node_box = { + type = "fixed", + fixed = { + {-0.5, 0.4375, -0.5, 0.5, 0.5, 0.5}, -- NodeBox1 + {-0.0625, -0.5, 0.125, 0.0625, 0.5, 0.3125}, -- NodeBox2 + {-0.0625, -0.5, 0.375, 0.0625, 0.5, 0.4375}, -- NodeBox3 + {-0.0625, -0.375, 0.0625, 0.0625, 0.4375, 0.125}, -- NodeBox4 + {-0.0625, -0.1875, 0, 0.0625, 0.4375, 0.0625}, -- NodeBox5 + {-0.0625, 0.0625, -0.0625, 0.0625, 0.4375, 0}, -- NodeBox6 + {-0.0625, 0.25, -0.125, 0.0625, 0.4375, -0.0625}, -- NodeBox7 + } + }, + groups = {cracky=1}, + sounds = default.node_sound_metal_defaults() +}) + +minetest.register_node("scifi_nodes:laptop_open", { + description = "laptop", + tiles = { + "scifi_nodes_lapkey.png", + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "scifi_nodes_laptop.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + sounds = default.node_sound_wood_defaults(), + node_box = { + type = "fixed", + fixed = { + {-0.4375, -0.5, -0.4375, 0.4375, -0.375, 0.3125}, -- NodeBox1 + {-0.4375, -0.375, 0.3125, 0.4375, 0.4375, 0.4375}, -- NodeBox11 + } + }, + groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1}, + on_rightclick = function(pos, node, clicker, item, _) + minetest.set_node(pos, {name="scifi_nodes:laptop_closed", param2=node.param2}) + end, +}) + +minetest.register_node("scifi_nodes:laptop_closed", { + description = "laptop", + tiles = { + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "scifi_nodes_black.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + sounds = default.node_sound_metal_defaults(), + node_box = { + type = "fixed", + fixed = { + {-0.4375, -0.5, -0.4375, 0.4375, -0.25, 0.3125}, -- NodeBox1 + } + }, + groups = {cracky=1, oddly_breakable_by_hand=1}, + on_rightclick = function(pos, node, clicker, item, _) + minetest.set_node(pos, {name="scifi_nodes:laptop_open", param2=node.param2}) + end, +}) + +minetest.register_node("scifi_nodes:pipen", { + description = "pipe(nodebox)", + tiles = { + "scifi_nodes_blacktile2.png", + "scifi_nodes_blacktile2.png", + "scifi_nodes_pipen.png", + "scifi_nodes_pipen.png", + "scifi_nodes_pipen.png", + "scifi_nodes_pipen.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + node_box = { + type = "fixed", + fixed = { + {-0.4375, -0.5, -0.4375, 0.4375, 0.5, 0.4375}, -- NodeBox1 + {-0.5, 0.4375, -0.5, 0.5, 0.5, 0.5}, -- NodeBox2 + {-0.5, 0.3125, -0.5, 0.5, 0.375, 0.5}, -- NodeBox3 + {-0.5, 0.1875, -0.5, 0.5, 0.25, 0.5}, -- NodeBox4 + {-0.5, 0.0625, -0.5, 0.5, 0.125, 0.5}, -- NodeBox5 + {-0.5, -0.0625, -0.5, 0.5, 0, 0.5}, -- NodeBox6 + {-0.5, -0.1875, -0.5, 0.5, -0.125, 0.5}, -- NodeBox7 + {-0.5, -0.3125, -0.5, 0.5, -0.25, 0.5}, -- NodeBox8 + {-0.5, -0.4375, -0.5, 0.5, -0.375, 0.5}, -- NodeBox9 + } + }, + groups = {cracky=1}, + on_place = minetest.rotate_node, + sounds = default.node_sound_metal_defaults(), +}) + +minetest.register_node("scifi_nodes:windowcorner", { + description = "strong window corner", + tiles = { + "scifi_nodes_glassstrngsd2.png", + "scifi_nodes_white.png", + "scifi_nodes_glassstrngcrnr.png", + "scifi_nodes_glassstrngcrnr2.png", + "scifi_nodes_white.png", + "scifi_nodes_glassstrngsd.png" + }, + drawtype = "nodebox", + paramtype = "light", + use_texture_alpha = true, + sunlight_propagates = true, + paramtype2 = "facedir", + node_box = { + type = "fixed", + fixed = { + {-0.3125, -0.5, -0.5, 0.3125, -0.25, 0.5}, -- NodeBox1 + {-0.3125, -0.25, 0.25, 0.3125, -0.1875, 0.5}, -- NodeBox7 + {-0.3125, -0.25, 0.3125, 0.3125, -0.125, 0.375}, -- NodeBox8 + {-0.3125, -0.3125, 0.25, 0.3125, -0.1875, 0.3125}, -- NodeBox9 + {-0.3125, -0.5, 0.375, 0.3125, 0.5, 0.5}, -- NodeBox10 + {-0.0625, -0.5, -0.5, 0.0625, 0.5, 0.5}, -- NodeBox11 + } + }, + groups = {cracky=1}, + on_place = minetest.rotate_node, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_node("scifi_nodes:windowstraight", { + description = "strong window", + tiles = { + "scifi_nodes_glassstrngsd2.png", + "scifi_nodes_white.png", + "scifi_nodes_glassstrng.png", + "scifi_nodes_glassstrng.png", + "scifi_nodes_glassstrngsd.png", + "scifi_nodes_glassstrngsd.png" + }, + drawtype = "nodebox", + paramtype = "light", + use_texture_alpha = true, + sunlight_propagates = true, + paramtype2 = "facedir", + node_box = { + type = "fixed", + fixed = { + {-0.3125, -0.5, -0.5, 0.3125, -0.25, 0.5}, -- NodeBox10 + {-0.0625, -0.5, -0.5, 0.0625, 0.5, 0.5}, -- NodeBox11 + } + }, + groups = {cracky=1}, + on_place = minetest.rotate_node, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_node("scifi_nodes:windowcorner2", { + description = "strong window corner(black)", + tiles = { + "scifi_nodes_glassstrngsd4.png", + "scifi_nodes_black.png", + "scifi_nodes_glassstrngcrnr3.png", + "scifi_nodes_glassstrngcrnr4.png", + "scifi_nodes_black.png", + "scifi_nodes_glassstrngsd3.png" + }, + drawtype = "nodebox", + paramtype = "light", + use_texture_alpha = true, + sunlight_propagates = true, + paramtype2 = "facedir", + node_box = { + type = "fixed", + fixed = { + {-0.3125, -0.5, -0.5, 0.3125, -0.25, 0.5}, -- NodeBox1 + {-0.3125, -0.25, 0.25, 0.3125, -0.1875, 0.5}, -- NodeBox7 + {-0.3125, -0.25, 0.3125, 0.3125, -0.125, 0.375}, -- NodeBox8 + {-0.3125, -0.3125, 0.25, 0.3125, -0.1875, 0.3125}, -- NodeBox9 + {-0.3125, -0.5, 0.375, 0.3125, 0.5, 0.5}, -- NodeBox10 + {-0.0625, -0.5, -0.5, 0.0625, 0.5, 0.5}, -- NodeBox11 + } + }, + groups = {cracky=1}, + on_place = minetest.rotate_node, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_node("scifi_nodes:windowstraight2", { + description = "strong window(black)", + tiles = { + "scifi_nodes_glassstrngsd4.png", + "scifi_nodes_black.png", + "scifi_nodes_glassstrng2.png", + "scifi_nodes_glassstrng2.png", + "scifi_nodes_glassstrngsd3.png", + "scifi_nodes_glassstrngsd3.png" + }, + drawtype = "nodebox", + paramtype = "light", + use_texture_alpha = true, + sunlight_propagates = true, + paramtype2 = "facedir", + node_box = { + type = "fixed", + fixed = { + {-0.3125, -0.5, -0.5, 0.3125, -0.25, 0.5}, -- NodeBox10 + {-0.0625, -0.5, -0.5, 0.0625, 0.5, 0.5}, -- NodeBox11 + } + }, + groups = {cracky=1}, + on_place = minetest.rotate_node, + sounds = default.node_sound_glass_defaults(), +}) + + + +minetest.register_node("scifi_nodes:capsule", { + description = "sample capsule", + tiles = { + "scifi_nodes_capsule.png", + "scifi_nodes_capsule.png", + "scifi_nodes_box_top.png", + "scifi_nodes_box_top.png", + "scifi_nodes_capsule.png", + "scifi_nodes_capsule.png" + }, + use_texture_alpha = true, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + {0.3125, -0.5, -0.25, 0.5, 0, 0.25}, -- NodeBox1 + {-0.5, -0.5, -0.25, -0.3125, 0, 0.25}, -- NodeBox2 + {-0.3125, -0.4375, -0.1875, 0.3125, -0.0625, 0.1875}, -- NodeBox3 + } + }, + groups = {cracky=1, oddly_breakable_by_hand=1}, + sounds = default.node_sound_glass_defaults(), + on_rightclick = function(pos, node, clicker, item, _) + minetest.set_node(pos, {name="scifi_nodes:capsule2", param2=node.param2}) + end, +}) + +minetest.register_node("scifi_nodes:capsule3", { + description = "sample capsule", + tiles = { + "scifi_nodes_capsule3.png", + "scifi_nodes_capsule3.png", + "scifi_nodes_box_top.png", + "scifi_nodes_box_top.png", + "scifi_nodes_capsule3.png", + "scifi_nodes_capsule3.png" + }, + use_texture_alpha = true, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + {0.3125, -0.5, -0.25, 0.5, 0, 0.25}, -- NodeBox1 + {-0.5, -0.5, -0.25, -0.3125, 0, 0.25}, -- NodeBox2 + {-0.3125, -0.4375, -0.1875, 0.3125, -0.0625, 0.1875}, -- NodeBox3 + } + }, + groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1}, + sounds = default.node_sound_glass_defaults(), + on_rightclick = function(pos, node, clicker, item, _) + minetest.set_node(pos, {name="scifi_nodes:capsule", param2=node.param2}) + end, +}) + +minetest.register_node("scifi_nodes:capsule2", { + description = "sample capsule", + tiles = { + "scifi_nodes_capsule2.png", + "scifi_nodes_capsule2.png", + "scifi_nodes_box_top.png", + "scifi_nodes_box_top.png", + "scifi_nodes_capsule2.png", + "scifi_nodes_capsule2.png" + }, + use_texture_alpha = true, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + {0.3125, -0.5, -0.25, 0.5, 0, 0.25}, -- NodeBox1 + {-0.5, -0.5, -0.25, -0.3125, 0, 0.25}, -- NodeBox2 + {-0.3125, -0.4375, -0.1875, 0.3125, -0.0625, 0.1875}, -- NodeBox3 + } + }, + groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1}, + sounds = default.node_sound_glass_defaults(), + on_rightclick = function(pos, node, clicker, item, _) + minetest.set_node(pos, {name="scifi_nodes:capsule3", param2=node.param2}) + end, +}) + +minetest.register_node("scifi_nodes:itemholder", { + description = "item holder", + tiles = { + "scifi_nodes_box_top.png", + "scifi_nodes_box_top.png", + "scifi_nodes_box_top.png", + "scifi_nodes_box_top.png", + "scifi_nodes_box_top.png", + "scifi_nodes_box_top.png" + }, + drawtype = "nodebox", + paramtype = "light", + sunlight_propagates = true, + sounds = default.node_sound_metal_defaults(), + node_box = { + type = "fixed", + fixed = { + {-0.3125, -0.5, -0.3125, 0.3125, -0.25, 0.3125}, -- NodeBox1 + {-0.0625, -0.5, 0.1875, 0.0625, -0.0625, 0.25}, -- NodeBox2 + {-0.0625, -0.5, -0.25, 0.0625, -0.0625, -0.1875}, -- NodeBox3 + {0.1875, -0.5, -0.0625, 0.25, -0.0625, 0.0625}, -- NodeBox4 + {-0.25, -0.5, -0.0625, -0.1875, -0.0625, 0.0625}, -- NodeBox5 + } + }, + groups = {cracky=1}, + on_rotate = screwdriver.disallow, + after_place_node = function(pos, placer, itemstack) + local meta = minetest.get_meta(pos) + meta:set_string("owner",placer:get_player_name()) + meta:set_string("infotext", "Itemholder (owned by " .. + meta:get_string("owner") .. ")") + end, + on_rightclick = function(pos, node, clicker, item, _) + local name = clicker and clicker:get_player_name() + local meta = minetest.get_meta(pos) + if name == meta:get_string("owner") or + minetest.check_player_privs(name, "protection_bypass") then + local wield_item = clicker:get_wielded_item():get_name() + item:take_item() + minetest.add_item(pos, wield_item) + end + end, + can_dig = function(pos,player) + if not player then return end + local name = player and player:get_player_name() + local meta = minetest.get_meta(pos) + return name == meta:get_string("owner") or + minetest.check_player_privs(name, "protection_bypass") + end, + on_destruct = function(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + if meta:get_string("item") ~= "" then + drop_item(pos, node) + end + end, +}) + +minetest.register_node("scifi_nodes:glassscreen", { + description = "glass screen", + tiles = { + "scifi_nodes_glscrn.png", + "scifi_nodes_glscrn.png", + "scifi_nodes_glscrn.png", + "scifi_nodes_glscrn.png", + "scifi_nodes_glscrn.png", + "scifi_nodes_glscrn.png" + }, + use_texture_alpha = true, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + light_source = 15, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + {-0.4375, -0.5, -0.125, 0.4375, -0.1875, 0.0625}, -- NodeBox1 + {-0.375, -0.5, -0.0625, 0.375, 0.5, 0}, -- NodeBox10 + } + }, + groups = {cracky=1, oddly_breakable_by_hand=1}, + sounds = default.node_sound_glass_defaults(), +}) + + +minetest.register_node("scifi_nodes:widescreen", { + description = "widescreen", + tiles = { + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "scifi_nodes_widescreen.png" + }, + drawtype = "nodebox", + paramtype = "light", + light_source = 5, + paramtype2 = "facedir", + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + {-0.375, -0.3125, 0.4375, 0.375, 0.3125, 0.5}, -- NodeBox1 + {-0.5, -0.375, 0.375, -0.375, 0.375, 0.5}, -- NodeBox2 + {0.375, -0.375, 0.375, 0.5, 0.375, 0.5}, -- NodeBox3 + {-0.3125, 0.25, 0.375, 0.3125, 0.375, 0.5}, -- NodeBox4 + {-0.3125, -0.375, 0.375, 0.25, -0.25, 0.5}, -- NodeBox5 + {-0.5, -0.3125, 0.375, 0.5, -0.25, 0.5}, -- NodeBox6 + {-0.5, 0.25, 0.375, 0.5, 0.3125, 0.5}, -- NodeBox7 + } + }, + groups = {cracky=1, oddly_breakable_by_hand=1}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_node("scifi_nodes:tallscreen", { + description = "tallscreen", + tiles = { + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "scifi_nodes_black.png", + "scifi_nodes_tallscreen.png" + }, + drawtype = "nodebox", + light_source = 5, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + {-0.3125, -0.375, 0.4375, 0.3125, 0.375, 0.5}, -- NodeBox1 + {-0.375, 0.375, 0.375, 0.375, 0.5, 0.5}, -- NodeBox2 + {-0.375, -0.5, 0.375, 0.375, -0.375, 0.5}, -- NodeBox3 + {0.25, -0.3125, 0.375, 0.375, 0.3125, 0.5}, -- NodeBox4 + {-0.375, -0.25, 0.375, -0.25, 0.3125, 0.5}, -- NodeBox5 + {-0.3125, -0.5, 0.375, -0.25, 0.5, 0.5}, -- NodeBox6 + {0.25, -0.5, 0.375, 0.3125, 0.5, 0.5}, -- NodeBox7 + } + }, + groups = {cracky=1, oddly_breakable_by_hand=1}, + sounds = default.node_sound_glass_defaults(), +}) diff --git a/mods/scifi_nodes/panes.lua b/mods/scifi_nodes/panes.lua new file mode 100644 index 00000000..e61d5fd6 --- /dev/null +++ b/mods/scifi_nodes/panes.lua @@ -0,0 +1,22 @@ +xpanes.register_pane("doompane", { + description = "Doom pane", + tiles = {"scifi_nodes_doompane.png"}, + drawtype = "airlike", + paramtype = "light", + is_ground_content = false, + sunlight_propagates = true, + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + air_equivalent = true, + textures = {"scifi_nodes_doompane.png","scifi_nodes_doompane.png","default_wood.png"}, + inventory_image = "scifi_nodes_doompane.png", + wield_image = "scifi_nodes_doompane.png", + groups = {cracky=1, pane=1}, + recipe = { + {"default:iron_lump", "default:iron_lump", ""}, + {"default:iron_lump", "", "default:iron_lump"}, + {"", "default:iron_lump", "default:iron_lump"} + } +}) diff --git a/mods/scifi_nodes/screenshot.png b/mods/scifi_nodes/screenshot.png new file mode 100644 index 00000000..7ca27b3f Binary files /dev/null and b/mods/scifi_nodes/screenshot.png differ diff --git a/mods/scifi_nodes/sounds/slidingdoor.ogg b/mods/scifi_nodes/sounds/slidingdoor.ogg new file mode 100644 index 00000000..9693f900 Binary files /dev/null and b/mods/scifi_nodes/sounds/slidingdoor.ogg differ diff --git a/mods/scifi_nodes/textures/cityscape_wood_rot.png b/mods/scifi_nodes/textures/cityscape_wood_rot.png new file mode 100644 index 00000000..27c46d81 Binary files /dev/null and b/mods/scifi_nodes/textures/cityscape_wood_rot.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_alnslp.png b/mods/scifi_nodes/textures/scifi_nodes_alnslp.png new file mode 100644 index 00000000..b525a02a Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_alnslp.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_alnslp_top.png b/mods/scifi_nodes/textures/scifi_nodes_alnslp_top.png new file mode 100644 index 00000000..ec357d35 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_alnslp_top.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_alnslp_top2.png b/mods/scifi_nodes/textures/scifi_nodes_alnslp_top2.png new file mode 100644 index 00000000..490ff36b Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_alnslp_top2.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_black.png b/mods/scifi_nodes/textures/scifi_nodes_black.png new file mode 100644 index 00000000..7684b818 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_black.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_black_detail.png b/mods/scifi_nodes/textures/scifi_nodes_black_detail.png new file mode 100644 index 00000000..a50f7297 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_black_detail.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_black_light.png b/mods/scifi_nodes/textures/scifi_nodes_black_light.png new file mode 100644 index 00000000..d2cbebcb Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_black_light.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_black_light2.png b/mods/scifi_nodes/textures/scifi_nodes_black_light2.png new file mode 100644 index 00000000..e41a69c2 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_black_light2.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_black_lights.png b/mods/scifi_nodes/textures/scifi_nodes_black_lights.png new file mode 100644 index 00000000..c53bf70f Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_black_lights.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_black_mesh.png b/mods/scifi_nodes/textures/scifi_nodes_black_mesh.png new file mode 100644 index 00000000..11f23457 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_black_mesh.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_black_screen.png b/mods/scifi_nodes/textures/scifi_nodes_black_screen.png new file mode 100644 index 00000000..20de6c28 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_black_screen.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_blackdmg.png b/mods/scifi_nodes/textures/scifi_nodes_blackdmg.png new file mode 100644 index 00000000..fb024cc5 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_blackdmg.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_blackdmgstripe.png b/mods/scifi_nodes/textures/scifi_nodes_blackdmgstripe.png new file mode 100644 index 00000000..b679b511 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_blackdmgstripe.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_blackoct.png b/mods/scifi_nodes/textures/scifi_nodes_blackoct.png new file mode 100644 index 00000000..bda3a3f3 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_blackoct.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_blackpipe.png b/mods/scifi_nodes/textures/scifi_nodes_blackpipe.png new file mode 100644 index 00000000..ae1d1265 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_blackpipe.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_blackplate.png b/mods/scifi_nodes/textures/scifi_nodes_blackplate.png new file mode 100644 index 00000000..339d08a8 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_blackplate.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_blacktile.png b/mods/scifi_nodes/textures/scifi_nodes_blacktile.png new file mode 100644 index 00000000..2655cd1c Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_blacktile.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_blacktile2.png b/mods/scifi_nodes/textures/scifi_nodes_blacktile2.png new file mode 100644 index 00000000..1935dfaa Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_blacktile2.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_blackvent.png b/mods/scifi_nodes/textures/scifi_nodes_blackvent.png new file mode 100644 index 00000000..99c0d7a1 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_blackvent.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_blackvnt.png b/mods/scifi_nodes/textures/scifi_nodes_blackvnt.png new file mode 100644 index 00000000..a981da0e Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_blackvnt.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_blue.png b/mods/scifi_nodes/textures/scifi_nodes_blue.png new file mode 100644 index 00000000..a54668c4 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_blue.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_blue_metal_light.png b/mods/scifi_nodes/textures/scifi_nodes_blue_metal_light.png new file mode 100644 index 00000000..ebacabea Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_blue_metal_light.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_blue_metal_stripes.png b/mods/scifi_nodes/textures/scifi_nodes_blue_metal_stripes.png new file mode 100644 index 00000000..452e890e Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_blue_metal_stripes.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_blue_metal_stripes2.png b/mods/scifi_nodes/textures/scifi_nodes_blue_metal_stripes2.png new file mode 100644 index 00000000..881bcaa9 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_blue_metal_stripes2.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_blue_square.png b/mods/scifi_nodes/textures/scifi_nodes_blue_square.png new file mode 100644 index 00000000..691968bf Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_blue_square.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_bluebars.png b/mods/scifi_nodes/textures/scifi_nodes_bluebars.png new file mode 100644 index 00000000..604552ea Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_bluebars.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_bluefloor.png b/mods/scifi_nodes/textures/scifi_nodes_bluefloor.png new file mode 100644 index 00000000..d0c015bc Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_bluefloor.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_bluegrid.png b/mods/scifi_nodes/textures/scifi_nodes_bluegrid.png new file mode 100644 index 00000000..c1dd9dcc Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_bluegrid.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_bluemetal.png b/mods/scifi_nodes/textures/scifi_nodes_bluemetal.png new file mode 100644 index 00000000..608b6fee Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_bluemetal.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_bluetile.png b/mods/scifi_nodes/textures/scifi_nodes_bluetile.png new file mode 100644 index 00000000..81b4da6f Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_bluetile.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_bluwllight.png b/mods/scifi_nodes/textures/scifi_nodes_bluwllight.png new file mode 100644 index 00000000..0813d317 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_bluwllight.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_box.png b/mods/scifi_nodes/textures/scifi_nodes_box.png new file mode 100644 index 00000000..e9a7ad48 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_box.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_box_top.png b/mods/scifi_nodes/textures/scifi_nodes_box_top.png new file mode 100644 index 00000000..35bb98f0 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_box_top.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_builder.png b/mods/scifi_nodes/textures/scifi_nodes_builder.png new file mode 100644 index 00000000..02826905 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_builder.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_builder_front.png b/mods/scifi_nodes/textures/scifi_nodes_builder_front.png new file mode 100644 index 00000000..d28d09e1 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_builder_front.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_builder_side.png b/mods/scifi_nodes/textures/scifi_nodes_builder_side.png new file mode 100644 index 00000000..c26d047d Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_builder_side.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_capsule.png b/mods/scifi_nodes/textures/scifi_nodes_capsule.png new file mode 100644 index 00000000..8b62970d Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_capsule.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_capsule2.png b/mods/scifi_nodes/textures/scifi_nodes_capsule2.png new file mode 100644 index 00000000..2878869d Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_capsule2.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_capsule3.png b/mods/scifi_nodes/textures/scifi_nodes_capsule3.png new file mode 100644 index 00000000..0813d317 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_capsule3.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_crate.png b/mods/scifi_nodes/textures/scifi_nodes_crate.png new file mode 100644 index 00000000..7577854b Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_crate.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_crateside.png b/mods/scifi_nodes/textures/scifi_nodes_crateside.png new file mode 100644 index 00000000..b347f359 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_crateside.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_dent.png b/mods/scifi_nodes/textures/scifi_nodes_dent.png new file mode 100644 index 00000000..da842cbb Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_dent.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_disc.png b/mods/scifi_nodes/textures/scifi_nodes_disc.png new file mode 100644 index 00000000..ba4b28e1 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_disc.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_discs.png b/mods/scifi_nodes/textures/scifi_nodes_discs.png new file mode 100644 index 00000000..3f73153c Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_discs.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_doomengine.png b/mods/scifi_nodes/textures/scifi_nodes_doomengine.png new file mode 100644 index 00000000..bf4ea49a Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_doomengine.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_doomlight.png b/mods/scifi_nodes/textures/scifi_nodes_doomlight.png new file mode 100644 index 00000000..3c5a6d96 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_doomlight.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_doompane.png b/mods/scifi_nodes/textures/scifi_nodes_doompane.png new file mode 100644 index 00000000..2237a08e Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_doompane.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_doomwall1.png b/mods/scifi_nodes/textures/scifi_nodes_doomwall1.png new file mode 100644 index 00000000..1440a172 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_doomwall1.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_doomwall2.png b/mods/scifi_nodes/textures/scifi_nodes_doomwall2.png new file mode 100644 index 00000000..be650a3f Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_doomwall2.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_doomwall3.png b/mods/scifi_nodes/textures/scifi_nodes_doomwall3.png new file mode 100644 index 00000000..1319c0b7 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_doomwall3.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_doomwall4.png b/mods/scifi_nodes/textures/scifi_nodes_doomwall4.png new file mode 100644 index 00000000..1bc6a0c2 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_doomwall4.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_doomwall41.png b/mods/scifi_nodes/textures/scifi_nodes_doomwall41.png new file mode 100644 index 00000000..f345ce52 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_doomwall41.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_doomwall42.png b/mods/scifi_nodes/textures/scifi_nodes_doomwall42.png new file mode 100644 index 00000000..973ed544 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_doomwall42.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_doomwall43.png b/mods/scifi_nodes/textures/scifi_nodes_doomwall43.png new file mode 100644 index 00000000..20b8e1b9 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_doomwall43.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_doomwall431.png b/mods/scifi_nodes/textures/scifi_nodes_doomwall431.png new file mode 100644 index 00000000..1903c53c Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_doomwall431.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_doomwall44.png b/mods/scifi_nodes/textures/scifi_nodes_doomwall44.png new file mode 100644 index 00000000..755849d7 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_doomwall44.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door1a_bottom.png b/mods/scifi_nodes/textures/scifi_nodes_door1a_bottom.png new file mode 100644 index 00000000..9ce60e73 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door1a_bottom.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door1a_bottom0.png b/mods/scifi_nodes/textures/scifi_nodes_door1a_bottom0.png new file mode 100644 index 00000000..5e239b2a Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door1a_bottom0.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door1a_edge.png b/mods/scifi_nodes/textures/scifi_nodes_door1a_edge.png new file mode 100644 index 00000000..0b27b527 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door1a_edge.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door1a_inv.png b/mods/scifi_nodes/textures/scifi_nodes_door1a_inv.png new file mode 100644 index 00000000..6fd1a2b3 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door1a_inv.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door1a_rbottom.png b/mods/scifi_nodes/textures/scifi_nodes_door1a_rbottom.png new file mode 100644 index 00000000..50771068 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door1a_rbottom.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door1a_rbottom0.png b/mods/scifi_nodes/textures/scifi_nodes_door1a_rbottom0.png new file mode 100644 index 00000000..8804831f Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door1a_rbottom0.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door1a_rtop.png b/mods/scifi_nodes/textures/scifi_nodes_door1a_rtop.png new file mode 100644 index 00000000..45a35591 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door1a_rtop.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door1a_rtopo.png b/mods/scifi_nodes/textures/scifi_nodes_door1a_rtopo.png new file mode 100644 index 00000000..0bab6ed9 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door1a_rtopo.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door1a_top.png b/mods/scifi_nodes/textures/scifi_nodes_door1a_top.png new file mode 100644 index 00000000..2c43cf6d Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door1a_top.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door1a_topo.png b/mods/scifi_nodes/textures/scifi_nodes_door1a_topo.png new file mode 100644 index 00000000..ea3ab597 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door1a_topo.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door2a_bottom.png b/mods/scifi_nodes/textures/scifi_nodes_door2a_bottom.png new file mode 100644 index 00000000..c20612f1 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door2a_bottom.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door2a_bottom0.png b/mods/scifi_nodes/textures/scifi_nodes_door2a_bottom0.png new file mode 100644 index 00000000..e96791c9 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door2a_bottom0.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door2a_edge.png b/mods/scifi_nodes/textures/scifi_nodes_door2a_edge.png new file mode 100644 index 00000000..887193b3 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door2a_edge.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door2a_inv.png b/mods/scifi_nodes/textures/scifi_nodes_door2a_inv.png new file mode 100644 index 00000000..611c0cc2 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door2a_inv.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door2a_rbottom.png b/mods/scifi_nodes/textures/scifi_nodes_door2a_rbottom.png new file mode 100644 index 00000000..59d84b2c Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door2a_rbottom.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door2a_rbottom0.png b/mods/scifi_nodes/textures/scifi_nodes_door2a_rbottom0.png new file mode 100644 index 00000000..78ed88c7 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door2a_rbottom0.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door2a_rtop.png b/mods/scifi_nodes/textures/scifi_nodes_door2a_rtop.png new file mode 100644 index 00000000..75c7531d Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door2a_rtop.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door2a_rtopo.png b/mods/scifi_nodes/textures/scifi_nodes_door2a_rtopo.png new file mode 100644 index 00000000..5ddbde4e Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door2a_rtopo.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door2a_top.png b/mods/scifi_nodes/textures/scifi_nodes_door2a_top.png new file mode 100644 index 00000000..f7cb1900 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door2a_top.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door2a_topo.png b/mods/scifi_nodes/textures/scifi_nodes_door2a_topo.png new file mode 100644 index 00000000..8a8cf813 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door2a_topo.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door3a_bottom.png b/mods/scifi_nodes/textures/scifi_nodes_door3a_bottom.png new file mode 100644 index 00000000..34607f3b Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door3a_bottom.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door3a_bottom0.png b/mods/scifi_nodes/textures/scifi_nodes_door3a_bottom0.png new file mode 100644 index 00000000..b618d99f Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door3a_bottom0.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door3a_edge.png b/mods/scifi_nodes/textures/scifi_nodes_door3a_edge.png new file mode 100644 index 00000000..2ab26c35 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door3a_edge.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door3a_inv.png b/mods/scifi_nodes/textures/scifi_nodes_door3a_inv.png new file mode 100644 index 00000000..cfb9bcda Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door3a_inv.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door3a_rbottom.png b/mods/scifi_nodes/textures/scifi_nodes_door3a_rbottom.png new file mode 100644 index 00000000..ca95c38d Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door3a_rbottom.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door3a_rbottom0.png b/mods/scifi_nodes/textures/scifi_nodes_door3a_rbottom0.png new file mode 100644 index 00000000..9160fcf2 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door3a_rbottom0.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door3a_rtop.png b/mods/scifi_nodes/textures/scifi_nodes_door3a_rtop.png new file mode 100644 index 00000000..803a84db Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door3a_rtop.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door3a_rtopo.png b/mods/scifi_nodes/textures/scifi_nodes_door3a_rtopo.png new file mode 100644 index 00000000..3cf7f780 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door3a_rtopo.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door3a_top.png b/mods/scifi_nodes/textures/scifi_nodes_door3a_top.png new file mode 100644 index 00000000..85c04255 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door3a_top.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door3a_topo.png b/mods/scifi_nodes/textures/scifi_nodes_door3a_topo.png new file mode 100644 index 00000000..8aa5fe1d Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door3a_topo.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door4a_bottom.png b/mods/scifi_nodes/textures/scifi_nodes_door4a_bottom.png new file mode 100644 index 00000000..f434b1b9 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door4a_bottom.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door4a_bottom0.png b/mods/scifi_nodes/textures/scifi_nodes_door4a_bottom0.png new file mode 100644 index 00000000..1d5e6612 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door4a_bottom0.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door4a_edge.png b/mods/scifi_nodes/textures/scifi_nodes_door4a_edge.png new file mode 100644 index 00000000..d93cd6dd Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door4a_edge.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door4a_inv.png b/mods/scifi_nodes/textures/scifi_nodes_door4a_inv.png new file mode 100644 index 00000000..e8ae2261 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door4a_inv.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door4a_rbottom.png b/mods/scifi_nodes/textures/scifi_nodes_door4a_rbottom.png new file mode 100644 index 00000000..afc80f56 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door4a_rbottom.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door4a_rbottom0.png b/mods/scifi_nodes/textures/scifi_nodes_door4a_rbottom0.png new file mode 100644 index 00000000..2689165e Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door4a_rbottom0.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door4a_rtop.png b/mods/scifi_nodes/textures/scifi_nodes_door4a_rtop.png new file mode 100644 index 00000000..14ef9465 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door4a_rtop.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door4a_rtopo.png b/mods/scifi_nodes/textures/scifi_nodes_door4a_rtopo.png new file mode 100644 index 00000000..e8eeb141 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door4a_rtopo.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door4a_top.png b/mods/scifi_nodes/textures/scifi_nodes_door4a_top.png new file mode 100644 index 00000000..baa37dc2 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door4a_top.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_door4a_topo.png b/mods/scifi_nodes/textures/scifi_nodes_door4a_topo.png new file mode 100644 index 00000000..ddfd23a2 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_door4a_topo.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_egg_side.png b/mods/scifi_nodes/textures/scifi_nodes_egg_side.png new file mode 100644 index 00000000..f179d64b Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_egg_side.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_egg_top.png b/mods/scifi_nodes/textures/scifi_nodes_egg_top.png new file mode 100644 index 00000000..d1f0612e Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_egg_top.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_engine.png b/mods/scifi_nodes/textures/scifi_nodes_engine.png new file mode 100644 index 00000000..cb971c65 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_engine.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_eyetree.png b/mods/scifi_nodes/textures/scifi_nodes_eyetree.png new file mode 100644 index 00000000..64f1c4b0 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_eyetree.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_fan.png b/mods/scifi_nodes/textures/scifi_nodes_fan.png new file mode 100644 index 00000000..7afc84e0 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_fan.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_flower1.png b/mods/scifi_nodes/textures/scifi_nodes_flower1.png new file mode 100644 index 00000000..9fd7de42 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_flower1.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_flower2.png b/mods/scifi_nodes/textures/scifi_nodes_flower2.png new file mode 100644 index 00000000..e12516ab Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_flower2.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_flower3.png b/mods/scifi_nodes/textures/scifi_nodes_flower3.png new file mode 100644 index 00000000..92d74bcc Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_flower3.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_flower4.png b/mods/scifi_nodes/textures/scifi_nodes_flower4.png new file mode 100644 index 00000000..84070cd1 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_flower4.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_gblock.png b/mods/scifi_nodes/textures/scifi_nodes_gblock.png new file mode 100644 index 00000000..a2b082ee Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_gblock.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_gblock2.png b/mods/scifi_nodes/textures/scifi_nodes_gblock2.png new file mode 100644 index 00000000..0b12bc1a Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_gblock2.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_gblock2_front1.png b/mods/scifi_nodes/textures/scifi_nodes_gblock2_front1.png new file mode 100644 index 00000000..6c0210ec Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_gblock2_front1.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_gblock2_fx.png b/mods/scifi_nodes/textures/scifi_nodes_gblock2_fx.png new file mode 100644 index 00000000..d4580a21 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_gblock2_fx.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_gblock2_screen.png b/mods/scifi_nodes/textures/scifi_nodes_gblock2_screen.png new file mode 100644 index 00000000..486ff62e Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_gblock2_screen.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_gblock2_top.png b/mods/scifi_nodes/textures/scifi_nodes_gblock2_top.png new file mode 100644 index 00000000..77e48a2c Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_gblock2_top.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_glass.png b/mods/scifi_nodes/textures/scifi_nodes_glass.png new file mode 100644 index 00000000..23ff6ff1 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_glass.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_glass2.png b/mods/scifi_nodes/textures/scifi_nodes_glass2.png new file mode 100644 index 00000000..0aa93135 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_glass2.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_glassstrng.png b/mods/scifi_nodes/textures/scifi_nodes_glassstrng.png new file mode 100644 index 00000000..a314c6de Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_glassstrng.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_glassstrng2.png b/mods/scifi_nodes/textures/scifi_nodes_glassstrng2.png new file mode 100644 index 00000000..b06954cc Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_glassstrng2.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_glassstrngcrnr.png b/mods/scifi_nodes/textures/scifi_nodes_glassstrngcrnr.png new file mode 100644 index 00000000..abf59873 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_glassstrngcrnr.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_glassstrngcrnr2.png b/mods/scifi_nodes/textures/scifi_nodes_glassstrngcrnr2.png new file mode 100644 index 00000000..6bb9f940 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_glassstrngcrnr2.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_glassstrngcrnr3.png b/mods/scifi_nodes/textures/scifi_nodes_glassstrngcrnr3.png new file mode 100644 index 00000000..13ede1d0 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_glassstrngcrnr3.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_glassstrngcrnr4.png b/mods/scifi_nodes/textures/scifi_nodes_glassstrngcrnr4.png new file mode 100644 index 00000000..e9636efd Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_glassstrngcrnr4.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_glassstrngsd.png b/mods/scifi_nodes/textures/scifi_nodes_glassstrngsd.png new file mode 100644 index 00000000..bc133a9e Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_glassstrngsd.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_glassstrngsd2.png b/mods/scifi_nodes/textures/scifi_nodes_glassstrngsd2.png new file mode 100644 index 00000000..88e41235 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_glassstrngsd2.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_glassstrngsd3.png b/mods/scifi_nodes/textures/scifi_nodes_glassstrngsd3.png new file mode 100644 index 00000000..182ea09c Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_glassstrngsd3.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_glassstrngsd4.png b/mods/scifi_nodes/textures/scifi_nodes_glassstrngsd4.png new file mode 100644 index 00000000..8586b09c Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_glassstrngsd4.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_gloshroom.png b/mods/scifi_nodes/textures/scifi_nodes_gloshroom.png new file mode 100644 index 00000000..b860351e Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_gloshroom.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_gloshroom_under.png b/mods/scifi_nodes/textures/scifi_nodes_gloshroom_under.png new file mode 100644 index 00000000..88d64e73 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_gloshroom_under.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_glscrn.png b/mods/scifi_nodes/textures/scifi_nodes_glscrn.png new file mode 100644 index 00000000..c232e061 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_glscrn.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_grass.png b/mods/scifi_nodes/textures/scifi_nodes_grass.png new file mode 100644 index 00000000..7fabb476 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_grass.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_green.png b/mods/scifi_nodes/textures/scifi_nodes_green.png new file mode 100644 index 00000000..53ec149f Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_green.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_green2.png b/mods/scifi_nodes/textures/scifi_nodes_green2.png new file mode 100644 index 00000000..6e1a02fb Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_green2.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_green_square.png b/mods/scifi_nodes/textures/scifi_nodes_green_square.png new file mode 100644 index 00000000..b72ced2d Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_green_square.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_greenbar.png b/mods/scifi_nodes/textures/scifi_nodes_greenbar.png new file mode 100644 index 00000000..29eb88af Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_greenbar.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_greenlight.png b/mods/scifi_nodes/textures/scifi_nodes_greenlight.png new file mode 100644 index 00000000..fde3b095 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_greenlight.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_greenlights.png b/mods/scifi_nodes/textures/scifi_nodes_greenlights.png new file mode 100644 index 00000000..1095431e Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_greenlights.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_greenlights2.png b/mods/scifi_nodes/textures/scifi_nodes_greenlights2.png new file mode 100644 index 00000000..3759edd6 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_greenlights2.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_greenmetal.png b/mods/scifi_nodes/textures/scifi_nodes_greenmetal.png new file mode 100644 index 00000000..bb6c7090 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_greenmetal.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_greenmetal2.png b/mods/scifi_nodes/textures/scifi_nodes_greenmetal2.png new file mode 100644 index 00000000..4045cb95 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_greenmetal2.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_greenpipe2_top.png b/mods/scifi_nodes/textures/scifi_nodes_greenpipe2_top.png new file mode 100644 index 00000000..1db152a1 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_greenpipe2_top.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_greenpipe_front.png b/mods/scifi_nodes/textures/scifi_nodes_greenpipe_front.png new file mode 100644 index 00000000..05297632 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_greenpipe_front.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_greenpipe_top.png b/mods/scifi_nodes/textures/scifi_nodes_greenpipe_top.png new file mode 100644 index 00000000..037db407 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_greenpipe_top.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_greentile.png b/mods/scifi_nodes/textures/scifi_nodes_greentile.png new file mode 100644 index 00000000..629b2089 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_greentile.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_greentubes.png b/mods/scifi_nodes/textures/scifi_nodes_greentubes.png new file mode 100644 index 00000000..5e58d308 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_greentubes.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_grey.png b/mods/scifi_nodes/textures/scifi_nodes_grey.png new file mode 100644 index 00000000..d9d2cb09 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_grey.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_grey_square.png b/mods/scifi_nodes/textures/scifi_nodes_grey_square.png new file mode 100644 index 00000000..5b120eae Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_grey_square.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_greybars.png b/mods/scifi_nodes/textures/scifi_nodes_greybars.png new file mode 100644 index 00000000..0b78bba5 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_greybars.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_greybolts.png b/mods/scifi_nodes/textures/scifi_nodes_greybolts.png new file mode 100644 index 00000000..3176b88b Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_greybolts.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_greydots.png b/mods/scifi_nodes/textures/scifi_nodes_greydots.png new file mode 100644 index 00000000..4a6ec647 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_greydots.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_greygreenbar.png b/mods/scifi_nodes/textures/scifi_nodes_greygreenbar.png new file mode 100644 index 00000000..e3d34f1f Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_greygreenbar.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_greytile.png b/mods/scifi_nodes/textures/scifi_nodes_greytile.png new file mode 100644 index 00000000..d384b87e Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_greytile.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_holes.png b/mods/scifi_nodes/textures/scifi_nodes_holes.png new file mode 100644 index 00000000..3bea544b Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_holes.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_junk.png b/mods/scifi_nodes/textures/scifi_nodes_junk.png new file mode 100644 index 00000000..49d91973 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_junk.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_keyboard.png b/mods/scifi_nodes/textures/scifi_nodes_keyboard.png new file mode 100644 index 00000000..f9d9b45d Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_keyboard.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_ladder.png b/mods/scifi_nodes/textures/scifi_nodes_ladder.png new file mode 100644 index 00000000..557f02db Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_ladder.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_lapkey.png b/mods/scifi_nodes/textures/scifi_nodes_lapkey.png new file mode 100644 index 00000000..e8b58a03 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_lapkey.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_laptop.png b/mods/scifi_nodes/textures/scifi_nodes_laptop.png new file mode 100644 index 00000000..74524535 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_laptop.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_light.png b/mods/scifi_nodes/textures/scifi_nodes_light.png new file mode 100644 index 00000000..cc7ce95c Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_light.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_lightband.png b/mods/scifi_nodes/textures/scifi_nodes_lightband.png new file mode 100644 index 00000000..7247ca5c Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_lightband.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_lightbox.png b/mods/scifi_nodes/textures/scifi_nodes_lightbox.png new file mode 100644 index 00000000..f5d00c93 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_lightbox.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_lightoverlay.png b/mods/scifi_nodes/textures/scifi_nodes_lightoverlay.png new file mode 100644 index 00000000..50a78710 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_lightoverlay.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_lightstripe.png b/mods/scifi_nodes/textures/scifi_nodes_lightstripe.png new file mode 100644 index 00000000..e792e46c Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_lightstripe.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_lighttop.png b/mods/scifi_nodes/textures/scifi_nodes_lighttop.png new file mode 100644 index 00000000..0bc01097 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_lighttop.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_liquid.png b/mods/scifi_nodes/textures/scifi_nodes_liquid.png new file mode 100644 index 00000000..91b6d088 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_liquid.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_mesh.png b/mods/scifi_nodes/textures/scifi_nodes_mesh.png new file mode 100644 index 00000000..0282b083 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_mesh.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_mesh2.png b/mods/scifi_nodes/textures/scifi_nodes_mesh2.png new file mode 100644 index 00000000..ddce9ef6 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_mesh2.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_monitor.png b/mods/scifi_nodes/textures/scifi_nodes_monitor.png new file mode 100644 index 00000000..a98b8720 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_monitor.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_monitorwall.png b/mods/scifi_nodes/textures/scifi_nodes_monitorwall.png new file mode 100644 index 00000000..3d8170b0 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_monitorwall.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_octbl.png b/mods/scifi_nodes/textures/scifi_nodes_octbl.png new file mode 100644 index 00000000..a02a9aca Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_octbl.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_octgrn.png b/mods/scifi_nodes/textures/scifi_nodes_octgrn.png new file mode 100644 index 00000000..d35428a3 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_octgrn.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_octofloor.png b/mods/scifi_nodes/textures/scifi_nodes_octofloor.png new file mode 100644 index 00000000..89cad2b6 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_octofloor.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_octofloor2.png b/mods/scifi_nodes/textures/scifi_nodes_octofloor2.png new file mode 100644 index 00000000..7e5507dd Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_octofloor2.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_octppl.png b/mods/scifi_nodes/textures/scifi_nodes_octppl.png new file mode 100644 index 00000000..31e3fc58 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_octppl.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_octrng.png b/mods/scifi_nodes/textures/scifi_nodes_octrng.png new file mode 100644 index 00000000..e68d507c Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_octrng.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_orange.png b/mods/scifi_nodes/textures/scifi_nodes_orange.png new file mode 100644 index 00000000..bc4a6113 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_orange.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_orange2.png b/mods/scifi_nodes/textures/scifi_nodes_orange2.png new file mode 100644 index 00000000..b2aa9858 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_orange2.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_pad.png b/mods/scifi_nodes/textures/scifi_nodes_pad.png new file mode 100644 index 00000000..6db84b23 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_pad.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_pc.png b/mods/scifi_nodes/textures/scifi_nodes_pc.png new file mode 100644 index 00000000..04412be6 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_pc.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_pipe.png b/mods/scifi_nodes/textures/scifi_nodes_pipe.png new file mode 100644 index 00000000..d6632b6b Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_pipe.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_pipen.png b/mods/scifi_nodes/textures/scifi_nodes_pipen.png new file mode 100644 index 00000000..04608539 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_pipen.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_pipeside.png b/mods/scifi_nodes/textures/scifi_nodes_pipeside.png new file mode 100644 index 00000000..64f5fe26 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_pipeside.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_plant1.png b/mods/scifi_nodes/textures/scifi_nodes_plant1.png new file mode 100644 index 00000000..9a7150db Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_plant1.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_plant10.png b/mods/scifi_nodes/textures/scifi_nodes_plant10.png new file mode 100644 index 00000000..ec93e846 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_plant10.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_plant2.png b/mods/scifi_nodes/textures/scifi_nodes_plant2.png new file mode 100644 index 00000000..4cf42517 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_plant2.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_plant3.png b/mods/scifi_nodes/textures/scifi_nodes_plant3.png new file mode 100644 index 00000000..1c1252d6 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_plant3.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_plant4.png b/mods/scifi_nodes/textures/scifi_nodes_plant4.png new file mode 100644 index 00000000..0375e6a6 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_plant4.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_plant5.png b/mods/scifi_nodes/textures/scifi_nodes_plant5.png new file mode 100644 index 00000000..6cfaeff9 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_plant5.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_plant6.png b/mods/scifi_nodes/textures/scifi_nodes_plant6.png new file mode 100644 index 00000000..11a0e349 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_plant6.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_plant7.png b/mods/scifi_nodes/textures/scifi_nodes_plant7.png new file mode 100644 index 00000000..cbec36e2 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_plant7.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_plant8.png b/mods/scifi_nodes/textures/scifi_nodes_plant8.png new file mode 100644 index 00000000..816fcfaa Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_plant8.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_plant9.png b/mods/scifi_nodes/textures/scifi_nodes_plant9.png new file mode 100644 index 00000000..f1df1470 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_plant9.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_pod_inv.png b/mods/scifi_nodes/textures/scifi_nodes_pod_inv.png new file mode 100644 index 00000000..f62ab049 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_pod_inv.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_pot.png b/mods/scifi_nodes/textures/scifi_nodes_pot.png new file mode 100644 index 00000000..2d3634e0 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_pot.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_pplblk.png b/mods/scifi_nodes/textures/scifi_nodes_pplblk.png new file mode 100644 index 00000000..84ac7be6 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_pplblk.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_ppllght.png b/mods/scifi_nodes/textures/scifi_nodes_ppllght.png new file mode 100644 index 00000000..7329630c Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_ppllght.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_pplwll.png b/mods/scifi_nodes/textures/scifi_nodes_pplwll.png new file mode 100644 index 00000000..9aa35257 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_pplwll.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_pplwll2.png b/mods/scifi_nodes/textures/scifi_nodes_pplwll2.png new file mode 100644 index 00000000..905f7efb Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_pplwll2.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_pplwll3.png b/mods/scifi_nodes/textures/scifi_nodes_pplwll3.png new file mode 100644 index 00000000..838c13ad Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_pplwll3.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_pplwll4.png b/mods/scifi_nodes/textures/scifi_nodes_pplwll4.png new file mode 100644 index 00000000..d83c90f0 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_pplwll4.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_pplwndw.png b/mods/scifi_nodes/textures/scifi_nodes_pplwndw.png new file mode 100644 index 00000000..89adf2e6 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_pplwndw.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_purple.png b/mods/scifi_nodes/textures/scifi_nodes_purple.png new file mode 100644 index 00000000..f7516e39 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_purple.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_pwrstnd_side.png b/mods/scifi_nodes/textures/scifi_nodes_pwrstnd_side.png new file mode 100644 index 00000000..839f519c Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_pwrstnd_side.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_pwrstnd_top.png b/mods/scifi_nodes/textures/scifi_nodes_pwrstnd_top.png new file mode 100644 index 00000000..3474196c Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_pwrstnd_top.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_red.png b/mods/scifi_nodes/textures/scifi_nodes_red.png new file mode 100644 index 00000000..aceb0516 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_red.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_red_square.png b/mods/scifi_nodes/textures/scifi_nodes_red_square.png new file mode 100644 index 00000000..6d3a40b2 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_red_square.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_redlight.png b/mods/scifi_nodes/textures/scifi_nodes_redlight.png new file mode 100644 index 00000000..6cb8bc9b Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_redlight.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_rock.png b/mods/scifi_nodes/textures/scifi_nodes_rock.png new file mode 100644 index 00000000..98e7e3b1 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_rock.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_rock2.png b/mods/scifi_nodes/textures/scifi_nodes_rock2.png new file mode 100644 index 00000000..c4f7a53e Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_rock2.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_rough.png b/mods/scifi_nodes/textures/scifi_nodes_rough.png new file mode 100644 index 00000000..f3c41467 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_rough.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_rust.png b/mods/scifi_nodes/textures/scifi_nodes_rust.png new file mode 100644 index 00000000..db50c2c9 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_rust.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_rustfloor.png b/mods/scifi_nodes/textures/scifi_nodes_rustfloor.png new file mode 100644 index 00000000..b95054dd Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_rustfloor.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_screen.png b/mods/scifi_nodes/textures/scifi_nodes_screen.png new file mode 100644 index 00000000..0d6b5734 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_screen.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_screen2.png b/mods/scifi_nodes/textures/scifi_nodes_screen2.png new file mode 100644 index 00000000..f731c519 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_screen2.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_screen3.png b/mods/scifi_nodes/textures/scifi_nodes_screen3.png new file mode 100644 index 00000000..abfec4aa Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_screen3.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_stripes.png b/mods/scifi_nodes/textures/scifi_nodes_stripes.png new file mode 100644 index 00000000..6c30a2fe Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_stripes.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_stripes2.png b/mods/scifi_nodes/textures/scifi_nodes_stripes2.png new file mode 100644 index 00000000..a0eda769 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_stripes2.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_stripes2top.png b/mods/scifi_nodes/textures/scifi_nodes_stripes2top.png new file mode 100644 index 00000000..9de566fa Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_stripes2top.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_switch_off.png b/mods/scifi_nodes/textures/scifi_nodes_switch_off.png new file mode 100644 index 00000000..dd6bdd82 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_switch_off.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_switch_on.png b/mods/scifi_nodes/textures/scifi_nodes_switch_on.png new file mode 100644 index 00000000..199c798a Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_switch_on.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_tallscreen.png b/mods/scifi_nodes/textures/scifi_nodes_tallscreen.png new file mode 100644 index 00000000..487dc73c Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_tallscreen.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_tile.png b/mods/scifi_nodes/textures/scifi_nodes_tile.png new file mode 100644 index 00000000..22612e34 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_tile.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_tower.png b/mods/scifi_nodes/textures/scifi_nodes_tower.png new file mode 100644 index 00000000..de28af2b Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_tower.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_tower_anim.png b/mods/scifi_nodes/textures/scifi_nodes_tower_anim.png new file mode 100644 index 00000000..d972f6ed Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_tower_anim.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_tp_part.png b/mods/scifi_nodes/textures/scifi_nodes_tp_part.png new file mode 100644 index 00000000..fe555546 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_tp_part.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_traplant_side.png b/mods/scifi_nodes/textures/scifi_nodes_traplant_side.png new file mode 100644 index 00000000..f11ab760 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_traplant_side.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_traplant_top.png b/mods/scifi_nodes/textures/scifi_nodes_traplant_top.png new file mode 100644 index 00000000..85cbab91 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_traplant_top.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_vent.png b/mods/scifi_nodes/textures/scifi_nodes_vent.png new file mode 100644 index 00000000..4577e60d Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_vent.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_vent2.png b/mods/scifi_nodes/textures/scifi_nodes_vent2.png new file mode 100644 index 00000000..a48b8902 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_vent2.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_wall.png b/mods/scifi_nodes/textures/scifi_nodes_wall.png new file mode 100644 index 00000000..4eba29fa Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_wall.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_wallpipe.png b/mods/scifi_nodes/textures/scifi_nodes_wallpipe.png new file mode 100644 index 00000000..5d48b549 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_wallpipe.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_white.png b/mods/scifi_nodes/textures/scifi_nodes_white.png new file mode 100644 index 00000000..71ba2cf9 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_white.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_white2.png b/mods/scifi_nodes/textures/scifi_nodes_white2.png new file mode 100644 index 00000000..35856866 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_white2.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_white_pad.png b/mods/scifi_nodes/textures/scifi_nodes_white_pad.png new file mode 100644 index 00000000..59eceb5a Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_white_pad.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_white_side.png b/mods/scifi_nodes/textures/scifi_nodes_white_side.png new file mode 100644 index 00000000..e4fdbb8f Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_white_side.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_white_vent.png b/mods/scifi_nodes/textures/scifi_nodes_white_vent.png new file mode 100644 index 00000000..1d9a765d Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_white_vent.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_whiteoct.png b/mods/scifi_nodes/textures/scifi_nodes_whiteoct.png new file mode 100644 index 00000000..3310d575 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_whiteoct.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_whitetile.png b/mods/scifi_nodes/textures/scifi_nodes_whitetile.png new file mode 100644 index 00000000..114fa277 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_whitetile.png differ diff --git a/mods/scifi_nodes/textures/scifi_nodes_widescreen.png b/mods/scifi_nodes/textures/scifi_nodes_widescreen.png new file mode 100644 index 00000000..90256bd8 Binary files /dev/null and b/mods/scifi_nodes/textures/scifi_nodes_widescreen.png differ diff --git a/mods/screwdriver/README.txt b/mods/screwdriver/README.txt new file mode 100644 index 00000000..14c073e7 --- /dev/null +++ b/mods/screwdriver/README.txt @@ -0,0 +1,13 @@ +Minetest Game mod: screwdriver +============================== +See license.txt for license information. + +License of source code +---------------------- +Originally by RealBadAngel, Maciej Kasatkin (LGPLv2.1+) +Various Minetest developers and contributors (LGPLv2.1+) + +License of media (textures) +--------------------------- +Created by Gambit (CC BY-SA 3.0): + screwdriver.png diff --git a/mods/screwdriver/init.lua b/mods/screwdriver/init.lua new file mode 100644 index 00000000..8990d346 --- /dev/null +++ b/mods/screwdriver/init.lua @@ -0,0 +1,223 @@ +-- screwdriver/init.lua + +screwdriver = {} + +-- Load support for MT game translation. +local S = minetest.get_translator("screwdriver") + + +screwdriver.ROTATE_FACE = 1 +screwdriver.ROTATE_AXIS = 2 +screwdriver.disallow = function(pos, node, user, mode, new_param2) + return false +end +screwdriver.rotate_simple = function(pos, node, user, mode, new_param2) + if mode ~= screwdriver.ROTATE_FACE then + return false + end +end + +-- For attached wallmounted nodes: returns true if rotation is valid +-- simplified version of minetest:builtin/game/falling.lua#L148. +local function check_attached_node(pos, rotation) + local d = minetest.wallmounted_to_dir(rotation) + local p2 = vector.add(pos, d) + local n = minetest.get_node(p2).name + local def2 = minetest.registered_nodes[n] + if def2 and not def2.walkable then + return false + end + return true +end + +screwdriver.rotate = {} + +local facedir_tbl = { + [screwdriver.ROTATE_FACE] = { + [0] = 1, [1] = 2, [2] = 3, [3] = 0, + [4] = 5, [5] = 6, [6] = 7, [7] = 4, + [8] = 9, [9] = 10, [10] = 11, [11] = 8, + [12] = 13, [13] = 14, [14] = 15, [15] = 12, + [16] = 17, [17] = 18, [18] = 19, [19] = 16, + [20] = 21, [21] = 22, [22] = 23, [23] = 20, + }, + [screwdriver.ROTATE_AXIS] = { + [0] = 4, [1] = 4, [2] = 4, [3] = 4, + [4] = 8, [5] = 8, [6] = 8, [7] = 8, + [8] = 12, [9] = 12, [10] = 12, [11] = 12, + [12] = 16, [13] = 16, [14] = 16, [15] = 16, + [16] = 20, [17] = 20, [18] = 20, [19] = 20, + [20] = 0, [21] = 0, [22] = 0, [23] = 0, + }, +} + +screwdriver.rotate.facedir = function(pos, node, mode) + local rotation = node.param2 % 32 -- get first 5 bits + local other = node.param2 - rotation + rotation = facedir_tbl[mode][rotation] or 0 + return rotation + other +end + +screwdriver.rotate.colorfacedir = screwdriver.rotate.facedir + +local wallmounted_tbl = { + [screwdriver.ROTATE_FACE] = {[2] = 5, [3] = 4, [4] = 2, [5] = 3, [1] = 0, [0] = 1}, + [screwdriver.ROTATE_AXIS] = {[2] = 5, [3] = 4, [4] = 2, [5] = 1, [1] = 0, [0] = 3} +} + +screwdriver.rotate.wallmounted = function(pos, node, mode) + local rotation = node.param2 % 8 -- get first 3 bits + local other = node.param2 - rotation + rotation = wallmounted_tbl[mode][rotation] or 0 + if minetest.get_item_group(node.name, "attached_node") ~= 0 then + -- find an acceptable orientation + for i = 1, 5 do + if not check_attached_node(pos, rotation) then + rotation = wallmounted_tbl[mode][rotation] or 0 + else + break + end + end + end + return rotation + other +end + +screwdriver.rotate.colorwallmounted = screwdriver.rotate.wallmounted + +-- Handles rotation +screwdriver.handler = function(itemstack, user, pointed_thing, mode, uses) + if pointed_thing.type ~= "node" then + return + end + + local pos = pointed_thing.under + local player_name = user and user:get_player_name() or "" + + if minetest.is_protected(pos, player_name) then + minetest.record_protection_violation(pos, player_name) + return + end + + local node = minetest.get_node(pos) + local ndef = minetest.registered_nodes[node.name] + if not ndef then + return itemstack + end + -- can we rotate this paramtype2? + local fn = screwdriver.rotate[ndef.paramtype2] + if not fn and not ndef.on_rotate then + return itemstack + end + + local should_rotate = true + local new_param2 + if fn then + new_param2 = fn(pos, node, mode) + else + new_param2 = node.param2 + end + + -- Node provides a handler, so let the handler decide instead if the node can be rotated + if ndef.on_rotate then + -- Copy pos and node because callback can modify it + local result = ndef.on_rotate(vector.new(pos), + {name = node.name, param1 = node.param1, param2 = node.param2}, + user, mode, new_param2) + if result == false then -- Disallow rotation + return itemstack + elseif result == true then + should_rotate = false + end + elseif ndef.on_rotate == false then + return itemstack + elseif ndef.can_dig and not ndef.can_dig(pos, user) then + return itemstack + end + + if should_rotate and new_param2 ~= node.param2 then + node.param2 = new_param2 + minetest.swap_node(pos, node) + minetest.check_for_falling(pos) + end + + if not minetest.is_creative_enabled(player_name) then + itemstack:add_wear_by_uses(uses or 200) + end + + return itemstack +end + +-- Screwdriver Steel +minetest.register_tool("screwdriver:screwdriver", { + description = S("Screwdriver") .. "\n" .. S("(left-click rotates face, right-click rotates axis)"), + inventory_image = "screwdriver.png", + groups = {tool = 1}, + on_use = function(itemstack, user, pointed_thing) + screwdriver.handler(itemstack, user, pointed_thing, screwdriver.ROTATE_FACE, 200) + return itemstack + end, + on_place = function(itemstack, user, pointed_thing) + screwdriver.handler(itemstack, user, pointed_thing, screwdriver.ROTATE_AXIS, 200) + return itemstack + end, +}) + +-- Screwdriver Diamond +minetest.register_tool("screwdriver:screwdriver_diamond", { + description = "Screwdriver (left-click rotates face, right-click rotates axis)", + inventory_image = "screwdriver_diamond.png", + on_use = function(itemstack, user, pointed_thing) + screwdriver.handler(itemstack, user, pointed_thing, screwdriver.ROTATE_FACE, 800) + return itemstack + end, + on_place = function(itemstack, user, pointed_thing) + screwdriver.handler(itemstack, user, pointed_thing, screwdriver.ROTATE_AXIS, 800) + return itemstack + end, +}) + +-- Screwdriver Mithril +minetest.register_tool("screwdriver:screwdriver_mithril", { + description = "Screwdriver (left-click rotates face, right-click rotates axis)", + inventory_image = "screwdriver_mithril.png", + on_use = function(itemstack, user, pointed_thing) + screwdriver.handler(itemstack, user, pointed_thing, screwdriver.ROTATE_FACE, 1400) + return itemstack + end, + on_place = function(itemstack, user, pointed_thing) + screwdriver.handler(itemstack, user, pointed_thing, screwdriver.ROTATE_AXIS, 1400) + return itemstack + end, +}) + +minetest.register_craft({ + output = "screwdriver:screwdriver", + recipe = { + {"default:steel_ingot"}, + {"group:stick"} + } +}) + +minetest.register_craft({ + output = "screwdriver:screwdriver_diamond", + recipe = { + {"default:diamond"}, + {"group:stick"} + } +}) + +if minetest.get_modpath("moreores") then + minetest.register_craft({ + output = "screwdriver:screwdriver_mithril", + recipe = { + {"moreores:mithril_ingot"}, + {"group:stick"} + } + }) +end + + +minetest.register_alias("screwdriver:screwdriver1", "screwdriver:screwdriver") +minetest.register_alias("screwdriver:screwdriver2", "screwdriver:screwdriver") +minetest.register_alias("screwdriver:screwdriver3", "screwdriver:screwdriver") +minetest.register_alias("screwdriver:screwdriver4", "screwdriver:screwdriver") diff --git a/mods/screwdriver/license.txt b/mods/screwdriver/license.txt new file mode 100644 index 00000000..d9b721bb --- /dev/null +++ b/mods/screwdriver/license.txt @@ -0,0 +1,50 @@ +License of source code +---------------------- + +GNU Lesser General Public License, version 2.1 +Copyright (C) 2013-2016 RealBadAngel, Maciej Kasatkin +Copyright (C) 2013-2016 Various Minetest developers and contributors + +This program is free software; you can redistribute it and/or modify it under the terms +of the GNU Lesser General Public License as published by the Free Software Foundation; +either version 2.1 of the License, or (at your option) any later version. + +This program 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 Lesser General Public License for more details: +https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2013-2016 Gambit + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/screwdriver/locale/screwdriver.de.tr b/mods/screwdriver/locale/screwdriver.de.tr new file mode 100644 index 00000000..3c48ab4f --- /dev/null +++ b/mods/screwdriver/locale/screwdriver.de.tr @@ -0,0 +1,3 @@ +# textdomain: screwdriver +Screwdriver=Schraubendreher +(left-click rotates face, right-click rotates axis)=(Linksklick dreht Seite, Rechtsklick dreht Achse) diff --git a/mods/screwdriver/locale/screwdriver.eo.tr b/mods/screwdriver/locale/screwdriver.eo.tr new file mode 100644 index 00000000..7f8fedfa --- /dev/null +++ b/mods/screwdriver/locale/screwdriver.eo.tr @@ -0,0 +1,3 @@ +# textdomain: screwdriver +Screwdriver=Ŝraŭbturnilo +(left-click rotates face, right-click rotates axis)=(maldekstra-klako turnas supraĵon, dekstra-klako turnas akson) diff --git a/mods/screwdriver/locale/screwdriver.es.tr b/mods/screwdriver/locale/screwdriver.es.tr new file mode 100644 index 00000000..868ffc34 --- /dev/null +++ b/mods/screwdriver/locale/screwdriver.es.tr @@ -0,0 +1,3 @@ +# textdomain: screwdriver +Screwdriver=Destornillador +(left-click rotates face, right-click rotates axis)=(clic-izquierdo gira la cara, clic-derecho rota el eje) diff --git a/mods/screwdriver/locale/screwdriver.fr.tr b/mods/screwdriver/locale/screwdriver.fr.tr new file mode 100644 index 00000000..fe34a9b6 --- /dev/null +++ b/mods/screwdriver/locale/screwdriver.fr.tr @@ -0,0 +1,3 @@ +# textdomain: screwdriver +Screwdriver=Tournevis +(left-click rotates face, right-click rotates axis)=(clic gauche pour changer de face, clic droit pour changer d'axe) diff --git a/mods/screwdriver/locale/screwdriver.id.tr b/mods/screwdriver/locale/screwdriver.id.tr new file mode 100644 index 00000000..ec83c794 --- /dev/null +++ b/mods/screwdriver/locale/screwdriver.id.tr @@ -0,0 +1,3 @@ +# textdomain: screwdriver +Screwdriver=Obeng +(left-click rotates face, right-click rotates axis)=(klik kiri putar sisi, klik kanan putar sumbu) diff --git a/mods/screwdriver/locale/screwdriver.it.tr b/mods/screwdriver/locale/screwdriver.it.tr new file mode 100644 index 00000000..ff44b89f --- /dev/null +++ b/mods/screwdriver/locale/screwdriver.it.tr @@ -0,0 +1,3 @@ +# textdomain: screwdriver +Screwdriver=Cacciavite +(left-click rotates face, right-click rotates axis)=(click sinistro ruota la faccia, click destro ruota l'asse) diff --git a/mods/screwdriver/locale/screwdriver.ja.tr b/mods/screwdriver/locale/screwdriver.ja.tr new file mode 100644 index 00000000..55690f25 --- /dev/null +++ b/mods/screwdriver/locale/screwdriver.ja.tr @@ -0,0 +1,3 @@ +# textdomain: screwdriver +Screwdriver=ドライバー +(left-click rotates face, right-click rotates axis)=(左クリックで面が回転。右クリックで軸が回転) diff --git a/mods/screwdriver/locale/screwdriver.jbo.tr b/mods/screwdriver/locale/screwdriver.jbo.tr new file mode 100644 index 00000000..1a85bb61 --- /dev/null +++ b/mods/screwdriver/locale/screwdriver.jbo.tr @@ -0,0 +1,3 @@ +# textdomain: screwdriver +Screwdriver=lo lupcartci +(left-click rotates face, right-click rotates axis)=.i tu'a le zulselpevysmacu cu rinka lo nu le sefta cu carna@n.i tu'a le prityselpevysmacu cu rinka lo nu le jendu cu carna diff --git a/mods/screwdriver/locale/screwdriver.ms.tr b/mods/screwdriver/locale/screwdriver.ms.tr new file mode 100644 index 00000000..f296fc52 --- /dev/null +++ b/mods/screwdriver/locale/screwdriver.ms.tr @@ -0,0 +1,3 @@ +# textdomain: screwdriver +Screwdriver=Pemutar Skru +(left-click rotates face, right-click rotates axis)=(klik-kiri putar muka, klik-kanan putar paksi) diff --git a/mods/screwdriver/locale/screwdriver.pl.tr b/mods/screwdriver/locale/screwdriver.pl.tr new file mode 100644 index 00000000..3b4bfd6e --- /dev/null +++ b/mods/screwdriver/locale/screwdriver.pl.tr @@ -0,0 +1,3 @@ +# textdomain: screwdriver +Screwdriver=Śrubokręt +(left-click rotates face, right-click rotates axis)=(lewy przycisk myszy obraca powierzchnię, prawy przycisk myszy obraca oś) diff --git a/mods/screwdriver/locale/screwdriver.pt_BR.tr b/mods/screwdriver/locale/screwdriver.pt_BR.tr new file mode 100644 index 00000000..3e89f40f --- /dev/null +++ b/mods/screwdriver/locale/screwdriver.pt_BR.tr @@ -0,0 +1,3 @@ +# textdomain: screwdriver +Screwdriver=Chave de fenda +(left-click rotates face, right-click rotates axis)=(Clique esquerdo rotaciona a face, clique direito rotaciona o eixo) diff --git a/mods/screwdriver/locale/screwdriver.ru.tr b/mods/screwdriver/locale/screwdriver.ru.tr new file mode 100644 index 00000000..bbab3305 --- /dev/null +++ b/mods/screwdriver/locale/screwdriver.ru.tr @@ -0,0 +1,3 @@ +# textdomain: screwdriver +Screwdriver=Отвёртка +(left-click rotates face, right-click rotates axis)=(клик левой кнопкой мыши вращает грань, клик правой кнопкой мыши вращает ось) diff --git a/mods/screwdriver/locale/screwdriver.sk.tr b/mods/screwdriver/locale/screwdriver.sk.tr new file mode 100644 index 00000000..74cb4174 --- /dev/null +++ b/mods/screwdriver/locale/screwdriver.sk.tr @@ -0,0 +1,3 @@ +# textdomain: screwdriver +Screwdriver=Skrutkovač +(left-click rotates face, right-click rotates axis)=(Ľavý klik otáča stranu, pravý klik otáča os) diff --git a/mods/screwdriver/locale/screwdriver.sv.tr b/mods/screwdriver/locale/screwdriver.sv.tr new file mode 100644 index 00000000..be440a76 --- /dev/null +++ b/mods/screwdriver/locale/screwdriver.sv.tr @@ -0,0 +1,3 @@ +# textdomain: screwdriver +Screwdriver=Skruvmejsel +(left-click rotates face, right-click rotates axis)=(vänster-klick roterar ansikte, höger-klick roterar axeln) diff --git a/mods/screwdriver/locale/screwdriver.uk.tr b/mods/screwdriver/locale/screwdriver.uk.tr new file mode 100644 index 00000000..363e4c4c --- /dev/null +++ b/mods/screwdriver/locale/screwdriver.uk.tr @@ -0,0 +1,3 @@ +# textdomain: screwdriver +Screwdriver=Викрутка +(left-click rotates face, right-click rotates axis)=(клік лівою кнопкою миші повертає край, клік правою кнопкою миші - вісь) diff --git a/mods/screwdriver/locale/screwdriver.zh_CN.tr b/mods/screwdriver/locale/screwdriver.zh_CN.tr new file mode 100644 index 00000000..caddf798 --- /dev/null +++ b/mods/screwdriver/locale/screwdriver.zh_CN.tr @@ -0,0 +1,3 @@ +# textdomain: screwdriver +Screwdriver=螺丝刀 +(left-click rotates face, right-click rotates axis)=(左键单击旋转面,右键单击旋转轴) diff --git a/mods/screwdriver/locale/screwdriver.zh_TW.tr b/mods/screwdriver/locale/screwdriver.zh_TW.tr new file mode 100644 index 00000000..e638bfa0 --- /dev/null +++ b/mods/screwdriver/locale/screwdriver.zh_TW.tr @@ -0,0 +1,3 @@ +# textdomain: screwdriver +Screwdriver=螺絲刀 +(left-click rotates face, right-click rotates axis)=(左鍵單擊旋轉面,右鍵單擊旋轉軸) diff --git a/mods/screwdriver/locale/template.txt b/mods/screwdriver/locale/template.txt new file mode 100644 index 00000000..4cc8e2a6 --- /dev/null +++ b/mods/screwdriver/locale/template.txt @@ -0,0 +1,3 @@ +# textdomain: screwdriver +Screwdriver= +(left-click rotates face, right-click rotates axis)= diff --git a/mods/screwdriver/mod.conf b/mods/screwdriver/mod.conf new file mode 100644 index 00000000..306c52b5 --- /dev/null +++ b/mods/screwdriver/mod.conf @@ -0,0 +1,2 @@ +name = screwdriver +description = Minetest Game mod: screwdriver diff --git a/mods/screwdriver/textures/screwdriver.png b/mods/screwdriver/textures/screwdriver.png new file mode 100644 index 00000000..b2a56d55 Binary files /dev/null and b/mods/screwdriver/textures/screwdriver.png differ diff --git a/mods/screwdriver/textures/screwdriver_diamond.png b/mods/screwdriver/textures/screwdriver_diamond.png new file mode 100644 index 00000000..4fe38582 Binary files /dev/null and b/mods/screwdriver/textures/screwdriver_diamond.png differ diff --git a/mods/screwdriver/textures/screwdriver_mithril.png b/mods/screwdriver/textures/screwdriver_mithril.png new file mode 100644 index 00000000..80503711 Binary files /dev/null and b/mods/screwdriver/textures/screwdriver_mithril.png differ diff --git a/mods/sea b/mods/sea new file mode 160000 index 00000000..342d9b81 --- /dev/null +++ b/mods/sea @@ -0,0 +1 @@ +Subproject commit 342d9b81f67c41bab2f11e84157392751ceec7aa diff --git a/mods/sethome/README.txt b/mods/sethome/README.txt new file mode 100644 index 00000000..6f0a282b --- /dev/null +++ b/mods/sethome/README.txt @@ -0,0 +1,7 @@ +Minetest Game mod: sethome +========================== +See license.txt for license information. + +Authors of source code +---------------------- +sfan5 (MIT) diff --git a/mods/sethome/init.lua b/mods/sethome/init.lua new file mode 100644 index 00000000..9fc8e6ac --- /dev/null +++ b/mods/sethome/init.lua @@ -0,0 +1,107 @@ +-- sethome/init.lua + +sethome = {} + +-- Load support for MT game translation. +local S = minetest.get_translator("sethome") + + +local homes_file = minetest.get_worldpath() .. "/homes" +local homepos = {} + +local function loadhomes() + local input = io.open(homes_file, "r") + if not input then + return -- no longer an error + end + + -- Iterate over all stored positions in the format "x y z player" for each line + for pos, name in input:read("*a"):gmatch("(%S+ %S+ %S+)%s([%w_-]+)[\r\n]") do + homepos[name] = minetest.string_to_pos(pos) + end + input:close() +end + +loadhomes() + +sethome.set = function(name, pos) + local player = minetest.get_player_by_name(name) + if not player or not pos then + return false + end + local player_meta = player:get_meta() + player_meta:set_string("sethome:home", minetest.pos_to_string(pos)) + + -- remove `name` from the old storage file + if not homepos[name] then + return true + end + local data = {} + local output = io.open(homes_file, "w") + if output then + homepos[name] = nil + for i, v in pairs(homepos) do + table.insert(data, string.format("%.1f %.1f %.1f %s\n", v.x, v.y, v.z, i)) + end + output:write(table.concat(data)) + io.close(output) + return true + end + return true -- if the file doesn't exist - don't return an error. +end + +sethome.get = function(name) + local player = minetest.get_player_by_name(name) + local player_meta = player:get_meta() + local pos = minetest.string_to_pos(player_meta:get_string("sethome:home")) + if pos then + return pos + end + + -- fetch old entry from storage table + pos = homepos[name] + if pos then + return vector.new(pos) + else + return nil + end +end + +sethome.go = function(name) + local pos = sethome.get(name) + local player = minetest.get_player_by_name(name) + if player and pos then + player:set_pos(pos) + return true + end + return false +end + +minetest.register_privilege("home", { + description = S("Can use /sethome and /home"), + give_to_singleplayer = false +}) + +minetest.register_chatcommand("home", { + description = S("Teleport you to your home point"), + privs = {home = true}, + func = function(name) + if sethome.go(name) then + return true, S("Teleported to home!") + end + return false, S("Set a home using /sethome") + end, +}) + +minetest.register_chatcommand("sethome", { + description = S("Set your home point"), + privs = {home = true}, + func = function(name) + name = name or "" -- fallback to blank name if nil + local player = minetest.get_player_by_name(name) + if player and sethome.set(name, player:get_pos()) then + return true, S("Home set!") + end + return false, S("Player not found!") + end, +}) diff --git a/mods/sethome/license.txt b/mods/sethome/license.txt new file mode 100644 index 00000000..09f03b09 --- /dev/null +++ b/mods/sethome/license.txt @@ -0,0 +1,24 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2014-2016 sfan5 + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT diff --git a/mods/sethome/locale/sethome.de.tr b/mods/sethome/locale/sethome.de.tr new file mode 100644 index 00000000..46279dd5 --- /dev/null +++ b/mods/sethome/locale/sethome.de.tr @@ -0,0 +1,8 @@ +# textdomain: sethome +Can use /sethome and /home=Kann /sethome und /home benutzen +Teleport you to your home point=Teleportieren Sie sich zu Ihrem Zuhause-Punkt +Teleported to home!=Nach Hause teleportiert! +Set a home using /sethome=Ein Zuhause mit /sethome setzen +Set your home point=Ihren Zuhause-Punkt setzen +Home set!=Zuhause gesetzt! +Player not found!=Spieler nicht gefunden! diff --git a/mods/sethome/locale/sethome.eo.tr b/mods/sethome/locale/sethome.eo.tr new file mode 100644 index 00000000..eb8f0a61 --- /dev/null +++ b/mods/sethome/locale/sethome.eo.tr @@ -0,0 +1,8 @@ +# textdomain: sethome +Can use /sethome and /home=Povas uzi /sethome kaj /home +Teleport you to your home point=Teletransporti vin al via hejmo +Teleported to home!=Teletransportita al hejmo! +Set a home using /sethome=Fiksi hejmon per /sethome +Set your home point=Fiksi vian hejman punkton +Home set!=Fiksita hejmo! +Player not found!=Ludanto ne troveblas! diff --git a/mods/sethome/locale/sethome.es.tr b/mods/sethome/locale/sethome.es.tr new file mode 100644 index 00000000..7c04ee3c --- /dev/null +++ b/mods/sethome/locale/sethome.es.tr @@ -0,0 +1,8 @@ +# textdomain: sethome +Can use /sethome and /home=Puedes usar /sethome y /home +Teleport you to your home point=Teletranspórtate a tu hogar +Teleported to home!=¡Teletransportado a tu hogar! +Set a home using /sethome=Establece tu hogar usando /sethome +Set your home point=Establece el sitio de tu hogar +Home set!=¡Hogar establecido! +Player not found!=¡Jugador no encontrado! diff --git a/mods/sethome/locale/sethome.fr.tr b/mods/sethome/locale/sethome.fr.tr new file mode 100644 index 00000000..852621d6 --- /dev/null +++ b/mods/sethome/locale/sethome.fr.tr @@ -0,0 +1,8 @@ +# textdomain: sethome +Can use /sethome and /home=Peut utiliser /sethome et /home +Teleport you to your home point=Vous téléporter à votre domicile +Teleported to home!=Téléporté à votre domicile ! +Set a home using /sethome=Définir un domicile en utilisant /sethome +Set your home point=Définir votre domicile +Home set!=Domicile défini ! +Player not found!=Joueur non trouvé ! diff --git a/mods/sethome/locale/sethome.id.tr b/mods/sethome/locale/sethome.id.tr new file mode 100644 index 00000000..1966978c --- /dev/null +++ b/mods/sethome/locale/sethome.id.tr @@ -0,0 +1,8 @@ +# textdomain: sethome +Can use /sethome and /home=Boleh pakai /sethome dan /home +Teleport you to your home point=Teleportasi ke rumah Anda +Teleported to home!=Teleportasi ke rumah! +Set a home using /sethome=Atur letak rumah dengan /sethome +Set your home point=Atur letak rumah +Home set!=Letak rumah diatur! +Player not found!=Pemain tidak ditemukan! diff --git a/mods/sethome/locale/sethome.it.tr b/mods/sethome/locale/sethome.it.tr new file mode 100644 index 00000000..6bdf11ca --- /dev/null +++ b/mods/sethome/locale/sethome.it.tr @@ -0,0 +1,8 @@ +# textdomain: sethome +Can use /sethome and /home=Può usare /sethome e /home +Teleport you to your home point=Ti teletrasporta al tuo punto di domicilio +Teleported to home!=Teletrasportato a casa! +Set a home using /sethome=Imposta un domicilio usando /sethome +Set your home point=Imposta il tuo punto di domicilio +Home set!=Domicilio impostato! +Player not found!=Giocatore non trovato! diff --git a/mods/sethome/locale/sethome.ja.tr b/mods/sethome/locale/sethome.ja.tr new file mode 100644 index 00000000..3d636b59 --- /dev/null +++ b/mods/sethome/locale/sethome.ja.tr @@ -0,0 +1,8 @@ +# textdomain: sethome +Can use /sethome and /home=/sethomeと/homeが使えます +Teleport you to your home point=ホーム地点にテレポートします +Teleported to home!=ホームにテレポート! +Set a home using /sethome=/sethomeを使ってホームを設定します +Set your home point=ホーム地点を設定します +Home set!=ホーム地点をセット! +Player not found!=プレーヤーが見つかりません! diff --git a/mods/sethome/locale/sethome.jbo.tr b/mods/sethome/locale/sethome.jbo.tr new file mode 100644 index 00000000..90ac1a35 --- /dev/null +++ b/mods/sethome/locale/sethome.jbo.tr @@ -0,0 +1,8 @@ +# textdomain: sethome +Can use /sethome and /home=kakne lo nu pilno lo me zoi gy./sethome.gy. ku .e lo me zoi gy./home.gy. +Teleport you to your home point=sukmu'u lo do zdani mokca +Teleported to home!=puba'o sukmu'u lo zdani +Set a home using /sethome=ko tcimi'e fi lo zdani sepi'o lo me zoi gy./sethome.gy. +Set your home point=tcimi'e fi lo do zdani mokca +Home set!=puba'o tcimi'e fi lo zdani +Player not found!=lo kelci na te facki diff --git a/mods/sethome/locale/sethome.ms.tr b/mods/sethome/locale/sethome.ms.tr new file mode 100644 index 00000000..7e9ec760 --- /dev/null +++ b/mods/sethome/locale/sethome.ms.tr @@ -0,0 +1,8 @@ +# textdomain: sethome +Can use /sethome and /home=Boleh guna /sethome dan /home +Teleport you to your home point=Teleportasikan anda ke titik rumah anda +Teleported to home!=Diteleportasikan ke rumah! +Set a home using /sethome=Tetapkan rumah menggunakan /sethome +Set your home point=Tetapkan titik rumah anda +Home set!=Rumah ditetapkan! +Player not found!=Pemain tidak dijumpai! diff --git a/mods/sethome/locale/sethome.pl.tr b/mods/sethome/locale/sethome.pl.tr new file mode 100644 index 00000000..981a8c45 --- /dev/null +++ b/mods/sethome/locale/sethome.pl.tr @@ -0,0 +1,8 @@ +# textdomain: sethome +Can use /sethome and /home=Może używać /sethome i /home +Teleport you to your home point=Teleportuj się do swojego punktu domowego +Teleported to home!=Teleportowano do punktu domowego +Set a home using /sethome=Ustaw punkt domowy używając /sethome +Set your home point=Ustaw swój punkt domowy +Home set!=Punkt domowy ustawiony! +Player not found!=Gracz nie odnaleziony! diff --git a/mods/sethome/locale/sethome.pt_BR.tr b/mods/sethome/locale/sethome.pt_BR.tr new file mode 100644 index 00000000..fe2c35c8 --- /dev/null +++ b/mods/sethome/locale/sethome.pt_BR.tr @@ -0,0 +1,8 @@ +# textdomain: sethome +Can use /sethome and /home=Pode usar /sethome e /home +Teleport you to your home point=Teletransportá-lo para seu ponto de origem +Teleported to home!=Teletransportado para o ponto de origem! +Set a home using /sethome=Defina um ponto de origem usando /sethome +Set your home point=Define seu ponto de origem +Home set!=Ponto de origem definido! +Player not found!=Jogador não encontrado! diff --git a/mods/sethome/locale/sethome.ru.tr b/mods/sethome/locale/sethome.ru.tr new file mode 100644 index 00000000..67388245 --- /dev/null +++ b/mods/sethome/locale/sethome.ru.tr @@ -0,0 +1,8 @@ +# textdomain: sethome +Can use /sethome and /home=Возможность использовать /sethome и /home +Teleport you to your home point=Вы телепортируетесь в свою домашнюю точку +Teleported to home!=Вы телепортировались домой! +Set a home using /sethome=Установите домашнюю точку, используя /sethome +Set your home point=Установите вашу домашнюю точку +Home set!=Домашняя точка установлена! +Player not found!=Игрок не обнаружен! diff --git a/mods/sethome/locale/sethome.sk.tr b/mods/sethome/locale/sethome.sk.tr new file mode 100644 index 00000000..be5233ef --- /dev/null +++ b/mods/sethome/locale/sethome.sk.tr @@ -0,0 +1,8 @@ +# textdomain: sethome +Can use /sethome and /home=Môžeš použivať /sethome a /home +Teleport you to your home point=Teleportuj sa domov +Teleported to home!=Teleportovaný domov! +Set a home using /sethome=Nastav si domov použitím /sethome +Set your home point=Nastaviť si domov +Home set!=Domov nastavený! +Player not found!=Hráč nenájdený! diff --git a/mods/sethome/locale/sethome.sv.tr b/mods/sethome/locale/sethome.sv.tr new file mode 100644 index 00000000..60673ae5 --- /dev/null +++ b/mods/sethome/locale/sethome.sv.tr @@ -0,0 +1,8 @@ +# textdomain: sethome +Can use /sethome and /home=Kan använda /sethome och /home +Teleport you to your home point=Teleportera dig till din hempunkt +Teleported to home!=Teleporterad hem! +Set a home using /sethome=Ställ in ett hem med /sethome +Set your home point=Ställ in din hempunkt +Home set!=Hem inställt! +Player not found!=Spelare finns inte! diff --git a/mods/sethome/locale/sethome.uk.tr b/mods/sethome/locale/sethome.uk.tr new file mode 100644 index 00000000..d8d4a8fc --- /dev/null +++ b/mods/sethome/locale/sethome.uk.tr @@ -0,0 +1,8 @@ +# textdomain: sethome +Can use /sethome and /home=Можливість використання /sethome та /home +Teleport you to your home point=Ви телепортуєтесь у свою домашню точку +Teleported to home!=Ви телепортувались додому! +Set a home using /sethome=Встановіть домашню точку, використовуючи /sethome +Set your home point=Встановіть домашню точку +Home set!=Домашня точка встановлена! +Player not found!=Гравець не визначений! diff --git a/mods/sethome/locale/sethome.zh_CN.tr b/mods/sethome/locale/sethome.zh_CN.tr new file mode 100644 index 00000000..0af54ce7 --- /dev/null +++ b/mods/sethome/locale/sethome.zh_CN.tr @@ -0,0 +1,8 @@ +# textdomain: sethome +Can use /sethome and /home=可以使用/sethome和/home +Teleport you to your home point=将您传送到家 +Teleported to home!=已传送到家! +Set a home using /sethome=使用/sethome设定家 +Set your home point=设定您家的地点 +Home set!=已设定家! +Player not found!=未找到玩家! diff --git a/mods/sethome/locale/sethome.zh_TW.tr b/mods/sethome/locale/sethome.zh_TW.tr new file mode 100644 index 00000000..43e14aaa --- /dev/null +++ b/mods/sethome/locale/sethome.zh_TW.tr @@ -0,0 +1,8 @@ +# textdomain: sethome +Can use /sethome and /home=可以使用/sethome和/home +Teleport you to your home point=傳送您到您家的地點 +Teleported to home!=已傳送到家! +Set a home using /sethome=使用/sethome設定家 +Set your home point=設定您家的地點 +Home set!=已設定家! +Player not found!=未找到玩家! diff --git a/mods/sethome/locale/template.txt b/mods/sethome/locale/template.txt new file mode 100644 index 00000000..d04bd50a --- /dev/null +++ b/mods/sethome/locale/template.txt @@ -0,0 +1,8 @@ +# textdomain: sethome +Can use /sethome and /home= +Teleport you to your home point= +Teleported to home!= +Set a home using /sethome= +Set your home point= +Home set!= +Player not found!= diff --git a/mods/sethome/mod.conf b/mods/sethome/mod.conf new file mode 100644 index 00000000..00799251 --- /dev/null +++ b/mods/sethome/mod.conf @@ -0,0 +1,2 @@ +name = sethome +description = Minetest Game mod: sethome diff --git a/mods/sfinv/README.txt b/mods/sfinv/README.txt new file mode 100644 index 00000000..a69e3c32 --- /dev/null +++ b/mods/sfinv/README.txt @@ -0,0 +1,18 @@ +Minetest Game mod: sfinv +======================== +See license.txt for license information. + +Simple Fast Inventory. +A cleaner, simpler, solution to having an advanced inventory in Minetest. +See game_api.txt for this mod's API. +Available for use outside of MTG here: +https://forum.minetest.net/viewtopic.php?t=19765 + +Authors of source code +---------------------- +rubenwardy (MIT) + +Authors of media +---------------- +paramat (CC BY-SA 3.0): + sfinv_crafting_arrow.png - derived from a texture by BlockMen (CC BY-SA 3.0) diff --git a/mods/sfinv/api.lua b/mods/sfinv/api.lua new file mode 100644 index 00000000..1dbc44a9 --- /dev/null +++ b/mods/sfinv/api.lua @@ -0,0 +1,189 @@ +sfinv = { + pages = {}, + pages_unordered = {}, + contexts = {}, + enabled = true +} + +function sfinv.register_page(name, def) + assert(name, "Invalid sfinv page. Requires a name") + assert(def, "Invalid sfinv page. Requires a def[inition] table") + assert(def.get, "Invalid sfinv page. Def requires a get function.") + assert(not sfinv.pages[name], "Attempt to register already registered sfinv page " .. dump(name)) + + sfinv.pages[name] = def + def.name = name + table.insert(sfinv.pages_unordered, def) +end + +function sfinv.override_page(name, def) + assert(name, "Invalid sfinv page override. Requires a name") + assert(def, "Invalid sfinv page override. Requires a def[inition] table") + local page = sfinv.pages[name] + assert(page, "Attempt to override sfinv page " .. dump(name) .. " which does not exist.") + for key, value in pairs(def) do + page[key] = value + end +end + +function sfinv.get_nav_fs(player, context, nav, current_idx) + -- Only show tabs if there is more than one page + if #nav > 1 then + return "tabheader[0,0;sfinv_nav_tabs;" .. table.concat(nav, ",") .. + ";" .. current_idx .. ";true;false]" + else + return "" + end +end + +local theme_inv = [[ + image[0,5.2;1,1;gui_hb_bg.png] + image[1,5.2;1,1;gui_hb_bg.png] + image[2,5.2;1,1;gui_hb_bg.png] + image[3,5.2;1,1;gui_hb_bg.png] + image[4,5.2;1,1;gui_hb_bg.png] + image[5,5.2;1,1;gui_hb_bg.png] + image[6,5.2;1,1;gui_hb_bg.png] + image[7,5.2;1,1;gui_hb_bg.png] + list[current_player;main;0,5.2;8,1;] + list[current_player;main;0,6.35;8,3;8] + ]] + +function sfinv.make_formspec(player, context, content, show_inv, size) + local tmp = { + size or "size[8,9.1]", + sfinv.get_nav_fs(player, context, context.nav_titles, context.nav_idx), + show_inv and theme_inv or "", + content + } + return table.concat(tmp, "") +end + +function sfinv.get_homepage_name(player) + return "sfinv:crafting" +end + +function sfinv.get_formspec(player, context) + -- Generate navigation tabs + local nav = {} + local nav_ids = {} + local current_idx = 1 + for i, pdef in pairs(sfinv.pages_unordered) do + if not pdef.is_in_nav or pdef:is_in_nav(player, context) then + nav[#nav + 1] = pdef.title + nav_ids[#nav_ids + 1] = pdef.name + if pdef.name == context.page then + current_idx = #nav_ids + end + end + end + context.nav = nav_ids + context.nav_titles = nav + context.nav_idx = current_idx + + -- Generate formspec + local page = sfinv.pages[context.page] or sfinv.pages["404"] + if page then + return page:get(player, context) + else + local old_page = context.page + local home_page = sfinv.get_homepage_name(player) + + if old_page == home_page then + minetest.log("error", "[sfinv] Couldn't find " .. dump(old_page) .. + ", which is also the old page") + + return "" + end + + context.page = home_page + assert(sfinv.pages[context.page], "[sfinv] Invalid homepage") + minetest.log("warning", "[sfinv] Couldn't find " .. dump(old_page) .. + " so switching to homepage") + + return sfinv.get_formspec(player, context) + end +end + +function sfinv.get_or_create_context(player) + local name = player:get_player_name() + local context = sfinv.contexts[name] + if not context then + context = { + page = sfinv.get_homepage_name(player) + } + sfinv.contexts[name] = context + end + return context +end + +function sfinv.set_context(player, context) + sfinv.contexts[player:get_player_name()] = context +end + +function sfinv.set_player_inventory_formspec(player, context) + local fs = sfinv.get_formspec(player, + context or sfinv.get_or_create_context(player)) + player:set_inventory_formspec(fs) +end + +function sfinv.set_page(player, pagename) + local context = sfinv.get_or_create_context(player) + local oldpage = sfinv.pages[context.page] + if oldpage and oldpage.on_leave then + oldpage:on_leave(player, context) + end + context.page = pagename + local page = sfinv.pages[pagename] + if page.on_enter then + page:on_enter(player, context) + end + sfinv.set_player_inventory_formspec(player, context) +end + +function sfinv.get_page(player) + local context = sfinv.contexts[player:get_player_name()] + return context and context.page or sfinv.get_homepage_name(player) +end + +minetest.register_on_joinplayer(function(player) + if sfinv.enabled then + sfinv.set_player_inventory_formspec(player) + end +end) + +minetest.register_on_leaveplayer(function(player) + sfinv.contexts[player:get_player_name()] = nil +end) + +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname ~= "" or not sfinv.enabled then + return false + end + + -- Get Context + local name = player:get_player_name() + local context = sfinv.contexts[name] + if not context then + sfinv.set_player_inventory_formspec(player) + return false + end + + -- Was a tab selected? + if fields.sfinv_nav_tabs and context.nav then + local tid = tonumber(fields.sfinv_nav_tabs) + if tid and tid > 0 then + local id = context.nav[tid] + local page = sfinv.pages[id] + if id and page then + sfinv.set_page(player, id) + end + end + else + -- Pass event to page + local page = sfinv.pages[context.page] + if page and page.on_player_receive_fields then + return page:on_player_receive_fields(player, context, fields) + end + end +end) diff --git a/mods/sfinv/init.lua b/mods/sfinv/init.lua new file mode 100644 index 00000000..71e9ee70 --- /dev/null +++ b/mods/sfinv/init.lua @@ -0,0 +1,19 @@ +-- sfinv/init.lua + +dofile(minetest.get_modpath("sfinv") .. "/api.lua") + +-- Load support for MT game translation. +local S = minetest.get_translator("sfinv") + +sfinv.register_page("sfinv:crafting", { + title = S("Crafting"), + get = function(self, player, context) + return sfinv.make_formspec(player, context, [[ + list[current_player;craft;1.75,0.5;3,3;] + list[current_player;craftpreview;5.75,1.5;1,1;] + image[4.75,1.5;1,1;sfinv_crafting_arrow.png] + listring[current_player;main] + listring[current_player;craft] + ]], true) + end +}) diff --git a/mods/sfinv/license.txt b/mods/sfinv/license.txt new file mode 100644 index 00000000..6676d74e --- /dev/null +++ b/mods/sfinv/license.txt @@ -0,0 +1,59 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2016-2018 rubenwardy + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +License of media +---------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2019 paramat + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/sfinv/locale/sfinv.de.tr b/mods/sfinv/locale/sfinv.de.tr new file mode 100644 index 00000000..044e9ba9 --- /dev/null +++ b/mods/sfinv/locale/sfinv.de.tr @@ -0,0 +1,2 @@ +# textdomain: sfinv +Crafting=Fertigung diff --git a/mods/sfinv/locale/sfinv.eo.tr b/mods/sfinv/locale/sfinv.eo.tr new file mode 100644 index 00000000..1fac1adc --- /dev/null +++ b/mods/sfinv/locale/sfinv.eo.tr @@ -0,0 +1,2 @@ +# textdomain: sfinv +Crafting=Konstruado diff --git a/mods/sfinv/locale/sfinv.es.tr b/mods/sfinv/locale/sfinv.es.tr new file mode 100644 index 00000000..d3d66091 --- /dev/null +++ b/mods/sfinv/locale/sfinv.es.tr @@ -0,0 +1,2 @@ +# textdomain: sfinv +Crafting=Creación diff --git a/mods/sfinv/locale/sfinv.fr.tr b/mods/sfinv/locale/sfinv.fr.tr new file mode 100644 index 00000000..58ead969 --- /dev/null +++ b/mods/sfinv/locale/sfinv.fr.tr @@ -0,0 +1,2 @@ +# textdomain: sfinv +Crafting=Artisanat diff --git a/mods/sfinv/locale/sfinv.id.tr b/mods/sfinv/locale/sfinv.id.tr new file mode 100644 index 00000000..643196e1 --- /dev/null +++ b/mods/sfinv/locale/sfinv.id.tr @@ -0,0 +1,2 @@ +# textdomain: sfinv +Crafting=Kerajinan diff --git a/mods/sfinv/locale/sfinv.it.tr b/mods/sfinv/locale/sfinv.it.tr new file mode 100644 index 00000000..e449b752 --- /dev/null +++ b/mods/sfinv/locale/sfinv.it.tr @@ -0,0 +1,2 @@ +# textdomain: sfinv +Crafting=Assemblaggio diff --git a/mods/sfinv/locale/sfinv.ja.tr b/mods/sfinv/locale/sfinv.ja.tr new file mode 100644 index 00000000..04122d72 --- /dev/null +++ b/mods/sfinv/locale/sfinv.ja.tr @@ -0,0 +1,2 @@ +# textdomain: sfinv +Crafting=クラフト diff --git a/mods/sfinv/locale/sfinv.jbo.tr b/mods/sfinv/locale/sfinv.jbo.tr new file mode 100644 index 00000000..0ff0328e --- /dev/null +++ b/mods/sfinv/locale/sfinv.jbo.tr @@ -0,0 +1,2 @@ +# textdomain: sfinv +Crafting=nu zbasu diff --git a/mods/sfinv/locale/sfinv.ms.tr b/mods/sfinv/locale/sfinv.ms.tr new file mode 100644 index 00000000..f62ba8ab --- /dev/null +++ b/mods/sfinv/locale/sfinv.ms.tr @@ -0,0 +1,2 @@ +# textdomain: sfinv +Crafting=Pertukangan diff --git a/mods/sfinv/locale/sfinv.pl.tr b/mods/sfinv/locale/sfinv.pl.tr new file mode 100644 index 00000000..6230d82d --- /dev/null +++ b/mods/sfinv/locale/sfinv.pl.tr @@ -0,0 +1,2 @@ +# textdomain: sfinv +Crafting=Konstruowanie diff --git a/mods/sfinv/locale/sfinv.pt_BR.tr b/mods/sfinv/locale/sfinv.pt_BR.tr new file mode 100644 index 00000000..f9e57ae7 --- /dev/null +++ b/mods/sfinv/locale/sfinv.pt_BR.tr @@ -0,0 +1,2 @@ +# textdomain: sfinv +Crafting=Construir diff --git a/mods/sfinv/locale/sfinv.ru.tr b/mods/sfinv/locale/sfinv.ru.tr new file mode 100644 index 00000000..d7c11b2f --- /dev/null +++ b/mods/sfinv/locale/sfinv.ru.tr @@ -0,0 +1,2 @@ +# textdomain: sfinv +Crafting=Крафтинг diff --git a/mods/sfinv/locale/sfinv.sk.tr b/mods/sfinv/locale/sfinv.sk.tr new file mode 100644 index 00000000..18566f13 --- /dev/null +++ b/mods/sfinv/locale/sfinv.sk.tr @@ -0,0 +1,2 @@ +# textdomain: sfinv +Crafting=Vytváranie diff --git a/mods/sfinv/locale/sfinv.sv.tr b/mods/sfinv/locale/sfinv.sv.tr new file mode 100644 index 00000000..df426b66 --- /dev/null +++ b/mods/sfinv/locale/sfinv.sv.tr @@ -0,0 +1,2 @@ +# textdomain: sfinv +Crafting=Tillverkning diff --git a/mods/sfinv/locale/sfinv.uk.tr b/mods/sfinv/locale/sfinv.uk.tr new file mode 100644 index 00000000..d7c11b2f --- /dev/null +++ b/mods/sfinv/locale/sfinv.uk.tr @@ -0,0 +1,2 @@ +# textdomain: sfinv +Crafting=Крафтинг diff --git a/mods/sfinv/locale/sfinv.zh_CN.tr b/mods/sfinv/locale/sfinv.zh_CN.tr new file mode 100644 index 00000000..3ec3c729 --- /dev/null +++ b/mods/sfinv/locale/sfinv.zh_CN.tr @@ -0,0 +1,2 @@ +# textdomain: sfinv +Crafting=合成 diff --git a/mods/sfinv/locale/sfinv.zh_TW.tr b/mods/sfinv/locale/sfinv.zh_TW.tr new file mode 100644 index 00000000..3ec3c729 --- /dev/null +++ b/mods/sfinv/locale/sfinv.zh_TW.tr @@ -0,0 +1,2 @@ +# textdomain: sfinv +Crafting=合成 diff --git a/mods/sfinv/locale/template.txt b/mods/sfinv/locale/template.txt new file mode 100644 index 00000000..ace55196 --- /dev/null +++ b/mods/sfinv/locale/template.txt @@ -0,0 +1,2 @@ +# textdomain: sfinv +Crafting= diff --git a/mods/sfinv/mod.conf b/mods/sfinv/mod.conf new file mode 100644 index 00000000..2934435f --- /dev/null +++ b/mods/sfinv/mod.conf @@ -0,0 +1,2 @@ +name = sfinv +description = Minetest Game mod: sfinv diff --git a/mods/sfinv/textures/sfinv_crafting_arrow.png b/mods/sfinv/textures/sfinv_crafting_arrow.png new file mode 100644 index 00000000..42bba581 Binary files /dev/null and b/mods/sfinv/textures/sfinv_crafting_arrow.png differ diff --git a/mods/signs_lib b/mods/signs_lib new file mode 160000 index 00000000..e66863d1 --- /dev/null +++ b/mods/signs_lib @@ -0,0 +1 @@ +Subproject commit e66863d1156e3e18be915ee4cbf6fc8659b0027b diff --git a/mods/skybox b/mods/skybox new file mode 160000 index 00000000..2e1eab5a --- /dev/null +++ b/mods/skybox @@ -0,0 +1 @@ +Subproject commit 2e1eab5a807bdc5cec44904f0fad643d8268ffdd diff --git a/mods/smartshop/Readme.txt b/mods/smartshop/Readme.txt new file mode 100644 index 00000000..e203519b --- /dev/null +++ b/mods/smartshop/Readme.txt @@ -0,0 +1,14 @@ +Licenses: code LGPL 2.1 media CC BY-SA 3.0 +Version: 1r +Name: smartshop +Created by: UjEdwin + + +Like the title says, this is a smart and easy shop, that will also fit everywhere. + +it is a mix of a vending machine, a shop, item frames and light. + +You can toogle it unlimited or limited if you have give or creative +(unlimited will not take or add stuff to its inventory) + +It also works with pipeworks \ No newline at end of file diff --git a/mods/smartshop/depends.txt b/mods/smartshop/depends.txt new file mode 100644 index 00000000..4ad96d51 --- /dev/null +++ b/mods/smartshop/depends.txt @@ -0,0 +1 @@ +default diff --git a/mods/smartshop/init.lua b/mods/smartshop/init.lua new file mode 100644 index 00000000..6e1d85f4 --- /dev/null +++ b/mods/smartshop/init.lua @@ -0,0 +1,267 @@ +smartshop={user={},tmp={},dir={{x=0,y=0,z=-1},{x=-1,y=0,z=0},{x=0,y=0,z=1},{x=1,y=0,z=0}},dpos={ +{{x=0.2,y=0.2,z=0},{x=-0.2,y=0.2,z=0},{x=0.2,y=-0.2,z=0},{x=-0.2,y=-0.2,z=0}}, +{{x=0,y=0.2,z=0.2},{x=0,y=0.2,z=-0.2},{x=0,y=-0.2,z=0.2},{x=0,y=-0.2,z=-0.2}}, +{{x=-0.2,y=0.2,z=0},{x=0.2,y=0.2,z=0},{x=-0.2,y=-0.2,z=0},{x=0.2,y=-0.2,z=0}}, +{{x=0,y=0.2,z=-0.2},{x=0,y=0.2,z=0.2},{x=0,y=-0.2,z=-0.2},{x=0,y=-0.2,z=0.2}}} +} + +minetest.register_craft({ + output = "smartshop:shop", + recipe = { + {"default:chest_locked", "default:chest_locked", "default:chest_locked"}, + {"default:sign_wall_wood", "default:chest_locked", "default:sign_wall_wood"}, + {"default:sign_wall_wood", "default:torch", "default:sign_wall_wood"}, + } +}) + +smartshop.update=function(pos,stat) +--clear + local spos=minetest.pos_to_string(pos) + for _, ob in ipairs(minetest.env:get_objects_inside_radius(pos, 2)) do + if ob and ob:get_luaentity() and ob:get_luaentity().smartshop and ob:get_luaentity().pos==spos then + ob:remove() + end + end + if stat=="clear" then return end +--update + local meta=minetest.get_meta(pos) + local inv = meta:get_inventory() + local node=minetest.get_node(pos) + local dp = smartshop.dir[node.param2+1] + if not dp then return end + pos.x = pos.x + dp.x*0.01 + pos.y = pos.y + dp.y*6.5/16 + pos.z = pos.z + dp.z*0.01 + for i=1,4,1 do + local item=inv:get_stack("give" .. i,1):get_name() + local pos2=smartshop.dpos[node.param2+1][i] + if item~="" then + smartshop.tmp.item=item + smartshop.tmp.pos=spos + local e = minetest.env:add_entity({x=pos.x+pos2.x,y=pos.y+pos2.y,z=pos.z+pos2.z},"smartshop:item") + e:setyaw(math.pi*2 - node.param2 * math.pi/2) + end + end +end + + +minetest.register_entity("smartshop:item",{ + hp_max = 1, + visual="wielditem", + visual_size={x=.20,y=.20}, + collisionbox = {0,0,0,0,0,0}, + physical=false, + textures={"air"}, + smartshop=true, + on_activate = function(self, staticdata) + if smartshop.tmp.item ~= nil then + self.item=smartshop.tmp.item + self.pos=smartshop.tmp.pos + smartshop.tmp={} + else + if staticdata ~= nil and staticdata ~= "" then + local data = staticdata:split(';') + if data and data[1] and data[2] then + self.item = data[1] + self.pos = data[2] + end + end + end + if self.item ~= nil then + self.object:set_properties({textures={self.item}}) + else + self.object:remove() + end + end, + get_staticdata = function(self) + if self.item ~= nil and self.pos ~= nil then + return self.item .. ';' .. self.pos + end + return "" + end, +}) + + +smartshop.showform=function(pos,player,re) + local meta=minetest.get_meta(pos) + local creative=meta:get_int("creative") + local inv = meta:get_inventory() + local gui="" + local spos=pos.x .. "," .. pos.y .. "," .. pos.z + local owner=meta:get_string("owner")==player:get_player_name() + if re then owner=false end + smartshop.user[player:get_player_name()]=pos + if owner then + gui="" + .."size[8,10]" + .."button_exit[6,0;1.5,1;customer;Customer]" + .."label[0,0.2;Item:]" + .."label[0,1.2;Price:]" + .."list[nodemeta:" .. spos .. ";give1;2,0;1,1;]" + .."list[nodemeta:" .. spos .. ";pay1;2,1;1,1;]" + .."list[nodemeta:" .. spos .. ";give2;3,0;1,1;]" + .."list[nodemeta:" .. spos .. ";pay2;3,1;1,1;]" + .."list[nodemeta:" .. spos .. ";give3;4,0;1,1;]" + .."list[nodemeta:" .. spos .. ";pay3;4,1;1,1;]" + .."list[nodemeta:" .. spos .. ";give4;5,0;1,1;]" + .."list[nodemeta:" .. spos .. ";pay4;5,1;1,1;]" + if creative==1 then + gui=gui .."label[0.5,-0.4;Your stock is unlimeted becaouse you have creative or give]" + .."button[6,1;2.2,1;tooglelime;Toogle lime]" + end + gui=gui + .."list[nodemeta:" .. spos .. ";main;0,2;8,4;]" + .."list[current_player;main;0,6.2;8,4;]" + .."listring[nodemeta:" .. spos .. ";main]" + .."listring[current_player;main]" + else + gui="" + .."size[8,6]" + .."list[current_player;main;0,2.2;8,4;]" + .."label[0,0.2;Item:]" + .."label[0,1.2;Price:]" + .."list[nodemeta:" .. spos .. ";give1;2,0;1,1;]" + .."item_image_button[2,1;1,1;".. inv:get_stack("pay1",1):get_name() ..";buy1;\n\n\b\b\b\b\b" .. inv:get_stack("pay1",1):get_count() .."]" + .."list[nodemeta:" .. spos .. ";give2;3,0;1,1;]" + .."item_image_button[3,1;1,1;".. inv:get_stack("pay2",1):get_name() ..";buy2;\n\n\b\b\b\b\b" .. inv:get_stack("pay2",1):get_count() .."]" + .."list[nodemeta:" .. spos .. ";give3;4,0;1,1;]" + .."item_image_button[4,1;1,1;".. inv:get_stack("pay3",1):get_name() ..";buy3;\n\n\b\b\b\b\b" .. inv:get_stack("pay3",1):get_count() .."]" + .."list[nodemeta:" .. spos .. ";give4;5,0;1,1;]" + .."item_image_button[5,1;1,1;".. inv:get_stack("pay4",1):get_name() ..";buy4;\n\n\b\b\b\b\b" .. inv:get_stack("pay4",1):get_count() .."]" + end + minetest.after((0.1), function(gui) + return minetest.show_formspec(player:get_player_name(), "smartshop.showform",gui) + end, gui) +end +minetest.register_on_player_receive_fields(function(player, form, pressed) + if form=="smartshop.showform" then + if pressed.customer then + return smartshop.showform(smartshop.user[player:get_player_name()],player,true) + elseif pressed.tooglelime then + local pos=smartshop.user[player:get_player_name()] + local meta=minetest.get_meta(pos) + local pname=player:get_player_name() + if meta:get_int("type")==0 then + meta:set_int("type",1) + minetest.chat_send_player(pname, "Your stock is limeted") + else + meta:set_int("type",0) + minetest.chat_send_player(pname, "Your stock is unlimeted") + end + elseif not pressed.quit then + local n=1 + for i=1,4,1 do + n=i + if pressed["buy" .. i] then break end + end + local pos=smartshop.user[player:get_player_name()] + local meta=minetest.get_meta(pos) + local type=meta:get_int("type") + local inv = meta:get_inventory() + local pinv=player:get_inventory() + local pname=player:get_player_name() + if pressed["buy" .. n] then + local name=inv:get_stack("give" .. n,1):get_name() + local stack=name .." ".. inv:get_stack("give" .. n,1):get_count() + local pay=inv:get_stack("pay" .. n,1):get_name() .." ".. inv:get_stack("pay" .. n,1):get_count() + if name~="" then + if type==1 and inv:room_for_item("main", pay)==false then minetest.chat_send_player(pname, "Error: The owners stock is full, cant receive, exchange aborted.") return end + if type==1 and inv:contains_item("main", stack)==false then minetest.chat_send_player(pname, "Error: The owners stock is end.") return end + if not pinv:contains_item("main", pay) then minetest.chat_send_player(pname, "Error: You dont have enough in your inventory to buy this, exchange aborted.") return end + if not pinv:room_for_item("main", stack) then minetest.chat_send_player(pname, "Error: Your inventory is full, exchange aborted.") return end + pinv:remove_item("main", pay) + pinv:add_item("main", stack) + if type==1 then + inv:remove_item("main", stack) + inv:add_item("main", pay) + end + end + end + else + if smartshop.user[player:get_player_name()] then + local meta=minetest.get_meta(smartshop.user[player:get_player_name()]) + if meta:get_string("owner")==player:get_player_name() then + smartshop.update(smartshop.user[player:get_player_name()],"update") + end + end + smartshop.user[player:get_player_name()]=nil + end + end +end) + +minetest.register_node("smartshop:shop", { + description = "Smartshop", + tiles = {"default_chest_top.png^[colorize:#ffffff77^default_obsidian_glass.png"}, + groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1,tubedevice = 1, tubedevice_receiver = 1}, + drawtype="nodebox", + node_box = {type="fixed",fixed={-0.5,-0.5,-0.0,0.5,0.5,0.5}}, + paramtype2="facedir", + paramtype = "light", + sunlight_propagates = true, + light_source = 10, + tube = {insert_object = function(pos, node, stack, direction) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local added = inv:add_item("main", stack) + return added + end, + can_insert = function(pos, node, stack, direction) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + return inv:room_for_item("main", stack) + end, + input_inventory = "main", + connect_sides = {left = 1, right = 1, front = 1, back = 1, top = 1, bottom = 1}}, +after_place_node = function(pos, placer) + local meta=minetest.get_meta(pos) + meta:set_string("owner",placer:get_player_name()) + meta:set_string("infotext", "Shop by: " .. placer:get_player_name()) + meta:set_int("type",1) + if minetest.check_player_privs(placer:get_player_name(), {creative=true}) or minetest.check_player_privs(placer:get_player_name(), {give=true}) then + meta:set_int("creative",1) + meta:set_int("type",0) + end + end, +on_construct = function(pos) + local meta=minetest.get_meta(pos) + meta:set_int("state", 0) + meta:get_inventory():set_size("main", 32) + meta:get_inventory():set_size("give1", 1) + meta:get_inventory():set_size("pay1", 1) + meta:get_inventory():set_size("give2", 1) + meta:get_inventory():set_size("pay2", 1) + meta:get_inventory():set_size("give3", 1) + meta:get_inventory():set_size("pay3", 1) + meta:get_inventory():set_size("give4", 1) + meta:get_inventory():set_size("pay4", 1) + end, +on_rightclick = function(pos, node, player, itemstack, pointed_thing) + smartshop.showform(pos,player) + end, +allow_metadata_inventory_put = function(pos, listname, index, stack, player) + if minetest.get_meta(pos):get_string("owner")==player:get_player_name() then + return stack:get_count() + end + return 0 + end, +allow_metadata_inventory_take = function(pos, listname, index, stack, player) + if minetest.get_meta(pos):get_string("owner")==player:get_player_name() then + return stack:get_count() + end + return 0 + end, +allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + if minetest.get_meta(pos):get_string("owner")==player:get_player_name() then + return count + end + return 0 + end, +can_dig = function(pos, player) + local meta=minetest.get_meta(pos) + local inv=meta:get_inventory() + if (meta:get_string("owner")==player:get_player_name() and inv:is_empty("main") and inv:is_empty("pay1") and inv:is_empty("pay2") and inv:is_empty("pay3") and inv:is_empty("pay4") and inv:is_empty("give1") and inv:is_empty("give2") and inv:is_empty("give3") and inv:is_empty("give4")) or meta:get_string("owner")=="" then + smartshop.update(pos,"clear") + return true + end + end, +}) \ No newline at end of file diff --git a/mods/sneak_glitch b/mods/sneak_glitch new file mode 160000 index 00000000..3c230732 --- /dev/null +++ b/mods/sneak_glitch @@ -0,0 +1 @@ +Subproject commit 3c230732c78fc4a8e203356ca5ddf66241506fdf diff --git a/mods/spawn/README.txt b/mods/spawn/README.txt new file mode 100644 index 00000000..fc16c2a6 --- /dev/null +++ b/mods/spawn/README.txt @@ -0,0 +1,7 @@ +Minetest Game mod: spawn +======================== +See license.txt for license information. + +Authors of source code +---------------------- +paramat (MIT) diff --git a/mods/spawn/init.lua b/mods/spawn/init.lua new file mode 100644 index 00000000..12c957f9 --- /dev/null +++ b/mods/spawn/init.lua @@ -0,0 +1,158 @@ +-- spawn/init.lua + +-- Disable by mapgen, setting or if 'static_spawnpoint' is set +-------------------------------------------------------------- + +local mg_name = minetest.get_mapgen_setting("mg_name") +if mg_name == "v6" or mg_name == "singlenode" or + minetest.settings:get("static_spawnpoint") or + minetest.settings:get_bool("engine_spawn") then + return +end + + +-- Parameters +------------- + +-- Resolution of search grid in nodes. +local res = 64 +-- Number of points checked in the square search grid (edge * edge). +local checks = 128 * 128 +-- Starting point for biome checks. This also sets the y co-ordinate for all +-- points checked, so the suitable biomes must be active at this y. +local pos = {x = 0, y = 8, z = 0} + + +-- Table of suitable biomes + +local biome_ids = { + minetest.get_biome_id("taiga"), + minetest.get_biome_id("coniferous_forest"), + minetest.get_biome_id("deciduous_forest"), + minetest.get_biome_id("grassland"), + minetest.get_biome_id("savanna"), +} + +-- End of parameters +-------------------- + + +-- Direction table + +local dirs = { + {x = 0, y = 0, z = 1}, + {x = -1, y = 0, z = 0}, + {x = 0, y = 0, z = -1}, + {x = 1, y = 0, z = 0}, +} + + +-- Initial variables + +local edge_len = 1 +local edge_dist = 0 +local dir_step = 0 +local dir_ind = 1 +local searched = false +local success = false +local spawn_pos = {} + + +-- Get world 'mapgen_limit' and 'chunksize' to calculate 'spawn_limit'. +-- This accounts for how mapchunks are not generated if they or their shell exceed +-- 'mapgen_limit'. + +local mapgen_limit = tonumber(minetest.get_mapgen_setting("mapgen_limit")) +local chunksize = tonumber(minetest.get_mapgen_setting("chunksize")) +local spawn_limit = math.max(mapgen_limit - (chunksize + 1) * 16, 0) + + +--Functions +----------- + +-- Get next position on square search spiral + +local function next_pos() + if edge_dist == edge_len then + edge_dist = 0 + dir_ind = dir_ind + 1 + if dir_ind == 5 then + dir_ind = 1 + end + dir_step = dir_step + 1 + edge_len = math.floor(dir_step / 2) + 1 + end + + local dir = dirs[dir_ind] + local move = vector.multiply(dir, res) + + edge_dist = edge_dist + 1 + + return vector.add(pos, move) +end + + +-- Spawn position search + +local function search() + for iter = 1, checks do + local biome_data = minetest.get_biome_data(pos) + -- Sometimes biome_data is nil + local biome = biome_data and biome_data.biome + for id_ind = 1, #biome_ids do + local biome_id = biome_ids[id_ind] + if biome == biome_id then + local spawn_y = minetest.get_spawn_level(pos.x, pos.z) + if spawn_y then + spawn_pos = {x = pos.x, y = spawn_y, z = pos.z} + return true + end + end + end + + pos = next_pos() + -- Check for position being outside world edge + if math.abs(pos.x) > spawn_limit or math.abs(pos.z) > spawn_limit then + return false + end + end + + return false +end + + +-- On new player spawn and player respawn + +-- Search for spawn position once per server session. If successful, store +-- position and reposition players, otherwise leave them at engine spawn +-- position. + +local function on_spawn(player) + if not searched then + success = search() + searched = true + end + if success then + player:set_pos(spawn_pos) + end + return success +end + +minetest.register_on_newplayer(function(player) + on_spawn(player) +end) + +local enable_bed_respawn = minetest.settings:get_bool("enable_bed_respawn") +if enable_bed_respawn == nil then + enable_bed_respawn = true +end + +minetest.register_on_respawnplayer(function(player) + -- Avoid respawn conflict with beds mod + if beds and enable_bed_respawn and + beds.spawn[player:get_player_name()] then + return + end + + return on_spawn(player) +end) diff --git a/mods/spawn/license.txt b/mods/spawn/license.txt new file mode 100644 index 00000000..a466aabd --- /dev/null +++ b/mods/spawn/license.txt @@ -0,0 +1,24 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2018 paramat + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT diff --git a/mods/spawn/mod.conf b/mods/spawn/mod.conf new file mode 100644 index 00000000..ec3d5648 --- /dev/null +++ b/mods/spawn/mod.conf @@ -0,0 +1,4 @@ +name = spawn +description = Minetest Game mod: spawn +depends = default +optional_depends = beds diff --git a/mods/spawners b/mods/spawners new file mode 160000 index 00000000..2e0203c2 --- /dev/null +++ b/mods/spawners @@ -0,0 +1 @@ +Subproject commit 2e0203c2f11520682c2b664d322f1cbfd87f12bd diff --git a/mods/stairs/README.txt b/mods/stairs/README.txt new file mode 100644 index 00000000..26317f7f --- /dev/null +++ b/mods/stairs/README.txt @@ -0,0 +1,27 @@ +Minetest Game mod: stairs +========================= +See license.txt for license information. + +Authors of source code +---------------------- +Originally by Kahrl (LGPLv2.1+) and +celeron55, Perttu Ahola (LGPLv2.1+) +Various Minetest developers and contributors (LGPLv2.1+) + +Authors of media (textures) +--------------------------- + +Textures +-------- +Copyright (c) 2018 Shara RedCat (CC BY-SA 3.0): + Derived from a texture by PilzAdam (CC BY-SA 3.0): + stairs_obsidian_glass_outer_stairside.png + stairs_obsidian_glass_stairside.png + +Copyright (c) 2018 TumeniNodes (CC BY-SA 3.0): + Derived from a texture by celeron55 (CC BY-SA 3.0) and + converted to bright white by Krock (CC BY-SA 3.0): + stairs_glass_stairside.png + stairs_glass_split.png + Derived from a texture by PilzAdam (CC BY-SA 3.0): + stairs_obsidian_glass_split.png diff --git a/mods/stairs/init.lua b/mods/stairs/init.lua new file mode 100644 index 00000000..bb307f6e --- /dev/null +++ b/mods/stairs/init.lua @@ -0,0 +1,1153 @@ +-- stairs/init.lua + +-- Minetest 0.4 mod: stairs +-- See README.txt for licensing and other information. + + +-- Global namespace for functions + +stairs = {} + +-- Load support for MT game translation. +local S = minetest.get_translator("stairs") +-- Same as S, but will be ignored by translation file update scripts +local T = S + + +-- Register aliases for new pine node names + +minetest.register_alias("stairs:stair_pinewood", "stairs:stair_pine_wood") +minetest.register_alias("stairs:slab_pinewood", "stairs:slab_pine_wood") + +-- https://git.tchncs.de/Illuna-Minetest/illuna/issues/4 + +minetest.register_alias("moretrees:slab_acacia_planks", "stairs:slab_acacia_wood") + +-- Get setting for replace ABM + +local replace = minetest.settings:get_bool("enable_stairs_replace_abm") + +local function rotate_and_place(itemstack, placer, pointed_thing) + local p0 = pointed_thing.under + local p1 = pointed_thing.above + local param2 = 0 + + if placer then + local placer_pos = placer:get_pos() + if placer_pos then + local diff = vector.subtract(p1, placer_pos) + param2 = minetest.dir_to_facedir(diff) + -- The player places a node on the side face of the node he is standing on + if p0.y == p1.y and math.abs(diff.x) <= 0.5 and math.abs(diff.z) <= 0.5 and diff.y < 0 then + -- reverse node direction + param2 = (param2 + 2) % 4 + end + end + + local finepos = minetest.pointed_thing_to_face_pos(placer, pointed_thing) + local fpos = finepos.y % 1 + + if p0.y - 1 == p1.y or (fpos > 0 and fpos < 0.5) + or (fpos < -0.5 and fpos > -0.999999999) then + param2 = param2 + 20 + if param2 == 21 then + param2 = 23 + elseif param2 == 23 then + param2 = 21 + end + end + end + return minetest.item_place(itemstack, placer, pointed_thing, param2) +end + +local function warn_if_exists(nodename) + if minetest.registered_nodes[nodename] then + minetest.log("warning", "Overwriting stairs node: " .. nodename) + end +end + +-- get node settings to use for stairs +local function get_node_vars(nodename) + + local def = minetest.registered_nodes[nodename] + + if def then + return def.light_source, def.use_texture_alpha, def.sunlight_propagates + end + + return nil, nil, nil +end + +-- Register stair +-- Node will be called stairs:stair_ + +function stairs.register_stair(subname, recipeitem, groups, images, description, + sounds, worldaligntex) + local light_source, texture_alpha, sunlight = get_node_vars(recipeitem) + + -- Set backface culling and world-aligned textures + local stair_images = {} + for i, image in ipairs(images) do + if type(image) == "string" then + stair_images[i] = { + name = image, + backface_culling = true, + } + if worldaligntex then + stair_images[i].align_style = "world" + end + else + stair_images[i] = table.copy(image) + if stair_images[i].backface_culling == nil then + stair_images[i].backface_culling = true + end + if worldaligntex and stair_images[i].align_style == nil then + stair_images[i].align_style = "world" + end + end + end + local new_groups = table.copy(groups) + new_groups.stair = 1 + warn_if_exists("stairs:stair_" .. subname) + minetest.register_node(":stairs:stair_" .. subname, { + description = description, + drawtype = "nodebox", + tiles = stair_images, + use_texture_alpha = texture_alpha, + sunlight_propagates = sunlight, + light_source = light_source, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + groups = new_groups, + sounds = sounds, + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0.0, 0.5}, + {-0.5, 0.0, 0.0, 0.5, 0.5, 0.5}, + }, + }, + on_place = function(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" then + return itemstack + end + + return rotate_and_place(itemstack, placer, pointed_thing) + end, + }) + + -- for replace ABM + if replace then + minetest.register_node(":stairs:stair_" .. subname .. "upside_down", { + replace_name = "stairs:stair_" .. subname, + groups = {slabs_replace = 1}, + }) + end + + if recipeitem then + -- Recipe matches appearence in inventory + minetest.register_craft({ + output = "stairs:stair_" .. subname .. " 8", + recipe = { + {"", "", recipeitem}, + {"", recipeitem, recipeitem}, + {recipeitem, recipeitem, recipeitem}, + }, + }) + + -- Use stairs to craft full blocks again (1:1) + minetest.register_craft({ + output = recipeitem .. " 3", + recipe = { + {"stairs:stair_" .. subname, "stairs:stair_" .. subname}, + {"stairs:stair_" .. subname, "stairs:stair_" .. subname}, + }, + }) + + -- Fuel + local baseburntime = minetest.get_craft_result({ + method = "fuel", + width = 1, + items = {recipeitem} + }).time + if baseburntime > 0 then + minetest.register_craft({ + type = "fuel", + recipe = "stairs:stair_" .. subname, + burntime = math.floor(baseburntime * 0.75), + }) + end + end +end + + +-- Register slab +-- Node will be called stairs:slab_ + +function stairs.register_slab(subname, recipeitem, groups, images, description, + sounds, worldaligntex) + local light_source, texture_alpha, sunlight = get_node_vars(recipeitem) + + -- Set world-aligned textures + local slab_images = {} + for i, image in ipairs(images) do + if type(image) == "string" then + slab_images[i] = { + name = image, + } + if worldaligntex then + slab_images[i].align_style = "world" + end + else + slab_images[i] = table.copy(image) + if worldaligntex and image.align_style == nil then + slab_images[i].align_style = "world" + end + end + end + local new_groups = table.copy(groups) + new_groups.slab = 1 + warn_if_exists("stairs:slab_" .. subname) + minetest.register_node(":stairs:slab_" .. subname, { + description = description, + drawtype = "nodebox", + tiles = slab_images, + use_texture_alpha = texture_alpha, + sunlight_propagates = sunlight, + light_source = light_source, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + groups = new_groups, + sounds = sounds, + node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, + }, + on_place = function(itemstack, placer, pointed_thing) + local under = minetest.get_node(pointed_thing.under) + local wield_item = itemstack:get_name() + local player_name = placer and placer:get_player_name() or "" + + if under and under.name:find("^stairs:slab_") then + -- place slab using under node orientation + local dir = minetest.dir_to_facedir(vector.subtract( + pointed_thing.above, pointed_thing.under), true) + + local p2 = under.param2 + + -- Placing a slab on an upside down slab should make it right-side up. + if p2 >= 20 and dir == 8 then + p2 = p2 - 20 + -- same for the opposite case: slab below normal slab + elseif p2 <= 3 and dir == 4 then + p2 = p2 + 20 + end + + -- else attempt to place node with proper param2 + minetest.item_place_node(ItemStack(wield_item), placer, pointed_thing, p2) + if not minetest.is_creative_enabled(player_name) then + itemstack:take_item() + end + return itemstack + else + return rotate_and_place(itemstack, placer, pointed_thing) + end + end, + }) + + -- for replace ABM + if replace then + minetest.register_node(":stairs:slab_" .. subname .. "upside_down", { + replace_name = "stairs:slab_".. subname, + groups = {slabs_replace = 1}, + }) + end + + if recipeitem then + minetest.register_craft({ + output = "stairs:slab_" .. subname .. " 6", + recipe = { + {recipeitem, recipeitem, recipeitem}, + }, + }) + + -- Use 2 slabs to craft a full block again (1:1) + minetest.register_craft({ + output = recipeitem, + recipe = { + {"stairs:slab_" .. subname}, + {"stairs:slab_" .. subname}, + }, + }) + + -- Fuel + local baseburntime = minetest.get_craft_result({ + method = "fuel", + width = 1, + items = {recipeitem} + }).time + if baseburntime > 0 then + minetest.register_craft({ + type = "fuel", + recipe = "stairs:slab_" .. subname, + burntime = math.floor(baseburntime * 0.5), + }) + end + end +end + + +-- Optionally replace old "upside_down" nodes with new param2 versions. +-- Disabled by default. + +if replace then + minetest.register_abm({ + label = "Slab replace", + nodenames = {"group:slabs_replace"}, + interval = 16, + chance = 1, + action = function(pos, node) + node.name = minetest.registered_nodes[node.name].replace_name + node.param2 = node.param2 + 20 + if node.param2 == 21 then + node.param2 = 23 + elseif node.param2 == 23 then + node.param2 = 21 + end + minetest.set_node(pos, node) + end, + }) +end + + +-- Register inner stair +-- Node will be called stairs:stair_inner_ + +function stairs.register_stair_inner(subname, recipeitem, groups, images, + description, sounds, worldaligntex, full_description) + local light_source, texture_alpha, sunlight = get_node_vars(recipeitem) + + -- Set backface culling and world-aligned textures + local stair_images = {} + for i, image in ipairs(images) do + if type(image) == "string" then + stair_images[i] = { + name = image, + backface_culling = true, + } + if worldaligntex then + stair_images[i].align_style = "world" + end + else + stair_images[i] = table.copy(image) + if stair_images[i].backface_culling == nil then + stair_images[i].backface_culling = true + end + if worldaligntex and stair_images[i].align_style == nil then + stair_images[i].align_style = "world" + end + end + end + local new_groups = table.copy(groups) + new_groups.stair = 1 + if full_description then + description = full_description + else + description = "Inner " .. description + end + warn_if_exists("stairs:stair_inner_" .. subname) + minetest.register_node(":stairs:stair_inner_" .. subname, { + description = description, + drawtype = "nodebox", + tiles = stair_images, + use_texture_alpha = texture_alpha, + sunlight_propagates = sunlight, + light_source = light_source, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + groups = new_groups, + sounds = sounds, + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0.0, 0.5}, + {-0.5, 0.0, 0.0, 0.5, 0.5, 0.5}, + {-0.5, 0.0, -0.5, 0.0, 0.5, 0.0}, + }, + }, + on_place = function(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" then + return itemstack + end + + return rotate_and_place(itemstack, placer, pointed_thing) + end, + }) + + if recipeitem then + minetest.register_craft({ + output = "stairs:stair_inner_" .. subname .. " 7", + recipe = { + {"", recipeitem, ""}, + {recipeitem, "", recipeitem}, + {recipeitem, recipeitem, recipeitem}, + }, + }) + + -- Fuel + local baseburntime = minetest.get_craft_result({ + method = "fuel", + width = 1, + items = {recipeitem} + }).time + if baseburntime > 0 then + minetest.register_craft({ + type = "fuel", + recipe = "stairs:stair_inner_" .. subname, + burntime = math.floor(baseburntime * 0.875), + }) + end + end +end + + +-- Register outer stair +-- Node will be called stairs:stair_outer_ + +function stairs.register_stair_outer(subname, recipeitem, groups, images, + description, sounds, worldaligntex, full_description) + local light_source, texture_alpha, sunlight = get_node_vars(recipeitem) + + -- Set backface culling and world-aligned textures + local stair_images = {} + for i, image in ipairs(images) do + if type(image) == "string" then + stair_images[i] = { + name = image, + backface_culling = true, + } + if worldaligntex then + stair_images[i].align_style = "world" + end + else + stair_images[i] = table.copy(image) + if stair_images[i].backface_culling == nil then + stair_images[i].backface_culling = true + end + if worldaligntex and stair_images[i].align_style == nil then + stair_images[i].align_style = "world" + end + end + end + local new_groups = table.copy(groups) + new_groups.stair = 1 + if full_description then + description = full_description + else + description = "Outer " .. description + end + warn_if_exists("stairs:stair_outer_" .. subname) + minetest.register_node(":stairs:stair_outer_" .. subname, { + description = description, + drawtype = "nodebox", + tiles = stair_images, + use_texture_alpha = texture_alpha, + sunlight_propagates = sunlight, + light_source = light_source, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + groups = new_groups, + sounds = sounds, + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0.0, 0.5}, + {-0.5, 0.0, 0.0, 0.0, 0.5, 0.5}, + }, + }, + on_place = function(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" then + return itemstack + end + + return rotate_and_place(itemstack, placer, pointed_thing) + end, + }) + + if recipeitem then + minetest.register_craft({ + output = "stairs:stair_outer_" .. subname .. " 6", + recipe = { + {"", recipeitem, ""}, + {recipeitem, recipeitem, recipeitem}, + }, + }) + + -- Fuel + local baseburntime = minetest.get_craft_result({ + method = "fuel", + width = 1, + items = {recipeitem} + }).time + if baseburntime > 0 then + minetest.register_craft({ + type = "fuel", + recipe = "stairs:stair_outer_" .. subname, + burntime = math.floor(baseburntime * 0.625), + }) + end + end +end + + +-- Stair/slab registration function. +-- Nodes will be called stairs:{stair,slab}_ + +function stairs.register_stair_and_slab(subname, recipeitem, groups, images, + desc_stair, desc_slab, sounds, worldaligntex, + desc_stair_inner, desc_stair_outer) + stairs.register_stair(subname, recipeitem, groups, images, desc_stair, + sounds, worldaligntex) + stairs.register_stair_inner(subname, recipeitem, groups, images, + desc_stair, sounds, worldaligntex, desc_stair_inner) + stairs.register_stair_outer(subname, recipeitem, groups, images, + desc_stair, sounds, worldaligntex, desc_stair_outer) + stairs.register_slab(subname, recipeitem, groups, images, desc_slab, + sounds, worldaligntex) +end + +-- Local function so we can apply translations +local function my_register_stair_and_slab(subname, recipeitem, groups, images, + desc_stair, desc_slab, sounds, worldaligntex) + stairs.register_stair(subname, recipeitem, groups, images, S(desc_stair), + sounds, worldaligntex) + stairs.register_stair_inner(subname, recipeitem, groups, images, "", + sounds, worldaligntex, T("Inner " .. desc_stair)) + stairs.register_stair_outer(subname, recipeitem, groups, images, "", + sounds, worldaligntex, T("Outer " .. desc_stair)) + stairs.register_slab(subname, recipeitem, groups, images, S(desc_slab), + sounds, worldaligntex) +end + + +-- Register default stairs and slabs + +my_register_stair_and_slab( + "wood", + "default:wood", + {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + {"default_wood.png"}, + "Wooden Stair", + "Wooden Slab", + default.node_sound_wood_defaults(), + false +) + +my_register_stair_and_slab( + "junglewood", + "default:junglewood", + {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + {"default_junglewood.png"}, + "Jungle Wood Stair", + "Jungle Wood Slab", + default.node_sound_wood_defaults(), + false +) + +my_register_stair_and_slab( + "pine_wood", + "default:pine_wood", + {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}, + {"default_pine_wood.png"}, + "Pine Wood Stair", + "Pine Wood Slab", + default.node_sound_wood_defaults(), + false +) + +my_register_stair_and_slab( + "acacia_wood", + "default:acacia_wood", + {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + {"default_acacia_wood.png"}, + "Acacia Wood Stair", + "Acacia Wood Slab", + default.node_sound_wood_defaults(), + false +) + +my_register_stair_and_slab( + "aspen_wood", + "default:aspen_wood", + {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}, + {"default_aspen_wood.png"}, + "Aspen Wood Stair", + "Aspen Wood Slab", + default.node_sound_wood_defaults(), + false +) + +my_register_stair_and_slab( + "stone", + "default:stone", + {cracky = 3}, + {"default_stone.png"}, + "Stone Stair", + "Stone Slab", + default.node_sound_stone_defaults(), + true +) + +my_register_stair_and_slab( + "cobble", + "default:cobble", + {cracky = 3}, + {"default_cobble.png"}, + "Cobblestone Stair", + "Cobblestone Slab", + default.node_sound_stone_defaults(), + true +) + +my_register_stair_and_slab( + "mossycobble", + "default:mossycobble", + {cracky = 3}, + {"default_mossycobble.png"}, + "Mossy Cobblestone Stair", + "Mossy Cobblestone Slab", + default.node_sound_stone_defaults(), + true +) + +my_register_stair_and_slab( + "stonebrick", + "default:stonebrick", + {cracky = 2}, + {"default_stone_brick.png"}, + "Stone Brick Stair", + "Stone Brick Slab", + default.node_sound_stone_defaults(), + false +) + +my_register_stair_and_slab( + "stone_block", + "default:stone_block", + {cracky = 2}, + {"default_stone_block.png"}, + "Stone Block Stair", + "Stone Block Slab", + default.node_sound_stone_defaults(), + true +) + +my_register_stair_and_slab( + "desert_stone", + "default:desert_stone", + {cracky = 3}, + {"default_desert_stone.png"}, + "Desert Stone Stair", + "Desert Stone Slab", + default.node_sound_stone_defaults(), + true +) + +my_register_stair_and_slab( + "desert_cobble", + "default:desert_cobble", + {cracky = 3}, + {"default_desert_cobble.png"}, + "Desert Cobblestone Stair", + "Desert Cobblestone Slab", + default.node_sound_stone_defaults(), + true +) + +my_register_stair_and_slab( + "desert_stonebrick", + "default:desert_stonebrick", + {cracky = 2}, + {"default_desert_stone_brick.png"}, + "Desert Stone Brick Stair", + "Desert Stone Brick Slab", + default.node_sound_stone_defaults(), + false +) + +my_register_stair_and_slab( + "desert_stone_block", + "default:desert_stone_block", + {cracky = 2}, + {"default_desert_stone_block.png"}, + "Desert Stone Block Stair", + "Desert Stone Block Slab", + default.node_sound_stone_defaults(), + true +) + +my_register_stair_and_slab( + "sandstone", + "default:sandstone", + {crumbly = 1, cracky = 3}, + {"default_sandstone.png"}, + "Sandstone Stair", + "Sandstone Slab", + default.node_sound_stone_defaults(), + true +) + +my_register_stair_and_slab( + "sandstonebrick", + "default:sandstonebrick", + {cracky = 2}, + {"default_sandstone_brick.png"}, + "Sandstone Brick Stair", + "Sandstone Brick Slab", + default.node_sound_stone_defaults(), + false +) + +my_register_stair_and_slab( + "sandstone_block", + "default:sandstone_block", + {cracky = 2}, + {"default_sandstone_block.png"}, + "Sandstone Block Stair", + "Sandstone Block Slab", + default.node_sound_stone_defaults(), + true +) + +my_register_stair_and_slab( + "desert_sandstone", + "default:desert_sandstone", + {crumbly = 1, cracky = 3}, + {"default_desert_sandstone.png"}, + "Desert Sandstone Stair", + "Desert Sandstone Slab", + default.node_sound_stone_defaults(), + true +) + +my_register_stair_and_slab( + "desert_sandstone_brick", + "default:desert_sandstone_brick", + {cracky = 2}, + {"default_desert_sandstone_brick.png"}, + "Desert Sandstone Brick Stair", + "Desert Sandstone Brick Slab", + default.node_sound_stone_defaults(), + false +) + +my_register_stair_and_slab( + "desert_sandstone_block", + "default:desert_sandstone_block", + {cracky = 2}, + {"default_desert_sandstone_block.png"}, + "Desert Sandstone Block Stair", + "Desert Sandstone Block Slab", + default.node_sound_stone_defaults(), + true +) + +my_register_stair_and_slab( + "silver_sandstone", + "default:silver_sandstone", + {crumbly = 1, cracky = 3}, + {"default_silver_sandstone.png"}, + "Silver Sandstone Stair", + "Silver Sandstone Slab", + default.node_sound_stone_defaults(), + true +) + +my_register_stair_and_slab( + "silver_sandstone_brick", + "default:silver_sandstone_brick", + {cracky = 2}, + {"default_silver_sandstone_brick.png"}, + "Silver Sandstone Brick Stair", + "Silver Sandstone Brick Slab", + default.node_sound_stone_defaults(), + false +) + +my_register_stair_and_slab( + "silver_sandstone_block", + "default:silver_sandstone_block", + {cracky = 2}, + {"default_silver_sandstone_block.png"}, + "Silver Sandstone Block Stair", + "Silver Sandstone Block Slab", + default.node_sound_stone_defaults(), + true +) + +my_register_stair_and_slab( + "obsidian", + "default:obsidian", + {cracky = 1, level = 2}, + {"default_obsidian.png"}, + "Obsidian Stair", + "Obsidian Slab", + default.node_sound_stone_defaults(), + true +) + +my_register_stair_and_slab( + "obsidianbrick", + "default:obsidianbrick", + {cracky = 1, level = 2}, + {"default_obsidian_brick.png"}, + "Obsidian Brick Stair", + "Obsidian Brick Slab", + default.node_sound_stone_defaults(), + false +) + +my_register_stair_and_slab( + "obsidian_block", + "default:obsidian_block", + {cracky = 1, level = 2}, + {"default_obsidian_block.png"}, + "Obsidian Block Stair", + "Obsidian Block Slab", + default.node_sound_stone_defaults(), + true +) + +my_register_stair_and_slab( + "brick", + "default:brick", + {cracky = 3}, + {"default_brick.png"}, + "Brick Stair", + "Brick Slab", + default.node_sound_stone_defaults(), + false +) + +my_register_stair_and_slab( + "steelblock", + "default:steelblock", + {cracky = 1, level = 2}, + {"default_steel_block.png"}, + "Steel Block Stair", + "Steel Block Slab", + default.node_sound_metal_defaults(), + true +) + +my_register_stair_and_slab( + "tinblock", + "default:tinblock", + {cracky = 1, level = 2}, + {"default_tin_block.png"}, + "Tin Block Stair", + "Tin Block Slab", + default.node_sound_metal_defaults(), + true +) + +my_register_stair_and_slab( + "copperblock", + "default:copperblock", + {cracky = 1, level = 2}, + {"default_copper_block.png"}, + "Copper Block Stair", + "Copper Block Slab", + default.node_sound_metal_defaults(), + true +) + +my_register_stair_and_slab( + "bronzeblock", + "default:bronzeblock", + {cracky = 1, level = 2}, + {"default_bronze_block.png"}, + "Bronze Block Stair", + "Bronze Block Slab", + default.node_sound_metal_defaults(), + true +) + +my_register_stair_and_slab( + "goldblock", + "default:goldblock", + {cracky = 1}, + {"default_gold_block.png"}, + "Gold Block Stair", + "Gold Block Slab", + default.node_sound_metal_defaults(), + true +) + +my_register_stair_and_slab( + "ice", + "default:ice", + {cracky = 3, cools_lava = 1, slippery = 3}, + {"default_ice.png"}, + "Ice Stair", + "Ice Slab", + default.node_sound_ice_defaults(), + true +) + +my_register_stair_and_slab( + "snowblock", + "default:snowblock", + {crumbly = 3, cools_lava = 1, snowy = 1}, + {"default_snow.png"}, + "Snow Block Stair", + "Snow Block Slab", + default.node_sound_snow_defaults(), + true +) + +-- Glass stair nodes need to be registered individually to utilize specialized textures. + +stairs.register_stair( + "glass", + "default:glass", + {cracky = 3, oddly_breakable_by_hand = 3}, + {"stairs_glass_split.png", "default_glass.png", + "stairs_glass_stairside.png^[transformFX", "stairs_glass_stairside.png", + "default_glass.png", "stairs_glass_split.png"}, + S("Glass Stair"), + default.node_sound_glass_defaults(), + false +) + +stairs.register_slab( + "glass", + "default:glass", + {cracky = 3, oddly_breakable_by_hand = 3}, + {"default_glass.png", "default_glass.png", "stairs_glass_split.png"}, + S("Glass Slab"), + default.node_sound_glass_defaults(), + false +) + +stairs.register_stair_inner( + "glass", + "default:glass", + {cracky = 3, oddly_breakable_by_hand = 3}, + {"stairs_glass_stairside.png^[transformR270", "default_glass.png", + "stairs_glass_stairside.png^[transformFX", "default_glass.png", + "default_glass.png", "stairs_glass_stairside.png"}, + "", + default.node_sound_glass_defaults(), + false, + S("Inner Glass Stair") +) + +stairs.register_stair_outer( + "glass", + "default:glass", + {cracky = 3, oddly_breakable_by_hand = 3}, + {"stairs_glass_stairside.png^[transformR90", "default_glass.png", + "stairs_glass_outer_stairside.png", "stairs_glass_stairside.png", + "stairs_glass_stairside.png^[transformR90","stairs_glass_outer_stairside.png"}, + "", + default.node_sound_glass_defaults(), + false, + S("Outer Glass Stair") +) + +stairs.register_stair( + "obsidian_glass", + "default:obsidian_glass", + {cracky = 3}, + {"stairs_obsidian_glass_split.png", "default_obsidian_glass.png", + "stairs_obsidian_glass_stairside.png^[transformFX", "stairs_obsidian_glass_stairside.png", + "default_obsidian_glass.png", "stairs_obsidian_glass_split.png"}, + S("Obsidian Glass Stair"), + default.node_sound_glass_defaults(), + false +) + +stairs.register_slab( + "obsidian_glass", + "default:obsidian_glass", + {cracky = 3}, + {"default_obsidian_glass.png", "default_obsidian_glass.png", "stairs_obsidian_glass_split.png"}, + S("Obsidian Glass Slab"), + default.node_sound_glass_defaults(), + false +) + +stairs.register_stair_inner( + "obsidian_glass", + "default:obsidian_glass", + {cracky = 3}, + {"stairs_obsidian_glass_stairside.png^[transformR270", "default_obsidian_glass.png", + "stairs_obsidian_glass_stairside.png^[transformFX", "default_obsidian_glass.png", + "default_obsidian_glass.png", "stairs_obsidian_glass_stairside.png"}, + "", + default.node_sound_glass_defaults(), + false, + S("Inner Obsidian Glass Stair") +) + +stairs.register_stair_outer( + "obsidian_glass", + "default:obsidian_glass", + {cracky = 3}, + {"stairs_obsidian_glass_stairside.png^[transformR90", "default_obsidian_glass.png", + "stairs_obsidian_glass_outer_stairside.png", "stairs_obsidian_glass_stairside.png", + "stairs_obsidian_glass_stairside.png^[transformR90","stairs_obsidian_glass_outer_stairside.png"}, + "", + default.node_sound_glass_defaults(), + false, + S("Outer Obsidian Glass Stair") +) + +-- Dummy calls to S() to allow translation scripts to detect the strings. +-- To update this add this code to my_register_stair_and_slab: +-- for _,x in ipairs({"","Inner ","Outer "}) do print(("S(%q)"):format(x..desc_stair)) end +-- print(("S(%q)"):format(desc_slab)) + +--[[ +S("Wooden Stair") +S("Inner Wooden Stair") +S("Outer Wooden Stair") +S("Wooden Slab") +S("Jungle Wood Stair") +S("Inner Jungle Wood Stair") +S("Outer Jungle Wood Stair") +S("Jungle Wood Slab") +S("Pine Wood Stair") +S("Inner Pine Wood Stair") +S("Outer Pine Wood Stair") +S("Pine Wood Slab") +S("Acacia Wood Stair") +S("Inner Acacia Wood Stair") +S("Outer Acacia Wood Stair") +S("Acacia Wood Slab") +S("Aspen Wood Stair") +S("Inner Aspen Wood Stair") +S("Outer Aspen Wood Stair") +S("Aspen Wood Slab") +S("Stone Stair") +S("Inner Stone Stair") +S("Outer Stone Stair") +S("Stone Slab") +S("Cobblestone Stair") +S("Inner Cobblestone Stair") +S("Outer Cobblestone Stair") +S("Cobblestone Slab") +S("Mossy Cobblestone Stair") +S("Inner Mossy Cobblestone Stair") +S("Outer Mossy Cobblestone Stair") +S("Mossy Cobblestone Slab") +S("Stone Brick Stair") +S("Inner Stone Brick Stair") +S("Outer Stone Brick Stair") +S("Stone Brick Slab") +S("Stone Block Stair") +S("Inner Stone Block Stair") +S("Outer Stone Block Stair") +S("Stone Block Slab") +S("Desert Stone Stair") +S("Inner Desert Stone Stair") +S("Outer Desert Stone Stair") +S("Desert Stone Slab") +S("Desert Cobblestone Stair") +S("Inner Desert Cobblestone Stair") +S("Outer Desert Cobblestone Stair") +S("Desert Cobblestone Slab") +S("Desert Stone Brick Stair") +S("Inner Desert Stone Brick Stair") +S("Outer Desert Stone Brick Stair") +S("Desert Stone Brick Slab") +S("Desert Stone Block Stair") +S("Inner Desert Stone Block Stair") +S("Outer Desert Stone Block Stair") +S("Desert Stone Block Slab") +S("Sandstone Stair") +S("Inner Sandstone Stair") +S("Outer Sandstone Stair") +S("Sandstone Slab") +S("Sandstone Brick Stair") +S("Inner Sandstone Brick Stair") +S("Outer Sandstone Brick Stair") +S("Sandstone Brick Slab") +S("Sandstone Block Stair") +S("Inner Sandstone Block Stair") +S("Outer Sandstone Block Stair") +S("Sandstone Block Slab") +S("Desert Sandstone Stair") +S("Inner Desert Sandstone Stair") +S("Outer Desert Sandstone Stair") +S("Desert Sandstone Slab") +S("Desert Sandstone Brick Stair") +S("Inner Desert Sandstone Brick Stair") +S("Outer Desert Sandstone Brick Stair") +S("Desert Sandstone Brick Slab") +S("Desert Sandstone Block Stair") +S("Inner Desert Sandstone Block Stair") +S("Outer Desert Sandstone Block Stair") +S("Desert Sandstone Block Slab") +S("Silver Sandstone Stair") +S("Inner Silver Sandstone Stair") +S("Outer Silver Sandstone Stair") +S("Silver Sandstone Slab") +S("Silver Sandstone Brick Stair") +S("Inner Silver Sandstone Brick Stair") +S("Outer Silver Sandstone Brick Stair") +S("Silver Sandstone Brick Slab") +S("Silver Sandstone Block Stair") +S("Inner Silver Sandstone Block Stair") +S("Outer Silver Sandstone Block Stair") +S("Silver Sandstone Block Slab") +S("Obsidian Stair") +S("Inner Obsidian Stair") +S("Outer Obsidian Stair") +S("Obsidian Slab") +S("Obsidian Brick Stair") +S("Inner Obsidian Brick Stair") +S("Outer Obsidian Brick Stair") +S("Obsidian Brick Slab") +S("Obsidian Block Stair") +S("Inner Obsidian Block Stair") +S("Outer Obsidian Block Stair") +S("Obsidian Block Slab") +S("Brick Stair") +S("Inner Brick Stair") +S("Outer Brick Stair") +S("Brick Slab") +S("Steel Block Stair") +S("Inner Steel Block Stair") +S("Outer Steel Block Stair") +S("Steel Block Slab") +S("Tin Block Stair") +S("Inner Tin Block Stair") +S("Outer Tin Block Stair") +S("Tin Block Slab") +S("Copper Block Stair") +S("Inner Copper Block Stair") +S("Outer Copper Block Stair") +S("Copper Block Slab") +S("Bronze Block Stair") +S("Inner Bronze Block Stair") +S("Outer Bronze Block Stair") +S("Bronze Block Slab") +S("Gold Block Stair") +S("Inner Gold Block Stair") +S("Outer Gold Block Stair") +S("Gold Block Slab") +S("Ice Stair") +S("Inner Ice Stair") +S("Outer Ice Stair") +S("Ice Slab") +S("Snow Block Stair") +S("Inner Snow Block Stair") +S("Outer Snow Block Stair") +S("Snow Block Slab") +--]] diff --git a/mods/stairs/license.txt b/mods/stairs/license.txt new file mode 100644 index 00000000..57bd98cf --- /dev/null +++ b/mods/stairs/license.txt @@ -0,0 +1,16 @@ +License of source code +---------------------- + +GNU Lesser General Public License, version 2.1 +Copyright (C) 2011-2017 Kahrl +Copyright (C) 2011-2017 celeron55, Perttu Ahola +Copyright (C) 2012-2017 Various Minetest developers and contributors + +This program is free software; you can redistribute it and/or modify it under the terms +of the GNU Lesser General Public License as published by the Free Software Foundation; +either version 2.1 of the License, or (at your option) any later version. + +This program 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 Lesser General Public License for more details: +https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html diff --git a/mods/stairs/locale/stairs.de.tr b/mods/stairs/locale/stairs.de.tr new file mode 100644 index 00000000..beb45798 --- /dev/null +++ b/mods/stairs/locale/stairs.de.tr @@ -0,0 +1,145 @@ +# textdomain: stairs +Glass Stair=Glastreppe +Glass Slab=Glasplatte +Inner Glass Stair=Innere Glastreppe +Outer Glass Stair=Äußere Glastreppe +Obsidian Glass Stair=Obsidianglastreppe +Obsidian Glass Slab=Obsidianglasplatte +Inner Obsidian Glass Stair=Innere Obsidianglastreppe +Outer Obsidian Glass Stair=Äußere Obsidianglastreppe +Wooden Stair=Holztreppe +Inner Wooden Stair=Innere Holztreppe +Outer Wooden Stair=Äußere Holztreppe +Wooden Slab=Holzplatte +Jungle Wood Stair=Dschungelholztreppe +Inner Jungle Wood Stair=Innere Dschungelholztreppe +Outer Jungle Wood Stair=Äußere Dschungelholztreppe +Jungle Wood Slab=Dschungelholzplatte +Pine Wood Stair=Kiefernholztreppe +Inner Pine Wood Stair=Innere Kiefernholztreppe +Outer Pine Wood Stair=Äußere Kiefernholztreppe +Pine Wood Slab=Kiefernholzplatte +Acacia Wood Stair=Akazienholztreppe +Inner Acacia Wood Stair=Innere Akazienholztreppe +Outer Acacia Wood Stair=Äußere Akazienholztreppe +Acacia Wood Slab=Akazienholzplatte +Aspen Wood Stair=Espenholztreppe +Inner Aspen Wood Stair=Innere Espenholztreppe +Outer Aspen Wood Stair=Äußere Espenholztreppe +Aspen Wood Slab=Espenholzplatte +Stone Stair=Steintreppe +Inner Stone Stair=Innere Steintreppe +Outer Stone Stair=Äußere Steintreppe +Stone Slab=Steinplatte +Cobblestone Stair=Kopfsteinpflastertreppe +Inner Cobblestone Stair=Innere Kopfsteinpflastertreppe +Outer Cobblestone Stair=Äußere Kopfsteinpflastertreppe +Cobblestone Slab=Kopfsteinpflasterplatte +Mossy Cobblestone Stair=Moosige Kopfsteinpflastertreppe +Inner Mossy Cobblestone Stair=Innere moosige Kopfsteinpflastertreppe +Outer Mossy Cobblestone Stair=Äußere moosige Kopfsteinpflastertreppe +Mossy Cobblestone Slab=Moosige Kopfsteinpflasterplatte +Stone Brick Stair=Steinziegeltreppe +Inner Stone Brick Stair=Innere Steinziegeltreppe +Outer Stone Brick Stair=Äußere Steinziegeltreppe +Stone Brick Slab=Steinziegelplatte +Stone Block Stair=Steinblocktreppe +Inner Stone Block Stair=Innere Steinblocktreppe +Outer Stone Block Stair=Äußere Steinblocktreppe +Stone Block Slab=Steinblockplatte +Desert Stone Stair=Wüstensteintreppe +Inner Desert Stone Stair=Innere Wüstensteintreppe +Outer Desert Stone Stair=Äußere Wüstensteintreppe +Desert Stone Slab=Wüstensteinplatte +Desert Cobblestone Stair=Wüstenkopfsteinpflastertreppe +Inner Desert Cobblestone Stair=Innere Wüstenkopfsteinpflastertreppe +Outer Desert Cobblestone Stair=Äußere Wüstenkopfsteinpflastertreppe +Desert Cobblestone Slab=Wüstenkopfsteinpflasterplatte +Desert Stone Brick Stair=Wüstensteinziegeltreppe +Inner Desert Stone Brick Stair=Innere Wüstensteinziegeltreppe +Outer Desert Stone Brick Stair=Äußere Wüstensteinziegeltreppe +Desert Stone Brick Slab=Wüstensteinziegelplatte +Desert Stone Block Stair=Wüstensteinblocktreppe +Inner Desert Stone Block Stair=Innere Wüstensteinblocktreppe +Outer Desert Stone Block Stair=Äußere Wüstensteinblocktreppe +Desert Stone Block Slab=Wüstensteinblockplatte +Sandstone Stair=Sandsteintreppe +Inner Sandstone Stair=Innere Sandsteintreppe +Outer Sandstone Stair=Äußere Sandsteintreppe +Sandstone Slab=Sandsteinplatte +Sandstone Brick Stair=Sandsteinziegeltreppe +Inner Sandstone Brick Stair=Innere Sandsteinziegeltreppe +Outer Sandstone Brick Stair=Äußere Sandsteinziegeltreppe +Sandstone Brick Slab=Sandsteinziegelplatte +Sandstone Block Stair=Sandsteinblocktreppe +Inner Sandstone Block Stair=Innere Sandsteinblocktreppe +Outer Sandstone Block Stair=Äußere Sandsteinblocktreppe +Sandstone Block Slab=Sandsteinblockplatte +Desert Sandstone Stair=Wüstensandsteintreppe +Inner Desert Sandstone Stair=Innere Wüstensandsteintreppe +Outer Desert Sandstone Stair=Äußere Wüstensandsteintreppe +Desert Sandstone Slab=Wüstensandsteinplatte +Desert Sandstone Brick Stair=Wüstensandsteinziegeltreppe +Inner Desert Sandstone Brick Stair=Innere Wüstensandsteinziegeltreppe +Outer Desert Sandstone Brick Stair=Äußere Wüstensandsteinziegeltreppe +Desert Sandstone Brick Slab=Wüstensandsteinziegelplatte +Desert Sandstone Block Stair=Wüstensandsteinblocktreppe +Inner Desert Sandstone Block Stair=Innere Wüstensandsteinblocktreppe +Outer Desert Sandstone Block Stair=Äußere Wüstensandsteinblocktreppe +Desert Sandstone Block Slab=Wüstensandsteinblockplatte +Silver Sandstone Stair=Silbersandsteintreppe +Inner Silver Sandstone Stair=Innere Silbersandsteintreppe +Outer Silver Sandstone Stair=Äußere Silbersandsteintreppe +Silver Sandstone Slab=Silbersandsteinplatte +Silver Sandstone Brick Stair=Silbersandsteinziegeltreppe +Inner Silver Sandstone Brick Stair=Innere Silbersandsteinziegeltreppe +Outer Silver Sandstone Brick Stair=Äußere Silbersandsteinziegeltreppe +Silver Sandstone Brick Slab=Silbersandsteinziegelplatte +Silver Sandstone Block Stair=Silbersandsteinblocktreppe +Inner Silver Sandstone Block Stair=Innere Silbersandsteinblocktreppe +Outer Silver Sandstone Block Stair=Äußere Silbersandsteinblocktreppe +Silver Sandstone Block Slab=Silbersandsteinblockplatte +Obsidian Stair=Obsidiantreppe +Inner Obsidian Stair=Innere Obsidiantreppe +Outer Obsidian Stair=Äußere Obsidiantreppe +Obsidian Slab=Obsidianplatte +Obsidian Brick Stair=Obsidianziegeltreppe +Inner Obsidian Brick Stair=Innere Obsidianziegeltreppe +Outer Obsidian Brick Stair=Äußere Obsidianziegeltreppe +Obsidian Brick Slab=Obsidianziegelplatte +Obsidian Block Stair=Obsidianblocktreppe +Inner Obsidian Block Stair=Innere Obsidianblocktreppe +Outer Obsidian Block Stair=Äußere Obsidianblocktreppe +Obsidian Block Slab=Obsidianblockplatte +Brick Stair=Ziegeltreppe +Inner Brick Stair=Innere Ziegeltreppe +Outer Brick Stair=Äußere Ziegeltreppe +Brick Slab=Ziegelplatte +Steel Block Stair=Stahlblocktreppe +Inner Steel Block Stair=Innere Stahlblocktreppe +Outer Steel Block Stair=Äußere Stahlblocktreppe +Steel Block Slab=Stahlblockplatte +Tin Block Stair=Zinnblocktreppe +Inner Tin Block Stair=Innere Zinnblocktreppe +Outer Tin Block Stair=Äußere Zinnblocktreppe +Tin Block Slab=Zinnblockplatte +Copper Block Stair=Kupferblocktreppe +Inner Copper Block Stair=Innere Kupferblocktreppe +Outer Copper Block Stair=Äußere Kupferblocktreppe +Copper Block Slab=Kupferblockplatte +Bronze Block Stair=Bronzeblocktreppe +Inner Bronze Block Stair=Innere Bronzeblocktreppe +Outer Bronze Block Stair=Äußere Bronzeblocktreppe +Bronze Block Slab=Bronzeblockplatte +Gold Block Stair=Goldblocktreppe +Inner Gold Block Stair=Innere Goldblocktreppe +Outer Gold Block Stair=Äußere Goldblocktreppe +Gold Block Slab=Goldblockplatte +Ice Stair=Eistreppe +Inner Ice Stair=Innere Eistreppe +Outer Ice Stair=Äußere Eistreppe +Ice Slab=Eisplatte +Snow Block Stair=Schneeblocktreppe +Inner Snow Block Stair=Innere Schneeblocktreppe +Outer Snow Block Stair=Äußere Schneeblocktreppe +Snow Block Slab=Schneeblockplatte diff --git a/mods/stairs/locale/stairs.eo.tr b/mods/stairs/locale/stairs.eo.tr new file mode 100644 index 00000000..078cc9cc --- /dev/null +++ b/mods/stairs/locale/stairs.eo.tr @@ -0,0 +1,145 @@ +# textdomain: stairs +Glass Stair=Vitra Ŝtupo +Glass Slab=Vitra Plato +Inner Glass Stair=Interna Vitra Ŝtupo +Outer Glass Stair=Ekstera Vitra Ŝtupo +Obsidian Glass Stair=Obsidiana Vitra Ŝtupo +Obsidian Glass Slab=Obsidiana Vitra Plato +Inner Obsidian Glass Stair=Interna Obsidiana Vitra Ŝtupo +Outer Obsidian Glass Stair=Ekstera Obsidiana Vitra Ŝtupo +Wooden Stair=Ligna Ŝtupo +Inner Wooden Stair=Interna Ligna Ŝtupo +Outer Wooden Stair=Ekstera Ligna Ŝtupo +Wooden Slab=Ligna Plato +Jungle Wood Stair=Ĝangala Ligna Ŝtupo +Inner Jungle Wood Stair=Interna Ĝangala Ligna Ŝtupo +Outer Jungle Wood Stair=Ekstera Ĝangala Ligna Ŝtupo +Jungle Wood Slab=Ĝangala Ligna Plato +Pine Wood Stair=Pina Ligna Ŝtupo +Inner Pine Wood Stair=Interna Pina Ligna Ŝtupo +Outer Pine Wood Stair=Ekstera Pina Ligna Ŝtupo +Pine Wood Slab=Pina Ligna Plato +Acacia Wood Stair=Akacia Ligna Ŝtupo +Inner Acacia Wood Stair=Interna Akacia Ligna Ŝtupo +Outer Acacia Wood Stair=Ekstera Akacia Ligna Ŝtupo +Acacia Wood Slab=Akacia Ligna Plato +Aspen Wood Stair=Tremola Ligna Ŝtupo +Inner Aspen Wood Stair=Interna Tremola Ligna Ŝtupo +Outer Aspen Wood Stair=Ekstera Tremola Ligna Ŝtupo +Aspen Wood Slab=Tremola Ligna Plato +Stone Stair=Ŝtona Ŝtupo +Inner Stone Stair=Interna Ŝtona Ŝtupo +Outer Stone Stair=Ekstera Ŝtona Ŝtupo +Stone Slab=Ŝtona Plato +Cobblestone Stair=Pavimŝtona Ŝtupo +Inner Cobblestone Stair=Interna Pavimŝtona Ŝtupo +Outer Cobblestone Stair=Ekstera Pavimŝtona Ŝtupo +Cobblestone Slab=Pavimŝtona Plato +Mossy Cobblestone Stair=Muska Pavimŝtona Ŝtupo +Inner Mossy Cobblestone Stair=Interna Muska Pavimŝtona Ŝtupo +Outer Mossy Cobblestone Stair=Ekstera Muska Pavimŝtona Ŝtupo +Mossy Cobblestone Slab=Muska Pavimŝtona Plato +Stone Brick Stair=Ŝtona Brika Ŝtupo +Inner Stone Brick Stair=Interna Ŝtona Brika Ŝtupo +Outer Stone Brick Stair=Ekstera Ŝtona Brika Ŝtupo +Stone Brick Slab=Ŝtona Brika Plato +Stone Block Stair=Ŝtona Ŝtipa Ŝtupo +Inner Stone Block Stair=Interna Ŝtona Ŝtipa Ŝtupo +Outer Stone Block Stair=Ekstera Ŝtona Ŝtipa Ŝtupo +Stone Block Slab=Ŝtona Ŝtipa Plato +Desert Stone Stair=Dezerta Ŝtona Ŝtupo +Inner Desert Stone Stair=Interna Dezerta Ŝtona Ŝtupo +Outer Desert Stone Stair=Ekstera Dezerta Ŝtona Ŝtupo +Desert Stone Slab=Dezerta Ŝtona Plato +Desert Cobblestone Stair=Dezerta Pavimŝtona Ŝtupo +Inner Desert Cobblestone Stair=Interna Dezerta Pavimŝtona Ŝtupo +Outer Desert Cobblestone Stair=Ekstera Dezerta Pavimŝtona Ŝtupo +Desert Cobblestone Slab=Dezerta Pavimŝtona Plato +Desert Stone Brick Stair=Dezerta Ŝtona Brika Ŝtupo +Inner Desert Stone Brick Stair=Interna Dezerta Ŝtona Brika Ŝtupo +Outer Desert Stone Brick Stair=Ekstera Dezerta Ŝtona Brika Ŝtupo +Desert Stone Brick Slab=Dezerta Ŝtona Brika Plato +Desert Stone Block Stair=Dezerta Ŝtona Bloko Ŝtupo +Inner Desert Stone Block Stair=Interna Dezerta Ŝtona Bloko Stupo +Outer Desert Stone Block Stair=Ekstera Dezerta Ŝtona Bloko Ŝtupo +Desert Stone Block Slab=Dezerta Ŝtona Bloko Plato +Sandstone Stair=Sablŝtona Ŝtupo +Inner Sandstone Stair=Interna Ŝablŝtona Ŝtupo +Outer Sandstone Stair=Ekstera Ŝablŝtona Ŝtupo +Sandstone Slab=Ŝablŝtona Plato +Sandstone Brick Stair=Ŝablŝtona Brika Ŝtupo +Inner Sandstone Brick Stair=Interna Ŝablŝtona Brika Ŝtupo +Outer Sandstone Brick Stair=Ekstera Ŝablŝtona Brika Ŝtupo +Sandstone Brick Slab=Ŝablŝtona Brika Plato +Sandstone Block Stair=Ŝablŝtona Ŝtipa Ŝtupo +Inner Sandstone Block Stair=Interna Ŝablŝtona Ŝtipa Ŝtupo +Outer Sandstone Block Stair=Ekstera Ŝablŝtona Ŝtipa Ŝtupo +Sandstone Block Slab=Ŝablŝtona Ŝtipa Plato +Desert Sandstone Stair=Dezerta Ŝablŝtona Ŝtupo +Inner Desert Sandstone Stair=Interna Dezerta Ŝablŝtona Ŝtupo +Outer Desert Sandstone Stair=Ekstera Dezerta Ŝablŝtona Ŝtupo +Desert Sandstone Slab=Dezerta Ŝablŝtona Plato +Desert Sandstone Brick Stair=Dezerta Ŝablŝtona Brika Ŝtupo +Inner Desert Sandstone Brick Stair=Interna Dezerta Ŝablŝtona Brika Ŝtupo +Outer Desert Sandstone Brick Stair=Ekstera Dezerta Ŝablŝtona Brika Ŝtupo +Desert Sandstone Brick Slab=Dezerta Ŝablŝtona Brika Plato +Desert Sandstone Block Stair=Dezerta Ŝablŝtona Ŝtipa Ŝtupo +Inner Desert Sandstone Block Stair=Interna Dezerta Ŝablŝtona Brika Ŝtupo +Outer Desert Sandstone Block Stair=Ekstera Dezerta Ŝablŝtona Brika Ŝtupo +Desert Sandstone Block Slab=Dezerta Ŝablŝtona Ŝtipa Plato +Silver Sandstone Stair=Arĝenta Ŝablŝtona Ŝtupo +Inner Silver Sandstone Stair=Interna Arĝenta Ŝablŝtona Ŝtupo +Outer Silver Sandstone Stair=Ekstera Arĝenta Ŝablŝtona Ŝtupo +Silver Sandstone Slab=Arĝenta Ŝablŝtona Plato +Silver Sandstone Brick Stair=Arĝenta Ŝablŝtona Brika Ŝtupo +Inner Silver Sandstone Brick Stair=Interna Arĝenta Ŝablŝtona Brika Ŝtupo +Outer Silver Sandstone Brick Stair=Ekstera Arĝenta Ŝablŝtona Brika Ŝtupo +Silver Sandstone Brick Slab=Arĝenta Ŝablŝtona Brika Plato +Silver Sandstone Block Stair=Arĝenta Ŝablŝtona Ŝtipa Ŝtupo +Inner Silver Sandstone Block Stair=Interna Arĝenta Ŝablŝtona Ŝtipa Ŝtupo +Outer Silver Sandstone Block Stair=Ekstera Arĝenta Ŝablŝtona Ŝtipa Ŝtupo +Silver Sandstone Block Slab=Arĝenta Ŝablŝtona Ŝtipa Plato +Obsidian Stair=Obsidiana Ŝtupo +Inner Obsidian Stair=Interna Obsidiana Ŝtupo +Outer Obsidian Stair=Ekstera Obsidiana Ŝtupo +Obsidian Slab=Obsidiana Plato +Obsidian Brick Stair=Obsidiana Brika Ŝtupo +Inner Obsidian Brick Stair=Interna Obsidiana Brika Ŝtupo +Outer Obsidian Brick Stair=Ekstera Obsidiana Brika Ŝtupo +Obsidian Brick Slab=Obsidiana Brika Plato +Obsidian Block Stair=Obsidiana Ŝtipa Ŝtupo +Inner Obsidian Block Stair=Interna Obsidiana Ŝtipa Ŝtupo +Outer Obsidian Block Stair=Ekstera Obsidiana Ŝtipa Ŝtupo +Obsidian Block Slab=Obsidiana Ŝtipa Plato +Brick Stair=Brika Ŝtupo +Inner Brick Stair=Interna Brika Ŝtupo +Outer Brick Stair=Ekstera Brika Ŝtupo +Brick Slab=Brika Plato +Steel Block Stair=Ŝtala Ŝtipa Ŝtupo +Inner Steel Block Stair=Interna Ŝtala Ŝtipa Ŝtupo +Outer Steel Block Stair=Ekstera Ŝtala Ŝtipa Ŝtupo +Steel Block Slab=Ŝtala Ŝtipa Plato +Tin Block Stair=Stana Ŝtipa Ŝtupo +Inner Tin Block Stair=Interna Stana Ŝtipa Ŝtupo +Outer Tin Block Stair=Ekstera Stana Ŝtipa Ŝtupo +Tin Block Slab=Stana Ŝtipa Plato +Copper Block Stair=Kupra Ŝtipa Ŝtupo +Inner Copper Block Stair=Interna Kupra Ŝtipa Ŝtupo +Outer Copper Block Stair=Ekstera Kupra Ŝtipa Ŝtupo +Copper Block Slab=Kupra Ŝtipa Plato +Bronze Block Stair=Bronza Ŝtipa Ŝtupo +Inner Bronze Block Stair=Interna Bronza Ŝtipa Ŝtupo +Outer Bronze Block Stair=Ekstera Bronza Ŝtipa Ŝtupo +Bronze Block Slab=Bronza Ŝtipa Plato +Gold Block Stair=Ora Ŝtipa Ŝtupo +Inner Gold Block Stair=Interna Ora Ŝtipa Ŝtupo +Outer Gold Block Stair=Ekstera Ora Ŝtipa Ŝtupo +Gold Block Slab=Ora Ŝtipa Plato +Ice Stair=Glacia Ŝtupo +Inner Ice Stair=Interna Glacia Ŝtupo +Outer Ice Stair=Ekstera Glacia Ŝtupo +Ice Slab=Glacia Plato +Snow Block Stair=Neĝa Ŝtipa Ŝtupo +Inner Snow Block Stair=Interna Neĝa Ŝtipa Ŝtupo +Outer Snow Block Stair=Ekstera Neĝa Ŝtipa Ŝtupo +Snow Block Slab=Neĝa Ŝtipa Plato diff --git a/mods/stairs/locale/stairs.es.tr b/mods/stairs/locale/stairs.es.tr new file mode 100644 index 00000000..374540c7 --- /dev/null +++ b/mods/stairs/locale/stairs.es.tr @@ -0,0 +1,145 @@ +# textdomain: stairs +Glass Stair=Escalera de vidrio +Glass Slab=Losa de vidrio +Inner Glass Stair=Escalera interior de vidrio +Outer Glass Stair=Escalera exterior de vidrio +Obsidian Glass Stair=Escalera de vidrio de obsidiana +Obsidian Glass Slab=Losa de vidrio de obsidiana +Inner Obsidian Glass Stair=Escalera interior de vidrio de obsidiana +Outer Obsidian Glass Stair=Escalera exterior de vidrio de obsidiana +Wooden Stair=Escalera de madera +Inner Wooden Stair=Escalera interior de madera +Outer Wooden Stair=Escalera exterior de madera +Wooden Slab=Losa de madera +Jungle Wood Stair=Escalera de madera tropical +Inner Jungle Wood Stair=Escalera interior de madera tropical +Outer Jungle Wood Stair=Escalera exterior de madera tropical +Jungle Wood Slab=Losa de madera tropical +Pine Wood Stair=Escalera de pino +Inner Pine Wood Stair=Escalera interior de pino +Outer Pine Wood Stair=Escalera exterior de pino +Pine Wood Slab=Losa de pino +Acacia Wood Stair=Escalera de acacia +Inner Acacia Wood Stair=Escalera interior de acacia +Outer Acacia Wood Stair=Escalera exterior de acacia +Acacia Wood Slab=Losa de acacia +Aspen Wood Stair=Escalera de álamo +Inner Aspen Wood Stair=Escalera interior de álamo +Outer Aspen Wood Stair=Escalera exterior de álamo +Aspen Wood Slab=Losa de álamo +Stone Stair=Escalera de piedra +Inner Stone Stair=Escalera interior de piedra +Outer Stone Stair=Escalera exterior de piedra +Stone Slab=Losa de piedra +Cobblestone Stair=Escalera de adoquines +Inner Cobblestone Stair=Escalera interior de adoquines +Outer Cobblestone Stair=Escalera exterior de adoquines +Cobblestone Slab=Losa de adoquines +Mossy Cobblestone Stair=Escalera de adoquines musgosos +Inner Mossy Cobblestone Stair=Escalera interior de adoquines musgosos +Outer Mossy Cobblestone Stair=Escalera exterior de adoquines musgosos +Mossy Cobblestone Slab=Losa de adoquines musgosos +Stone Brick Stair=Escalera de ladrillos de piedra +Inner Stone Brick Stair=Escalera interior de ladrillos de piedra +Outer Stone Brick Stair=Escalera exterior de ladrillos de piedra +Stone Brick Slab=Losa de ladrillos de piedra +Stone Block Stair=Escalera de bloques de piedra +Inner Stone Block Stair=Escalera interior de bloques de piedra +Outer Stone Block Stair=Escalera exterior de bloques de piedra +Stone Block Slab=Losa de bloques de piedra +Desert Stone Stair=Escalera de piedra desértica +Inner Desert Stone Stair=Escalera interior de piedra desértica +Outer Desert Stone Stair=Escalera exterior de piedra desértica +Desert Stone Slab=Losa de piedra desértica +Desert Cobblestone Stair=Escalera de adoquines desérticos +Inner Desert Cobblestone Stair=Escalera interior de adoquines desérticos +Outer Desert Cobblestone Stair=Escalera exterior de adoquines desérticos +Desert Cobblestone Slab=Losa de adoquines desérticos +Desert Stone Brick Stair=Escalera de ladrillos desérticos +Inner Desert Stone Brick Stair=Escalera interior de ladrillos desérticos +Outer Desert Stone Brick Stair=Escalera exterior de ladrillos desérticos +Desert Stone Brick Slab=Losa de ladrillos desérticos +Desert Stone Block Stair=Escalera de bloques de piedra desértica +Inner Desert Stone Block Stair=Escalera interior de bloques de piedra desértica +Outer Desert Stone Block Stair=Escalera exterior de bloques de piedra desértica +Desert Stone Block Slab=Losa de bloques de piedra desértica +Sandstone Stair=Escalera de arenisca +Inner Sandstone Stair=Escalera interior de arenisca +Outer Sandstone Stair=Escalera exterior de arenisca +Sandstone Slab=Losa de arenisca +Sandstone Brick Stair=Escalera de ladrillos de arenisca +Inner Sandstone Brick Stair=Escalera interior de ladrillos de arenisca +Outer Sandstone Brick Stair=Escalera exterior de ladrillos de arenisca +Sandstone Brick Slab=Losa de ladrillos de arenisca +Sandstone Block Stair=Escalera de bloques de arenisca +Inner Sandstone Block Stair=Escalera interior de bloques de arenisca +Outer Sandstone Block Stair=Escalera exterior de bloques de arenisca +Sandstone Block Slab=Losa de bloques de arenisca +Desert Sandstone Stair=Escalera de arenisca desértica +Inner Desert Sandstone Stair=Escalera interior de arenisca desértica +Outer Desert Sandstone Stair=Escalera exterior de arenisca desértica +Desert Sandstone Slab=Losa de arenisca desértica +Desert Sandstone Brick Stair=Escalera de ladrillos de arenisca desértica +Inner Desert Sandstone Brick Stair=Escalera interior de ladrillos de arenisca desértica +Outer Desert Sandstone Brick Stair=Escalera exterior de ladrillos de arenisca desértica +Desert Sandstone Brick Slab=Losa de ladrillos de arenisca desértica +Desert Sandstone Block Stair=Escalera de bloques de arenisca desértica +Inner Desert Sandstone Block Stair=Escalera interior de bloques de arenisca desértica +Outer Desert Sandstone Block Stair=Escalera exterior de bloques de arenisca desértica +Desert Sandstone Block Slab=Losa de bloques de arenisca desértica +Silver Sandstone Stair=Escalera de arenisca plateada +Inner Silver Sandstone Stair=Escalera interior de arenisca plateada +Outer Silver Sandstone Stair=Escalera exterior de arenisca plateada +Silver Sandstone Slab=Losa de arenisca plateada +Silver Sandstone Brick Stair=Escalera de ladrillos de arenisca plateada +Inner Silver Sandstone Brick Stair=Escalera interior de ladrillos de arenisca plateada +Outer Silver Sandstone Brick Stair=Escalera exterior de ladrillos de arenisca plateada +Silver Sandstone Brick Slab=Losa de ladrillos de arenisca plateada +Silver Sandstone Block Stair=Escalera de bloques de arenisca plateada +Inner Silver Sandstone Block Stair=Escalera interior de bloques de arenisca plateada +Outer Silver Sandstone Block Stair=Escalera exterior de bloques de arenisca plateada +Silver Sandstone Block Slab=Losa de bloques de arenisca plateada +Obsidian Stair=Escalera de obsidiana +Inner Obsidian Stair=Escalera interior de obsidiana +Outer Obsidian Stair=Escalera exterior de obsidiana +Obsidian Slab=Losa de obsidiana +Obsidian Brick Stair=Escalera de ladrillos de obsidiana +Inner Obsidian Brick Stair=Escalera interior de ladrillos de obsidiana +Outer Obsidian Brick Stair=Escalera exterior de ladrillos de obsidiana +Obsidian Brick Slab=Losa de ladrillos de obsidiana +Obsidian Block Stair=Escalera de bloques de obsidiana +Inner Obsidian Block Stair=Escalera interior de bloques de obsidiana +Outer Obsidian Block Stair=Escalera exterior de bloques de obsidiana +Obsidian Block Slab=Losa de bloques de obsidiana +Brick Stair=Escalera de ladrillos +Inner Brick Stair=Escalera interior de ladrillos +Outer Brick Stair=Escalera exterior de ladrillos +Brick Slab=Losa de ladrillos +Steel Block Stair=Escalera de acero +Inner Steel Block Stair=Escalera interior de acero +Outer Steel Block Stair=Escalera exterior de acero +Steel Block Slab=Losa de acero +Tin Block Stair=Escalera de estaño +Inner Tin Block Stair=Escalera interior de estaño +Outer Tin Block Stair=Escalera exterior de estaño +Tin Block Slab=Losa de estaño +Copper Block Stair=Escalera de cobre +Inner Copper Block Stair=Escalera interior de cobre +Outer Copper Block Stair=Escalera exterior de cobre +Copper Block Slab=Losa de cobre +Bronze Block Stair=Escalera de bronce +Inner Bronze Block Stair=Escalera interior de bronce +Outer Bronze Block Stair=Escalera exterior de bronce +Bronze Block Slab=Losa de bronce +Gold Block Stair=Escalera de oro +Inner Gold Block Stair=Escalera interior de oro +Outer Gold Block Stair=Escalera exterior de oro +Gold Block Slab=Losa de oro +Ice Stair=Escalera de hielo +Inner Ice Stair=Escalera interior de hielo +Outer Ice Stair=Escalera exterior de hielo +Ice Slab=Losa de hielo +Snow Block Stair=Escalera de nieve +Inner Snow Block Stair=Escalera interior de nieve +Outer Snow Block Stair=Escalera exterior de nieve +Snow Block Slab=Losa de nieve diff --git a/mods/stairs/locale/stairs.fr.tr b/mods/stairs/locale/stairs.fr.tr new file mode 100644 index 00000000..81b575e6 --- /dev/null +++ b/mods/stairs/locale/stairs.fr.tr @@ -0,0 +1,145 @@ +# textdomain: stairs +Glass Stair=Escalier de verre +Glass Slab=Dalle de verre +Inner Glass Stair=Escalier intérieur de verre +Outer Glass Stair=Escalier extérieur de verre +Obsidian Glass Stair=Escalier de verre d'obsidienne +Obsidian Glass Slab=Dalle de verre d'obsidienne +Inner Obsidian Glass Stair=Escalier intérieur de verre d'obsidienne +Outer Obsidian Glass Stair=Escalier extérieur de verre d'obsidienne +Wooden Stair=Escalier en bois +Inner Wooden Stair=Escalier intérieur en bois +Outer Wooden Stair=Escalier extérieur en bois +Wooden Slab=Dalle de bois +Jungle Wood Stair=Escalier en bois de la jungle +Inner Jungle Wood Stair=Escalier intérieur en bois de la jungle +Outer Jungle Wood Stair=Escalier extérieur en bois de la jungle +Jungle Wood Slab=Dalle en bois de la jungle +Pine Wood Stair=Escalier en pin +Inner Pine Wood Stair=Escalier intérieur en pin +Outer Pine Wood Stair=Escalier extérieur en pin +Pine Wood Slab=Dalle en pin +Acacia Wood Stair=Escalier en acacia +Inner Acacia Wood Stair=Escalier intérieur en acacia +Outer Acacia Wood Stair=Escalier extérieur en acacia +Acacia Wood Slab=Dalle en acacia +Aspen Wood Stair=Escalier en tremble +Inner Aspen Wood Stair=Escalier intérieur en tremble +Outer Aspen Wood Stair=Escalier extérieur en tremble +Aspen Wood Slab=Dalle en tremble +Stone Stair=Escalier de pierre +Inner Stone Stair=Escalier intérieur de pierre +Outer Stone Stair=Escalier extérieur de pierre +Stone Slab=Dalle de pierre +Cobblestone Stair=Escalier en pavé +Inner Cobblestone Stair=Escalier intérieur en pavé +Outer Cobblestone Stair=Escalier extérieur en pavé +Cobblestone Slab=Dalle en pavé +Mossy Cobblestone Stair=Escalier en pavé moussu +Inner Mossy Cobblestone Stair=Escalier intérieur en pavé moussu +Outer Mossy Cobblestone Stair=Escalier extérieur en pavé moussu +Mossy Cobblestone Slab=Dalle en pavé moussu +Stone Brick Stair=Escalier en brique de pierre +Inner Stone Brick Stair=Escalier intérieur en brique de pierre +Outer Stone Brick Stair=Escalier extérieur en brique de pierre +Stone Brick Slab=Dalle en brique de pierre +Stone Block Stair=Escalier en bloc de pierre +Inner Stone Block Stair=Escalier intérieur en bloc de pierre +Outer Stone Block Stair=Escalier extérieur en bloc de pierre +Stone Block Slab=Dalle en bloc de pierre +Desert Stone Stair=Escalier en pierre du désert +Inner Desert Stone Stair=Escalier intérieur en pierre du désert +Outer Desert Stone Stair=Escalier extérieur en pierre du désert +Desert Stone Slab=Dalle en pierre du désert +Desert Cobblestone Stair=Escalier en pavé du désert +Inner Desert Cobblestone Stair=Escalier intérieur en pavé du désert +Outer Desert Cobblestone Stair=Escalier extérieur en pavé du désert +Desert Cobblestone Slab=Dalle en pavé du désert +Desert Stone Brick Stair=Escalier en brique de pierre du désert +Inner Desert Stone Brick Stair=Escalier intérieur en brique de pierre du désert +Outer Desert Stone Brick Stair=Escalier extérieur en brique de pierre du désert +Desert Stone Brick Slab=Dalle en brique de pierre du désert +Desert Stone Block Stair=Escalier en bloc de pierre du désert +Inner Desert Stone Block Stair=Escalier intérieur en bloc de pierre du désert +Outer Desert Stone Block Stair=Escalier extérieur en bloc de pierre du désert +Desert Stone Block Slab=Dalle en bloc de pierre du désert +Sandstone Stair=Escalier en grès +Inner Sandstone Stair=Escalier intérieur en grès +Outer Sandstone Stair=Escalier extérieur en grès +Sandstone Slab=Dalle en grès +Sandstone Brick Stair=Escalier en brique de grès +Inner Sandstone Brick Stair=Escalier intérieur en brique de grès +Outer Sandstone Brick Stair=Escalier extérieur en brique de grès +Sandstone Brick Slab=Dalle en brique de grès +Sandstone Block Stair=Escalier en bloc de grès +Inner Sandstone Block Stair=Escalier intérieur en bloc de grès +Outer Sandstone Block Stair=Escalier extérieur en bloc de grès +Sandstone Block Slab=Dalle en bloc de grès +Desert Sandstone Stair=Escalier en grès du désert +Inner Desert Sandstone Stair=Escalier intérieur en grès du désert +Outer Desert Sandstone Stair=Escalier extérieur en grès du désert +Desert Sandstone Slab=Dalle en grès du désert +Desert Sandstone Brick Stair=Escalier en brique de grès du désert +Inner Desert Sandstone Brick Stair=Escalier intérieur en brique de grès du désert +Outer Desert Sandstone Brick Stair=Escalier extérieur en brique de grès du désert +Desert Sandstone Brick Slab=Dalle en brique de grès du désert +Desert Sandstone Block Stair=Escalier en bloc de grès du désert +Inner Desert Sandstone Block Stair=Escalier intérieur en bloc de grès du désert +Outer Desert Sandstone Block Stair=Escalier extérieur en bloc de grès du désert +Desert Sandstone Block Slab=Dalle en bloc de grès du désert +Silver Sandstone Stair=Escalier en grès argenté +Inner Silver Sandstone Stair=Escalier intérieur en grès argenté +Outer Silver Sandstone Stair=Escalier extérieur en grès argenté +Silver Sandstone Slab=Dalle en grès argenté +Silver Sandstone Brick Stair=Escalier en brique de grès argenté +Inner Silver Sandstone Brick Stair=Escalier intérieur en brique de grès argenté +Outer Silver Sandstone Brick Stair=Escalier extérieur en brique de grès argenté +Silver Sandstone Brick Slab=Dalle en brique de grès argenté +Silver Sandstone Block Stair=Escalier en bloc de grès argenté +Inner Silver Sandstone Block Stair=Escalier intérieur en bloc de grès argenté +Outer Silver Sandstone Block Stair=Escalier extérieur en bloc de grès argenté +Silver Sandstone Block Slab=Dalle en bloc de grès argenté +Obsidian Stair=Escalier en obsidienne +Inner Obsidian Stair=Escalier intérieur en obsidienne +Outer Obsidian Stair=Escalier extérieur en obsidienne +Obsidian Slab=Dalle en obsidienne +Obsidian Brick Stair=Escalier en brique d'obsidienne +Inner Obsidian Brick Stair=Escalier intérieur en brique d'obsidienne +Outer Obsidian Brick Stair=Escalier extérieur en brique d'obsidienne +Obsidian Brick Slab=Dalle en brique d'obsidienne +Obsidian Block Stair=Escalier en bloc d'obsidienne +Inner Obsidian Block Stair=Escalier intérieur en bloc d'obsidienne +Outer Obsidian Block Stair=Escalier extérieur en bloc d'obsidienne +Obsidian Block Slab=Dalle en bloc d'obsidienne +Brick Stair=Escalier en brique +Inner Brick Stair=Escalier intérieur en brique +Outer Brick Stair=Escalier extérieur en brique +Brick Slab=Dalle en brique +Steel Block Stair=Escalier en acier +Inner Steel Block Stair=Escalier intérieur en acier +Outer Steel Block Stair=Escalier extérieur en acier +Steel Block Slab=Dalle en acier +Tin Block Stair=Escalier en bloc d'étain +Inner Tin Block Stair=Escalier intérieur en bloc d'étain +Outer Tin Block Stair=Escalier extérieur en bloc d'étain +Tin Block Slab=Dalle en bloc d'étain +Copper Block Stair=Escalier en bloc de cuivre +Inner Copper Block Stair=Escalier intérieur en bloc de cuivre +Outer Copper Block Stair=Escalier extérieur en bloc de cuivre +Copper Block Slab=Dalle en bloc de cuivre +Bronze Block Stair=Escalier en bronze +Inner Bronze Block Stair=Escalier intérieur en bronze +Outer Bronze Block Stair=Escalier extérieur en bronze +Bronze Block Slab=Dalle en bronze +Gold Block Stair=Escalier en bloc d'or +Inner Gold Block Stair=Escalier intérieur en bloc d'or +Outer Gold Block Stair=Escalier extérieur en bloc d'or +Gold Block Slab=Dalle en bloc d'or +Ice Stair=Escalier de glace +Inner Ice Stair=Escalier intérieur de glace +Outer Ice Stair=Escalier extérieur de glace +Ice Slab=Dalle de glace +Snow Block Stair=Escalier en bloc de neige +Inner Snow Block Stair=Escalier intérieur en bloc de neige +Outer Snow Block Stair=Escalier extérieur en bloc de neige +Snow Block Slab=Dalle en bloc de neige diff --git a/mods/stairs/locale/stairs.id.tr b/mods/stairs/locale/stairs.id.tr new file mode 100644 index 00000000..dbdfaa0f --- /dev/null +++ b/mods/stairs/locale/stairs.id.tr @@ -0,0 +1,145 @@ +# textdomain: stairs +Glass Stair=Tangga Kaca +Glass Slab=Lempengan Kaca +Inner Glass Stair=Tangga Kaca Dalam +Outer Glass Stair=Tangga Kaca Luar +Obsidian Glass Stair=Tangga Kaca Obsidian +Obsidian Glass Slab=Lempengan Kaca Obsidian +Inner Obsidian Glass Stair=Tangga Kaca Obsidian Dalam +Outer Obsidian Glass Stair=Tangga Kaca Obsidian Luar +Wooden Stair=Tangga Kayu +Inner Wooden Stair=Tangga Kayu Dalam +Outer Wooden Stair=Tangga Kayu Luar +Wooden Slab=Lempengan Kayu +Jungle Wood Stair=Tangga Kayu Rimba +Inner Jungle Wood Stair=Tangga Kayu Rimba Dalam +Outer Jungle Wood Stair=Tangga Kayu Rimba Luar +Jungle Wood Slab=Lempengan Kayu Rimba +Pine Wood Stair=Tangga Kayu Pinus +Inner Pine Wood Stair=Tangga Kayu Pinus Dalam +Outer Pine Wood Stair=Tangga Kayu Pinus Luar +Pine Wood Slab=Lempengan Kayu Pinus +Acacia Wood Stair=Tangga Kayu Akasia +Inner Acacia Wood Stair=Tangga Kayu Akasia Dalam +Outer Acacia Wood Stair=Tangga Kayu Akasia Luar +Acacia Wood Slab=Lempengan Kayu Akasia +Aspen Wood Stair=Tangga Kayu Aspen +Inner Aspen Wood Stair=Tangga Kayu Aspen Dalam +Outer Aspen Wood Stair=Tangga Kayu Aspen Luar +Aspen Wood Slab=Lempengan Kayu Aspen +Stone Stair=Tangga Batu +Inner Stone Stair=Tangga Batu Dalam +Outer Stone Stair=Tangga Batu Luar +Stone Slab=Lempengan Batu +Cobblestone Stair=Tangga Bongkahan Batu +Inner Cobblestone Stair=Tangga Bongkahan Batu Dalam +Outer Cobblestone Stair=Tangga Bongkahan Batu Luar +Cobblestone Slab=Lempengan Bongkahan Batu +Mossy Cobblestone Stair=Tangga Bongkahan Batu Berlumut +Inner Mossy Cobblestone Stair=Tangga Bongkahan Batu Berlumut Dalam +Outer Mossy Cobblestone Stair=Tangga Bongkahan Batu Berlumut Luar +Mossy Cobblestone Slab=Lempengan Bongkahan Batu Berlumut +Stone Brick Stair=Tangga Tembok Batu +Inner Stone Brick Stair=Tangga Tembok Batu Dalam +Outer Stone Brick Stair=Tangga Tembok Batu Luar +Stone Brick Slab=Lempengan Tembok Batu +Stone Block Stair=Tangga Balok Batu +Inner Stone Block Stair=Tangga Balok Batu Dalam +Outer Stone Block Stair=Tangga Balok Batu Luar +Stone Block Slab=Lempengan Balok Batu +Desert Stone Stair=Tangga Batu Gurun +Inner Desert Stone Stair=Tangga Batu Gurun Dalam +Outer Desert Stone Stair=Tangga Batu Gurun Luar +Desert Stone Slab=Lempengan Batu Gurun +Desert Cobblestone Stair=Tangga Bongkahan Batu Gurun +Inner Desert Cobblestone Stair=Tangga Bongkahan Batu Gurun Dalam +Outer Desert Cobblestone Stair=Tangga Bongkahan Batu Gurun Luar +Desert Cobblestone Slab=Lempengan Bongkahan Batu Gurun +Desert Stone Brick Stair=Tangga Tembok Batu Gurun +Inner Desert Stone Brick Stair=Tangga Tembok Batu Gurun Dalam +Outer Desert Stone Brick Stair=Tangga Tembok Batu Gurun Luar +Desert Stone Brick Slab=Lempengan Tembok Batu Gurun +Desert Stone Block Stair=Tangga Balok Batu Gurun +Inner Desert Stone Block Stair=Tangga Balok Batu Gurun Dalam +Outer Desert Stone Block Stair=Tangga Balok Batu Gurun Luar +Desert Stone Block Slab=Lempengan Balok Batu Gurun +Sandstone Stair=Tangga Batu Pasir +Inner Sandstone Stair=Tangga Batu Pasir Dalam +Outer Sandstone Stair=Tangga Batu Pasir Luar +Sandstone Slab=Lempengan Batu Pasir +Sandstone Brick Stair=Tangga Tembok Batu Pasir +Inner Sandstone Brick Stair=Tangga Tembok Batu Pasir Dalam +Outer Sandstone Brick Stair=Tangga Tembok Batu Pasir Luar +Sandstone Brick Slab=Lempengan Tembok Batu Pasir +Sandstone Block Stair=Tangga Balok Batu Pasir +Inner Sandstone Block Stair=Tangga Balok Batu Pasir Dalam +Outer Sandstone Block Stair=Tangga Balok Batu Pasir Luar +Sandstone Block Slab=Lempengan Balok Batu Pasir +Desert Sandstone Stair=Tangga Batu Pasir Gurun +Inner Desert Sandstone Stair=Tangga Batu Pasir Gurun Dalam +Outer Desert Sandstone Stair=Tangga Batu Pasir Gurun Luar +Desert Sandstone Slab=Lempengan Batu Pasir Gurun +Desert Sandstone Brick Stair=Tangga Tembok Batu Pasir Gurun +Inner Desert Sandstone Brick Stair=Tangga Tembok Batu Pasir Gurun Dalam +Outer Desert Sandstone Brick Stair=Tangga Tembok Batu Pasir Gurun Luar +Desert Sandstone Brick Slab=Lempengan Tembok Batu Pasir Gurun +Desert Sandstone Block Stair=Tangga Balok Batu Pasir Gurun +Inner Desert Sandstone Block Stair=Tangga Balok Batu Pasir Gurun Dalam +Outer Desert Sandstone Block Stair=Tangga Balok Batu Pasir Gurun Luar +Desert Sandstone Block Slab=Lempengan Balok Batu Pasir Gurun +Silver Sandstone Stair=Tangga Batu Pasir Perak +Inner Silver Sandstone Stair=Tangga Batu Pasir Perak Dalam +Outer Silver Sandstone Stair=Tangga Batu Pasir Perak Luar +Silver Sandstone Slab=Lempengan Batu Pasir Perak +Silver Sandstone Brick Stair=Tangga Tembok Batu Pasir Perak +Inner Silver Sandstone Brick Stair=Tangga Tembok Batu Pasir Perak Dalam +Outer Silver Sandstone Brick Stair=Tangga Tembok Batu Pasir Perak Luar +Silver Sandstone Brick Slab=Lempengan Tembok Batu Pasir Perak +Silver Sandstone Block Stair=Tangga Balok Batu Pasir Perak +Inner Silver Sandstone Block Stair=Tangga Balok Batu Pasir Perak Dalam +Outer Silver Sandstone Block Stair=Tangga Balok Batu Pasir Perak Luar +Silver Sandstone Block Slab=Lempengan Balok Batu Pasir Perak +Obsidian Stair=Tangga Obsidian +Inner Obsidian Stair=Tangga Obsidian Dalam +Outer Obsidian Stair=Tangga Obsidian Luar +Obsidian Slab=Lempengan Obsidian +Obsidian Brick Stair=Tangga Tembok Obsidian +Inner Obsidian Brick Stair=Tangga Tembok Obsidian Dalam +Outer Obsidian Brick Stair=Tangga Tembok Obsidian Luar +Obsidian Brick Slab=Lempengan Tembok Obsidian +Obsidian Block Stair=Tangga Balok Obsidian +Inner Obsidian Block Stair=Tangga Balok Obsidian Dalam +Outer Obsidian Block Stair=Tangga Balok Obsidian Luar +Obsidian Block Slab=Lempengan Balok Obsidian +Brick Stair=Tangga Bata +Inner Brick Stair=Tangga Bata Dalam +Outer Brick Stair=Tangga Bata Luar +Brick Slab=Lempengan Bata +Steel Block Stair=Tangga Balok Baja +Inner Steel Block Stair=Tangga Balok Baja Dalam +Outer Steel Block Stair=Tangga Balok Baja Luar +Steel Block Slab=Lempengan Balok Baja +Tin Block Stair=Tangga Balok Timah +Inner Tin Block Stair=Tangga Balok Timah Dalam +Outer Tin Block Stair=Tangga Balok Timah Luar +Tin Block Slab=Lempengan Balok Timah +Copper Block Stair=Tangga Balok Tembaga +Inner Copper Block Stair=Tangga Balok Tembaga Dalam +Outer Copper Block Stair=Tangga Balok Tembaga Luar +Copper Block Slab=Lempengan Balok Tembaga +Bronze Block Stair=Tangga Balok Perunggu +Inner Bronze Block Stair=Tangga Balok Perunggu Dalam +Outer Bronze Block Stair=Tangga Balok Perunggu Luar +Bronze Block Slab=Lempengan Balok Perunggu +Gold Block Stair=Tangga Balok Emas +Inner Gold Block Stair=Tangga Balok Emas Dalam +Outer Gold Block Stair=Tangga Balok Emas Luar +Gold Block Slab=Lempengan Balok Emas +Ice Stair=Tangga Es +Inner Ice Stair=Tangga Es Dalam +Outer Ice Stair=Tangga Es Luar +Ice Slab=Lempengan Es +Snow Block Stair=Tangga Balok Salju +Inner Snow Block Stair=Tangga Balok Salju Dalam +Outer Snow Block Stair=Tangga Balok Salju Luar +Snow Block Slab=Lempengan Balok Salju diff --git a/mods/stairs/locale/stairs.it.tr b/mods/stairs/locale/stairs.it.tr new file mode 100644 index 00000000..16945ec6 --- /dev/null +++ b/mods/stairs/locale/stairs.it.tr @@ -0,0 +1,145 @@ +# textdomain: stairs +Glass Stair=Scala di vetro +Glass Slab=Lastra di vetro +Inner Glass Stair=Scala di vetro interna +Outer Glass Stair=Scala di vetro esterna +Obsidian Glass Stair=Scala di vetro d'ossidiana +Obsidian Glass Slab=Lastra di vetro d'ossidiana +Inner Obsidian Glass Stair=Scala di vetro d'ossidiana interna +Outer Obsidian Glass Stair=Scala di vetro d'ossidiana esterna +Wooden Stair=Scala di legno +Inner Wooden Stair=Scala di legno interna +Outer Wooden Stair=Scala di legno esterna +Wooden Slab=Lastra di legno +Jungle Wood Stair=Scala di legno della giungla +Inner Jungle Wood Stair=Scala di legno della giungla interna +Outer Jungle Wood Stair=Scala di legno della giungla esterna +Jungle Wood Slab=Lastra di legno della giungla +Pine Wood Stair=Scala di legno di pino +Inner Pine Wood Stair=Scala di legno di pino interna +Outer Pine Wood Stair=Scala di legno di pino esterna +Pine Wood Slab=Lastra di legno di pino +Acacia Wood Stair=Scala di legno d'acacia +Inner Acacia Wood Stair=Scala di legno d'acacia interna +Outer Acacia Wood Stair=Scala di legno d'acacia esterna +Acacia Wood Slab=Lastra di legno d'acacia +Aspen Wood Stair=Scala di legno di pioppo +Inner Aspen Wood Stair=Scala di legno di pioppo interna +Outer Aspen Wood Stair=Scala di legno di pioppo esterna +Aspen Wood Slab=Lastra di legno di pioppo +Stone Stair=Scala di pietra +Inner Stone Stair=Scala di pietra interna +Outer Stone Stair=Scala di pietra esterna +Stone Slab=Lastra di pietra +Cobblestone Stair=Scala di ciottoli +Inner Cobblestone Stair=Scala di ciottoli interna +Outer Cobblestone Stair=Scala di ciottoli esterna +Cobblestone Slab=Lastra di ciottoli +Mossy Cobblestone Stair=Scala di ciottoli muschiosi +Inner Mossy Cobblestone Stair=Scala di ciottoli muschiosi interna +Outer Mossy Cobblestone Stair=Scala di ciottoli muschiosi esterna +Mossy Cobblestone Slab=Lastra di ciottoli muschiosi +Stone Brick Stair=Scala di mattone di pietra +Inner Stone Brick Stair=Scala di mattone di pietra interna +Outer Stone Brick Stair=Scala di mattone di pietra esterna +Stone Brick Slab=Lastra di mattone di pietra +Stone Block Stair=Scala di blocco di pietra +Inner Stone Block Stair=Scala di blocco di pietra interna +Outer Stone Block Stair=Scala di blocco di pietra esterna +Stone Block Slab=Lastra di blocco di pietra +Desert Stone Stair=Scala di pietra del deserto +Inner Desert Stone Stair=Scala di pietra del deserto interna +Outer Desert Stone Stair=Scala di pietra del deserto esterna +Desert Stone Slab=Lastra di pietra del deserto +Desert Cobblestone Stair=Scala di ciottoli del deserto +Inner Desert Cobblestone Stair=Scala di ciottoli del deserto interna +Outer Desert Cobblestone Stair=Scala di ciottoli del deserto esterna +Desert Cobblestone Slab=Lastra di ciottoli del deserto +Desert Stone Brick Stair=Scala di mattone di pietra del deserto +Inner Desert Stone Brick Stair=Scala di mattone di pietra del deserto interna +Outer Desert Stone Brick Stair=Scala di mattone di pietra del deserto esterna +Desert Stone Brick Slab=Lastra di mattone di pietra del deserto +Desert Stone Block Stair=Scala di blocco di pietra del deserto +Inner Desert Stone Block Stair=Scala di blocco di pietra del deserto interna +Outer Desert Stone Block Stair=Scala di blocco di pietra del deserto esterna +Desert Stone Block Slab=Lastra di blocco di pietra del deserto +Sandstone Stair=Scala d'arenaria +Inner Sandstone Stair=Scala d'arenaria interna +Outer Sandstone Stair=Scala d'arenaria esterna +Sandstone Slab=Lastra d'arenaria +Sandstone Brick Stair=Scala di mattone d'arenaria +Inner Sandstone Brick Stair=Scala di mattone d'arenaria interna +Outer Sandstone Brick Stair=Scala di mattone d'arenaria esterna +Sandstone Brick Slab=Lastra di mattone d'arenaria +Sandstone Block Stair=Scala di blocco d'arenaria +Inner Sandstone Block Stair=Scala di blocco d'arenaria interna +Outer Sandstone Block Stair=Scala di blocco d'arenaria esterna +Sandstone Block Slab=Lastra di blocco d'arenaria +Desert Sandstone Stair=Scala d'arenaria del deserto +Inner Desert Sandstone Stair=Scala d'arenaria del deserto interna +Outer Desert Sandstone Stair=Scala d'arenaria del deserto esterna +Desert Sandstone Slab=Lastra d'arenaria del deserto +Desert Sandstone Brick Stair=Scala di mattone d'arenaria del deserto +Inner Desert Sandstone Brick Stair=Scala di mattone d'arenaria del deserto interna +Outer Desert Sandstone Brick Stair=Scala di mattone d'arenaria del deserto esterna +Desert Sandstone Brick Slab=Lastra di mattone d'arenaria del deserto +Desert Sandstone Block Stair=Scala di blocco d'arenaria del deserto +Inner Desert Sandstone Block Stair=Scala di blocco d'arenaria del deserto interna +Outer Desert Sandstone Block Stair=Scala di blocco d'arenaria del deserto esterna +Desert Sandstone Block Slab=Lastra di blocco d'arenaria del deserto +Silver Sandstone Stair=Scala d'arenaria argentata +Inner Silver Sandstone Stair=Scala d'arenaria argentata interna +Outer Silver Sandstone Stair=Scala d'arenaria argentata esterna +Silver Sandstone Slab=Lastra d'arenaria argentata +Silver Sandstone Brick Stair=Scala di mattone d'arenaria argentata +Inner Silver Sandstone Brick Stair=Scala di mattone d'arenaria argentata interna +Outer Silver Sandstone Brick Stair=Scala di mattone d'arenaria argentata esterna +Silver Sandstone Brick Slab=Lastra di mattone d'arenaria argentata +Silver Sandstone Block Stair=Scala di blocco d'arenaria argentata +Inner Silver Sandstone Block Stair=Scala di blocco d'arenaria argentata interna +Outer Silver Sandstone Block Stair=Scala di blocco d'arenaria argentata esterna +Silver Sandstone Block Slab=Lastra di blocco d'arenaria argentata +Obsidian Stair=Scala d'ossidiana +Inner Obsidian Stair=Scala d'ossidiana interna +Outer Obsidian Stair=Scala d'ossidiana esterna +Obsidian Slab=Lastra d'ossidiana +Obsidian Brick Stair=Scala di mattone d'ossidiana +Inner Obsidian Brick Stair=Scala di mattone d'ossidiana interna +Outer Obsidian Brick Stair=Scala di mattone d'ossidiana esterna +Obsidian Brick Slab=Lastra di mattone d'ossidiana +Obsidian Block Stair=Scala di blocco d'ossidiana +Inner Obsidian Block Stair=Scala di blocco d'ossidiana interna +Outer Obsidian Block Stair=Scala di blocco d'ossidiana esterna +Obsidian Block Slab=Lastra di blocco d'ossidiana +Brick Stair=Scala di mattone +Inner Brick Stair=Scala di mattone interna +Outer Brick Stair=Scala di mattone esterna +Brick Slab=Lastra di mattone +Steel Block Stair=Scala di blocco d'acciaio +Inner Steel Block Stair=Scala di blocco d'acciaio interna +Outer Steel Block Stair=Scala di blocco d'acciaio esterna +Steel Block Slab=Lastra di blocco d'acciaio +Tin Block Stair=Scala di blocco di stagno +Inner Tin Block Stair=Scala di blocco di stagno interna +Outer Tin Block Stair=Scala di blocco di stagno esterna +Tin Block Slab=Lastra di blocco di stagno +Copper Block Stair=Scala di blocco di rame +Inner Copper Block Stair=Scala di blocco di rame interna +Outer Copper Block Stair=Scala di blocco di rame esterna +Copper Block Slab=Lastra di blocco di rame +Bronze Block Stair=Scala di blocco di bronzo +Inner Bronze Block Stair=Scala di blocco di bronzo interna +Outer Bronze Block Stair=Scala di blocco di bronzo esterna +Bronze Block Slab=Lastra di blocco di bronzo +Gold Block Stair=Scala di blocco d'oro +Inner Gold Block Stair=Scala di blocco d'oro interna +Outer Gold Block Stair=Scala di blocco d'oro esterna +Gold Block Slab=Lastra di blocco d'oro +Ice Stair=Scala di ghiaccio +Inner Ice Stair=Scala di ghiaccio interna +Outer Ice Stair=Scala di ghiaccio esterna +Ice Slab=Lastra di ghiaccio +Snow Block Stair=Scala di blocco di neve +Inner Snow Block Stair=Scala di blocco di neve interna +Outer Snow Block Stair=Scala di blocco di neve esterna +Snow Block Slab=Lastra di blocco di neve diff --git a/mods/stairs/locale/stairs.ja.tr b/mods/stairs/locale/stairs.ja.tr new file mode 100644 index 00000000..73e2703c --- /dev/null +++ b/mods/stairs/locale/stairs.ja.tr @@ -0,0 +1,145 @@ +# textdomain: stairs +Glass Stair=ガラスの階段 +Glass Slab=ガラスのハーフブロック +Inner Glass Stair=へっこんだガラスの階段 +Outer Glass Stair=でっぱったガラスの階段 +Obsidian Glass Stair=黒曜石ガラスの階段 +Obsidian Glass Slab=黒曜石ガラスのハーフブロック +Inner Obsidian Glass Stair=へっこんだ黒曜石ガラスの階段 +Outer Obsidian Glass Stair=でっぱった黒曜石ガラスの階段 +Wooden Stair=木の階段 +Inner Wooden Stair=へっこんだ木の階段 +Outer Wooden Stair=でっぱった木の階段 +Wooden Slab=木のハーフブロック +Jungle Wood Stair=ジャングルの階段 +Inner Jungle Wood Stair=へっこんだジャングルの階段 +Outer Jungle Wood Stair=でっぱったジャングルの階段 +Jungle Wood Slab=ジャングルのハーフブロック +Pine Wood Stair=マツの木の階段 +Inner Pine Wood Stair=へっこんだマツの階段 +Outer Pine Wood Stair=でっぱったマツの階段 +Pine Wood Slab=マツのハーフブロック +Acacia Wood Stair=アカシアの階段 +Inner Acacia Wood Stair=へっこんだアカシアの階段 +Outer Acacia Wood Stair=でっぱったアカシアの階段 +Acacia Wood Slab=アカシアのハーフブロック +Aspen Wood Stair=ポプラの階段 +Inner Aspen Wood Stair=へっこんだポプラの階段 +Outer Aspen Wood Stair=でっぱったポプラの階段 +Aspen Wood Slab=ポプラのハーフブロック +Stone Stair=石の階段 +Inner Stone Stair=へっこんだ石の階段 +Outer Stone Stair=でっぱった石の階段 +Stone Slab=石のハーフブロック +Cobblestone Stair=丸石の階段 +Inner Cobblestone Stair=へっこんだ丸石の階段 +Outer Cobblestone Stair=でっぱった丸石の階段 +Cobblestone Slab=丸石のハーフブロック +Mossy Cobblestone Stair=苔むした丸石の階段 +Inner Mossy Cobblestone Stair=へっこんだ苔むした丸石の階段 +Outer Mossy Cobblestone Stair=でっぱった苔むした丸石の階段 +Mossy Cobblestone Slab=苔むした丸石のハーフブロック +Stone Brick Stair=石レンガの階段 +Inner Stone Brick Stair=へっこんだ石レンガの階段 +Outer Stone Brick Stair=でっぱった石レンガの階段 +Stone Brick Slab=石レンガのハーフブロック +Stone Block Stair=石ブロックの階段 +Inner Stone Block Stair=へっこんだ石ブロックの階段 +Outer Stone Block Stair=でっぱった石ブロックの階段 +Stone Block Slab=石ブロックのハーフブロック +Desert Stone Stair=砂漠の石の階段 +Inner Desert Stone Stair=へっこんだ砂漠の石の階段 +Outer Desert Stone Stair=でっぱった砂漠の石の階段 +Desert Stone Slab=砂漠の石のハーフブロック +Desert Cobblestone Stair=砂漠の丸石の階段 +Inner Desert Cobblestone Stair=へっこんだ砂漠の丸石の階段 +Outer Desert Cobblestone Stair=でっぱった砂漠の丸石の階段 +Desert Cobblestone Slab=砂漠の丸石のハーフブロック +Desert Stone Brick Stair=砂漠の石レンガの階段 +Inner Desert Stone Brick Stair=へっこんだ砂漠の石レンガの階段 +Outer Desert Stone Brick Stair=でっぱった砂漠の石レンガの階段 +Desert Stone Brick Slab=砂漠の石レンガのハーフブロック +Desert Stone Block Stair=砂漠の石ブロックの階段 +Inner Desert Stone Block Stair=へっこんだ砂漠の石ブロックの階段 +Outer Desert Stone Block Stair=でっぱった砂漠の石ブロックの階段 +Desert Stone Block Slab=砂漠の石ブロックのハーフブロック +Sandstone Stair=砂岩の階段 +Inner Sandstone Stair=へっこんだ砂岩の階段 +Outer Sandstone Stair=でっぱった砂岩の階段 +Sandstone Slab=砂岩のハーフブロック +Sandstone Brick Stair=砂岩レンガの階段 +Inner Sandstone Brick Stair=へっこんだ砂岩レンガの階段 +Outer Sandstone Brick Stair=でっぱった砂岩レンガの階段 +Sandstone Brick Slab=砂岩レンガのハーフブロック +Sandstone Block Stair=砂岩ブロックの階段 +Inner Sandstone Block Stair=へっこんだ砂岩ブロックの階段 +Outer Sandstone Block Stair=でっぱった砂岩ブロックの階段 +Sandstone Block Slab=砂岩ブロックのハーフブロック +Desert Sandstone Stair=砂漠の砂岩の階段 +Inner Desert Sandstone Stair=へっこんだ砂漠の砂岩の階段 +Outer Desert Sandstone Stair=でっぱった砂漠の砂岩の階段 +Desert Sandstone Slab=砂漠の砂岩のハーフブロック +Desert Sandstone Brick Stair=砂漠の砂岩レンガの階段 +Inner Desert Sandstone Brick Stair=へっこんだ砂漠の砂岩レンガの階段 +Outer Desert Sandstone Brick Stair=でっぱった砂漠の砂岩レンガの階段 +Desert Sandstone Brick Slab=砂漠の砂岩レンガのハーフブロック +Desert Sandstone Block Stair=砂漠の砂岩ブロックの階段 +Inner Desert Sandstone Block Stair=へっこんだ砂漠の砂岩ブロックの階段 +Outer Desert Sandstone Block Stair=でっぱった砂漠の砂岩ブロックの階段 +Desert Sandstone Block Slab=砂漠の砂岩ブロックのハーフブロック +Silver Sandstone Stair=銀の砂岩の階段 +Inner Silver Sandstone Stair=へっこんだ銀の砂岩の階段 +Outer Silver Sandstone Stair=でっぱった銀の砂岩の階段 +Silver Sandstone Slab=銀の砂岩のハーフブロック +Silver Sandstone Brick Stair=銀の砂岩レンガの階段 +Inner Silver Sandstone Brick Stair=へっこんだ銀の砂岩レンガの階段 +Outer Silver Sandstone Brick Stair=でっぱった銀の砂岩レンガの階段 +Silver Sandstone Brick Slab=銀の砂岩レンガのハーフブロック +Silver Sandstone Block Stair=銀の砂岩ブロックの階段 +Inner Silver Sandstone Block Stair=へっこんだ銀の砂岩ブロックの階段 +Outer Silver Sandstone Block Stair=でっぱった銀の砂岩ブロックの階段 +Silver Sandstone Block Slab=銀の砂岩ブロックのハーフブロック +Obsidian Stair=黒曜石の階段 +Inner Obsidian Stair=へっこんだ黒曜石の階段 +Outer Obsidian Stair=でっぱった黒曜石の階段 +Obsidian Slab=黒曜石のハーフブロック +Obsidian Brick Stair=黒曜石レンガの階段 +Inner Obsidian Brick Stair=へっこんだ黒曜石レンガの階段 +Outer Obsidian Brick Stair=でっぱった黒曜石レンガの階段 +Obsidian Brick Slab=黒曜石レンガのハーフブロック +Obsidian Block Stair=黒曜石ブロックの階段 +Inner Obsidian Block Stair=へっこんだ黒曜石ブロックの階段 +Outer Obsidian Block Stair=でっぱった黒曜石ブロックの階段 +Obsidian Block Slab=黒曜石ブロックのハーフブロック +Brick Stair=レンガの階段 +Inner Brick Stair=へっこんだレンガの階段 +Outer Brick Stair=でっぱったレンガの階段 +Brick Slab=レンガのハーフブロック +Steel Block Stair=鉄ブロックの階段 +Inner Steel Block Stair=へっこんだ鉄ブロックの階段 +Outer Steel Block Stair=でっぱった鉄ブロックの階段 +Steel Block Slab=鉄ブロックのハーフブロック +Tin Block Stair=スズの階段 +Inner Tin Block Stair=へっこんだスズの階段 +Outer Tin Block Stair=でっぱったスズの階段 +Tin Block Slab=スズのハーフブロック +Copper Block Stair=銅ブロックの階段 +Inner Copper Block Stair=へっこんだ銅ブロックの階段 +Outer Copper Block Stair=でっぱった銅ブロックの階段 +Copper Block Slab=銅ブロックのハーフブロック +Bronze Block Stair=青銅ブロックの階段 +Inner Bronze Block Stair=へっこんだ青銅ブロックの階段 +Outer Bronze Block Stair=でっぱった青銅ブロックの階段 +Bronze Block Slab=青銅ブロックのハーフブロック +Gold Block Stair=金ブロックの階段 +Inner Gold Block Stair=へっこんだ金ブロックの階段 +Outer Gold Block Stair=でっぱった金ブロックの階段 +Gold Block Slab=金ブロックのハーフブロック +Ice Stair=氷の階段 +Inner Ice Stair=へっこんだ氷の階段 +Outer Ice Stair=でっぱった氷の階段 +Ice Slab=氷のハーフブロック +Snow Block Stair=雪の階段 +Inner Snow Block Stair=へっこんだ雪の階段 +Outer Snow Block Stair=でっぱった雪の階段 +Snow Block Slab=雪のハーフブロック diff --git a/mods/stairs/locale/stairs.jbo.tr b/mods/stairs/locale/stairs.jbo.tr new file mode 100644 index 00000000..91d28060 --- /dev/null +++ b/mods/stairs/locale/stairs.jbo.tr @@ -0,0 +1,145 @@ +# textdomain: stairs +Glass Stair=lo blaci serti +Glass Slab=lo blaci xadba bliku +Inner Glass Stair=lo zo'i blaci serti +Outer Glass Stair=lo ze'o blaci serti +Obsidian Glass Stair=lo je'erma'ablaci blaci serti +Obsidian Glass Slab=lo je'erma'ablaci blaci ke xadba bliku +Inner Obsidian Glass Stair=lo zo'i je'erma'ablaci blaci serti +Outer Obsidian Glass Stair=lo ze'o je'erma'ablaci blaci serti +Wooden Stair=lo mudri serti +Inner Wooden Stair=lo zo'i mudri serti +Outer Wooden Stair=lo ze'o mudri serti +Wooden Slab=lo mudri ke xadba bliku +Jungle Wood Stair=lo glatimdemricfoi mudri serti +Inner Jungle Wood Stair=lo zo'i glatimdemricfoi mudri serti +Outer Jungle Wood Stair=lo ze'o glatimdemricfoi mudri serti +Jungle Wood Slab=lo glatimdemricfoi mudri ke xadba bliku +Pine Wood Stair=lo ku'urmudri serti +Inner Pine Wood Stair=lo zo'i ku'urmudri serti +Outer Pine Wood Stair=lo ze'o ku'urmudri serti +Pine Wood Slab=lo ku'urmudri ke xadba bliku +Acacia Wood Stair=lo atkaci,ia mudri serti +Inner Acacia Wood Stair=lo zo'i atkaci,ia mudri serti +Outer Acacia Wood Stair=lo ze'o atkaci,ia mudri serti +Acacia Wood Slab=lo atkaci,ia mudri ke xadba bliku +Aspen Wood Stair=lo mudrpopulu serti +Inner Aspen Wood Stair=lo zo'i mudrpopulu serti +Outer Aspen Wood Stair=lo ze'o mudrpopulu serti +Aspen Wood Slab=lo mudrpopulu ke xadba bliku +Stone Stair=lo rokci serti +Inner Stone Stair=lo zo'i rokci serti +Outer Stone Stair=lo ze'o rokci serti +Stone Slab=lo rokci ke xadba bliku +Cobblestone Stair=lo lolro'iboi serti +Inner Cobblestone Stair=lo zo'i lolro'iboi serti +Outer Cobblestone Stair=lo ze'o lolro'iboi serti +Cobblestone Slab=lo lolro'iboi xadba bliku +Mossy Cobblestone Stair=lo clika lolro'iboi serti +Inner Mossy Cobblestone Stair=lo zo'i clika lolro'iboi serti +Outer Mossy Cobblestone Stair=lo ze'o clika lolro'iboi serti +Mossy Cobblestone Slab=lo clika lolro'iboi ke xadba bliku +Stone Brick Stair=lo morna rokci serti +Inner Stone Brick Stair=lo zo'i morna rokci serti +Outer Stone Brick Stair=lo ze'o morna rokci serti +Stone Brick Slab=lo morna rokci ke xadba bliku +Stone Block Stair=lo rokci bliku serti +Inner Stone Block Stair=lo zo'i rokci bliku serti +Outer Stone Block Stair=lo ze'o rokci bliku serti +Stone Block Slab=lo rokci bliku ke xadba bliku +Desert Stone Stair=lo cantu'a rokci serti +Inner Desert Stone Stair=lo zo'i cantu'a rokci serti +Outer Desert Stone Stair=lo ze'o cantu'a rokci serti +Desert Stone Slab=lo cantu'a rokci ke xadba bliku +Desert Cobblestone Stair=lo cantu'a lolro'iboi serti +Inner Desert Cobblestone Stair=lo zo'i cantu'a lolro'iboi serti +Outer Desert Cobblestone Stair=lo ze'o cantu'a lolro'iboi serti +Desert Cobblestone Slab=lo cantu'a lolro'iboi ke xadba bliku +Desert Stone Brick Stair=lo morna ke cantu'a rokci serti +Inner Desert Stone Brick Stair=lo zo'i morna ke cantu'a rokci serti +Outer Desert Stone Brick Stair=lo ze'o morna ke cantu'a rokci serti +Desert Stone Brick Slab=lo morna ke cantu'a rokci ke xadba bliku +Desert Stone Block Stair=lo cantu'a rokci bliku serti +Inner Desert Stone Block Stair=lo zo'i cantu'a rokci bliku serti +Outer Desert Stone Block Stair=lo ze'o cantu'a rokci bliku serti +Desert Stone Block Slab=lo cantu'a rokci bliku ke xadba bliku +Sandstone Stair=lo canro'i serti +Inner Sandstone Stair=lo zo'i canro'i serti +Outer Sandstone Stair=lo ze'o canro'i serti +Sandstone Slab=lo canro'i ke xadba bliku +Sandstone Brick Stair=lo morna ke canro'i serti +Inner Sandstone Brick Stair=lo zo'i morna ke canro'i serti +Outer Sandstone Brick Stair=lo ze'o morna ke canro'i serti +Sandstone Brick Slab=lo morna canro'i ke xadba bliku +Sandstone Block Stair=lo canro'i bliku serti +Inner Sandstone Block Stair=lo zo'i canro'i bliku serti +Outer Sandstone Block Stair=lo ze'o canro'i bliku serti +Sandstone Block Slab=lo canro'i bliku ke xadba bliku +Desert Sandstone Stair=lo cantu'a canro'i serti +Inner Desert Sandstone Stair=lo zo'i cantu'a canro'i serti +Outer Desert Sandstone Stair=lo ze'o cantu'a canro'i serti +Desert Sandstone Slab=lo cantu'a canro'i ke xadba bliku +Desert Sandstone Brick Stair=lo morna ke cantu'a canro'i serti +Inner Desert Sandstone Brick Stair=lo zo'i morna ke cantu'a canro'i serti +Outer Desert Sandstone Brick Stair=lo ze'o morna ke cantu'a canro'i serti +Desert Sandstone Brick Slab=lo morna ke cantu'a canro'i ke xadba bliku +Desert Sandstone Block Stair=lo cantu'a canro'i bliku serti +Inner Desert Sandstone Block Stair=lo zo'i cantu'a canro'i bliku serti +Outer Desert Sandstone Block Stair=lo ze'o cantu'a canro'i bliku serti +Desert Sandstone Block Slab=lo cantu'a canro'i ke xadba bliku +Silver Sandstone Stair=lo rijyska canro'i serti +Inner Silver Sandstone Stair=lo zo'i rijyska canro'i serti +Outer Silver Sandstone Stair=lo ze'o rijyska canro'i serti +Silver Sandstone Slab=lo rijyska canro'i ke xadba bliku +Silver Sandstone Brick Stair=lo morna ke rijyska canro'i serti +Inner Silver Sandstone Brick Stair=lo zo'i morna ke rijyska canro'i serti +Outer Silver Sandstone Brick Stair=lo ze'o morna ke rijyska canro'i serti +Silver Sandstone Brick Slab=lo morna ke rijyska canro'i ke xadba bliku +Silver Sandstone Block Stair=lo rijyska canro'i bliku serti +Inner Silver Sandstone Block Stair=lo zo'i rijyska canro'i bliku serti +Outer Silver Sandstone Block Stair=lo ze'o rijyska canro'i bliku serti +Silver Sandstone Block Slab=lo rijyska canro'i bliku ke xadba bliku +Obsidian Stair=lo je'erma'ablaci serti +Inner Obsidian Stair=lo zo'i je'erma'ablaci serti +Outer Obsidian Stair=lo ze'o je'erma'ablaci serti +Obsidian Slab=lo je'erma'ablaci ke xadba bliku +Obsidian Brick Stair=lo morna ke je'erma'ablaci serti +Inner Obsidian Brick Stair=lo zo'i morna ke je'erma'ablaci serti +Outer Obsidian Brick Stair=lo ze'o morna ke je'erma'ablaci serti +Obsidian Brick Slab=lo morna je'erma'ablaci ke xadba bliku +Obsidian Block Stair=lo je'erma'ablaci bliku serti +Inner Obsidian Block Stair=lo zo'i je'erma'ablaci bliku serti +Outer Obsidian Block Stair=lo ze'o je'erma'ablaci bliku serti +Obsidian Block Slab=lo je'erma'ablaci bliku ke xadba bliku +Brick Stair=lo kitybli serti +Inner Brick Stair=lo zo'i kitybli serti +Outer Brick Stair=lo ze'o kitybli serti +Brick Slab=lo kitybli xadba bliku +Steel Block Stair=lo gasta bliku serti +Inner Steel Block Stair=lo zo'i gasta bliku serti +Outer Steel Block Stair=lo ze'o gasta bliku serti +Steel Block Slab=lo gasta bliku ke xadba bliku +Tin Block Stair=lo tinci bliku serti +Inner Tin Block Stair=lo zo'i tinci bliku serti +Outer Tin Block Stair=lo ze'o tinci bliku serti +Tin Block Slab=lo tinci bliku ke xadba bliku +Copper Block Stair=lo tunka bliku serti +Inner Copper Block Stair=lo zo'i tunka bliku serti +Outer Copper Block Stair=lo ze'o tunka bliku serti +Copper Block Slab=lo tunka xadba bliku +Bronze Block Stair=lo ransu bliku serti +Inner Bronze Block Stair=lo zo'i ransu bliku serti +Outer Bronze Block Stair=lo ze'o ransu bliku serti +Bronze Block Slab=lo ransu xadba bliku +Gold Block Stair=lo solji bliku serti +Inner Gold Block Stair=lo zo'i solji bliku serti +Outer Gold Block Stair=lo ze'o solji bliku serti +Gold Block Slab=lo solji bliku ke xadba bliku +Ice Stair=lo bisli serti +Inner Ice Stair=lo zo'i bisli serti +Outer Ice Stair=lo ze'o bisli serti +Ice Slab=lo bisli ke xadba bliku +Snow Block Stair=lo snime bliku serti +Inner Snow Block Stair=lo zo'i snime bliku serti +Outer Snow Block Stair=lo ze'o snime bliku serti +Snow Block Slab=lo snime bliku ke xadba bliku diff --git a/mods/stairs/locale/stairs.ms.tr b/mods/stairs/locale/stairs.ms.tr new file mode 100644 index 00000000..a39c7f63 --- /dev/null +++ b/mods/stairs/locale/stairs.ms.tr @@ -0,0 +1,145 @@ +# textdomain: stairs +Glass Stair=Tangga Kaca +Glass Slab=Papak Kaca +Inner Glass Stair=Tangga Kaca Dalaman +Outer Glass Stair=Tangga Kaca Luaran +Obsidian Glass Stair=Tangga Obsidia +Obsidian Glass Slab=Papak Obsidia +Inner Obsidian Glass Stair=Tangga Obsidia Dalaman +Outer Obsidian Glass Stair=Tangga Obsidia Luaran +Wooden Stair=Tangga Kayu +Inner Wooden Stair=Tangga Kayu Dalaman +Outer Wooden Stair=Tangga Kayu Luaran +Wooden Slab=Papak Kayu +Jungle Wood Stair=Tangga Kayu Hutan +Inner Jungle Wood Stair=Tangga Kayu Hutan Dalaman +Outer Jungle Wood Stair=Tangga Kayu Hutan Luaran +Jungle Wood Slab=Papak Kayu Hutan +Pine Wood Stair=Tangga Kayu Pain +Inner Pine Wood Stair=Tangga Kayu Pain Dalaman +Outer Pine Wood Stair=Tangga Kayu Pain Luaran +Pine Wood Slab=Papak Kayu Pain +Acacia Wood Stair=Tangga Kayu Akasia +Inner Acacia Wood Stair=Tangga Kayu Akasia Dalaman +Outer Acacia Wood Stair=Tangga Kayu Akasia Luaran +Acacia Wood Slab=Papak Kayu Akasia +Aspen Wood Stair=Tangga Kayu Aspen +Inner Aspen Wood Stair=Tangga Kayu Aspen Dalaman +Outer Aspen Wood Stair=Tangga Kayu Aspen Luaran +Aspen Wood Slab=Papak Kayu Aspen +Stone Stair=Tangga Batu +Inner Stone Stair=Tangga Batu Dalaman +Outer Stone Stair=Tangga Batu Luaran +Stone Slab=Papak Batu +Cobblestone Stair=Tangga Batu Buntar +Inner Cobblestone Stair=Tangga Batu Buntar Dalaman +Outer Cobblestone Stair=Tangga Batu Buntar Luaran +Cobblestone Slab=Papak Batu Buntar +Mossy Cobblestone Stair=Tangga Batu Buntar Berlumut +Inner Mossy Cobblestone Stair=Tangga Batu Buntar Berlumut Dalaman +Outer Mossy Cobblestone Stair=Tangga Batu Buntar Berlumut Luaran +Mossy Cobblestone Slab=Papak Batu Buntar Berlumut +Stone Brick Stair=Tangga Bata Batu +Inner Stone Brick Stair=Tangga Bata Batu Dalaman +Outer Stone Brick Stair=Tangga Bata Batu Luaran +Stone Brick Slab=Papak Bata Batu +Stone Block Stair=Tangga Bongkah Batu +Inner Stone Block Stair=Tangga Bongkah Batu Dalaman +Outer Stone Block Stair=Tangga Bongkah Batu Luaran +Stone Block Slab=Papak Bongkah Batu +Desert Stone Stair=Tangga Batu Gurun +Inner Desert Stone Stair=Tangga Batu Gurun Dalaman +Outer Desert Stone Stair=Tangga Batu Gurun Luaran +Desert Stone Slab=Papak Batu Gurun +Desert Cobblestone Stair=Tangga Batu Buntar Gurun +Inner Desert Cobblestone Stair=Tangga Batu Buntar Gurun Dalaman +Outer Desert Cobblestone Stair=Tangga Batu Buntar Gurun Luaran +Desert Cobblestone Slab=Papak Batu Buntar Gurun +Desert Stone Brick Stair=Tangga Bata Batu Gurun +Inner Desert Stone Brick Stair=Tangga Bata Batu Gurun Dalaman +Outer Desert Stone Brick Stair=Tangga Bata Batu Gurun Luaran +Desert Stone Brick Slab=Papak Bata Batu Gurun +Desert Stone Block Stair=Tangga Bongkah Batu Gurun +Inner Desert Stone Block Stair=Tangga Bongkah Batu Gurun Dalaman +Outer Desert Stone Block Stair=Tangga Bongkah Batu Gurun Luaran +Desert Stone Block Slab=Papak Bongkah Batu Gurun +Sandstone Stair=Tangga Batu Pasir +Inner Sandstone Stair=Tangga Batu Pasir Dalaman +Outer Sandstone Stair=Tangga Batu Pasir Luaran +Sandstone Slab=Papak Batu Pasir +Sandstone Brick Stair=Tangga Bata Batu Pasir +Inner Sandstone Brick Stair=Tangga Bata Batu Pasir Dalaman +Outer Sandstone Brick Stair=Tangga Bata Batu Pasir Luaran +Sandstone Brick Slab=Papak Bata Batu Pasir +Sandstone Block Stair=Tangga Bongkah Batu Pasir +Inner Sandstone Block Stair=Tangga Bongkah Batu Pasir Dalaman +Outer Sandstone Block Stair=Tangga Bongkah Batu Pasir Luaran +Sandstone Block Slab=Papak Bongkah Batu Pasir +Desert Sandstone Stair=Tangga Batu Pasir Gurun +Inner Desert Sandstone Stair=Tangga Batu Pasir Gurun Dalaman +Outer Desert Sandstone Stair=Tangga Batu Pasir Gurun Luaran +Desert Sandstone Slab=Papak Batu Pasir Gurun +Desert Sandstone Brick Stair=Tangga Bata Batu Pasir Gurun +Inner Desert Sandstone Brick Stair=Tangga Bata Batu Pasir Gurun Dalaman +Outer Desert Sandstone Brick Stair=Tangga Bata Batu Pasir Gurun Luaran +Desert Sandstone Brick Slab=Papak Bata Batu Pasir Gurun +Desert Sandstone Block Stair=Tangga Bongkah Batu Pasir Gurun +Inner Desert Sandstone Block Stair=Tangga Bongkah Batu Pasir Gurun Dalaman +Outer Desert Sandstone Block Stair=Tangga Bongkah Batu Pasir Gurun Luaran +Desert Sandstone Block Slab=Papak Bongkah Batu Pasir Gurun +Silver Sandstone Stair=Tangga Batu Pasir Perak +Inner Silver Sandstone Stair=Tangga Batu Pasir Perak Dalaman +Outer Silver Sandstone Stair=Tangga Batu Pasir Perak Luaran +Silver Sandstone Slab=Papak Batu Pasir Perak +Silver Sandstone Brick Stair=Tangga Bata Batu Pasir Perak +Inner Silver Sandstone Brick Stair=Tangga Bata Batu Pasir Perak Dalaman +Outer Silver Sandstone Brick Stair=Tangga Bata Batu Pasir Perak Luaran +Silver Sandstone Brick Slab=Papak Bata Batu Pasir Perak +Silver Sandstone Block Stair=Tangga Bongkah Batu Pasir Perak +Inner Silver Sandstone Block Stair=Tangga Bongkah Batu Pasir Perak Dalaman +Outer Silver Sandstone Block Stair=Tangga Bongkah Batu Pasir Perak Luaran +Silver Sandstone Block Slab=Papak Bongkah Batu Pasir Perak +Obsidian Stair=Tangga Obsidia +Inner Obsidian Stair=Tangga Obsidia Dalaman +Outer Obsidian Stair=Tangga Obsidia Luaran +Obsidian Slab=Papak Obsidia +Obsidian Brick Stair=Tangga Bata Obsidia +Inner Obsidian Brick Stair=Tangga Bata Obsidia Dalaman +Outer Obsidian Brick Stair=Tangga Bata Obsidia Luaran +Obsidian Brick Slab=Papak Bata Obsidia +Obsidian Block Stair=Tangga Bongkah Obsidia +Inner Obsidian Block Stair=Tangga Bongkah Obsidia Dalaman +Outer Obsidian Block Stair=Tangga Bongkah Obsidia Luaran +Obsidian Block Slab=Papak Bongkah Obsidia +Brick Stair=Tangga Bata +Inner Brick Stair=Tangga Bata Dalaman +Outer Brick Stair=Tangga Bata Luaran +Brick Slab=Papak Bata +Steel Block Stair=Tangga Bongkah Keluli +Inner Steel Block Stair=Tangga Bongkah Keluli Dalaman +Outer Steel Block Stair=Tangga Bongkah Keluli Luaran +Steel Block Slab=Papak Bongkah Keluli +Tin Block Stair=Tangga Bongkah Timah +Inner Tin Block Stair=Tangga Bongkah Timah Dalaman +Outer Tin Block Stair=Tangga Bongkah Timah Luaran +Tin Block Slab=Papak Bongkah Timah +Copper Block Stair=Tangga Bongkah Tembaga +Inner Copper Block Stair=Tangga Bongkah Tembaga Dalaman +Outer Copper Block Stair=Tangga Bongkah Tembaga Luaran +Copper Block Slab=Papak Bongkah Tembaga +Bronze Block Stair=Tangga Bongkah Gangsa +Inner Bronze Block Stair=Tangga Bongkah Gangsa Dalaman +Outer Bronze Block Stair=Tangga Bongkah Gangsa Luaran +Bronze Block Slab=Papak Bongkah Gangsa +Gold Block Stair=Tangga Bongkah Emas +Inner Gold Block Stair=Tangga Bongkah Emas Dalaman +Outer Gold Block Stair=Tangga Bongkah Emas Luaran +Gold Block Slab=Papak Bongkah Emas +Ice Stair=Tangga Ais +Inner Ice Stair=Tangga Ais Dalaman +Outer Ice Stair=Tangga Ais Luaran +Ice Slab=Papak Ais +Snow Block Stair=Tangga Bongkah Salji +Inner Snow Block Stair=Tangga Bongkah Salji Dalaman +Outer Snow Block Stair=Tangga Bongkah Salji Luaran +Snow Block Slab=Papak Bongkah Salji diff --git a/mods/stairs/locale/stairs.pl.tr b/mods/stairs/locale/stairs.pl.tr new file mode 100644 index 00000000..14eed7b9 --- /dev/null +++ b/mods/stairs/locale/stairs.pl.tr @@ -0,0 +1,145 @@ +# textdomain: stairs +Glass Stair=Schody ze szkła +Glass Slab=Półblok ze szkła +Inner Glass Stair=Wewnętrzne schody ze szkła +Outer Glass Stair=Zewnętrzne schody ze szkła +Obsidian Glass Stair=Schody z obsydianowego szkła +Obsidian Glass Slab=Półblok z obsydianowego szkła +Inner Obsidian Glass Stair=Wewnętrzne schody z obsydianowego szkła +Outer Obsidian Glass Stair=Zewnętrzne schody z obsydianowego szkła +Wooden Stair=Schody z drewna +Inner Wooden Stair=Wewnętrzne schody z drewna +Outer Wooden Stair=Zewnętrzne schody z drewna +Wooden Slab=Półblok z drewna +Jungle Wood Stair=Schody z dżunglowego drewna +Inner Jungle Wood Stair=Wewnętrzne schody z dżunglowego drewna +Outer Jungle Wood Stair=Zewnętrzne schody z dżunglowego drewna +Jungle Wood Slab=Półblok z dżunglowego drewna +Pine Wood Stair=Schody z sosnowego drzewa +Inner Pine Wood Stair=Wewnętrzne schody z sosnowego drewna +Outer Pine Wood Stair=Zewnętrzne schody z sosnowego drewna +Pine Wood Slab=Półblok z sosnowego drewna +Acacia Wood Stair=Schody z akacjowego drewna +Inner Acacia Wood Stair=Wewnętrzne schody z akacjowego drewna +Outer Acacia Wood Stair=Zewnętrzne schody z akacjowego drewna +Acacia Wood Slab=Półblok z akacjowego drewna +Aspen Wood Stair=Schody z brzozowego drewna +Inner Aspen Wood Stair=Wewnętrzne schody z brzozowego drewna +Outer Aspen Wood Stair=Zewnętrzne schody z brzozowego drewna +Aspen Wood Slab=Półblok z brzozowego drewna +Stone Stair=Schody z kamienia +Inner Stone Stair=Wewnętrzne schody z kamienia +Outer Stone Stair=Zewnętrzne schody z kamienia +Stone Slab=Półblok z kamienia +Cobblestone Stair=Schody z bruku +Inner Cobblestone Stair=Wewnętrzne schody z bruku +Outer Cobblestone Stair=Zewnętrzne schody z bruku +Cobblestone Slab=Półblok z bruku +Mossy Cobblestone Stair=Schody z bruku z mchem +Inner Mossy Cobblestone Stair=Wewnętrzne schody z bruku z mchem +Outer Mossy Cobblestone Stair=Zewnętrzne schody z bruku z mchem +Mossy Cobblestone Slab=Półblok z bruku z mchem +Stone Brick Stair=Schody z kamiennych cegieł +Inner Stone Brick Stair=Wewnętrzne schody z kamiennych cegieł +Outer Stone Brick Stair=Zewnętrzne schody z kamiennych cegieł +Stone Brick Slab=Półblok z kamiennych cegieł +Stone Block Stair=Schody z kamiennego bloku +Inner Stone Block Stair=Wewnętrzne schody z kamiennego bloku +Outer Stone Block Stair=Zewnętrzne schody z kamiennego bloku +Stone Block Slab=Półblok z kamiennego bloku +Desert Stone Stair=Schody z pustynnego kamienia +Inner Desert Stone Stair=Wewnętrzne schody z pustynnego kamienia +Outer Desert Stone Stair=Zewnętrzne schody z pustynnego kamienia +Desert Stone Slab=Półblok z pustynnego kamienia +Desert Cobblestone Stair=Schody z pustynnego bruku +Inner Desert Cobblestone Stair=Wewnętrzne schody z pustynnego bruku +Outer Desert Cobblestone Stair=Zewnętrzne schody z pustynnego bruku +Desert Cobblestone Slab=Półblok z pustynnego bruku +Desert Stone Brick Stair=Schody z pustynnych kamiennych cegieł +Inner Desert Stone Brick Stair=Wewnętrzne schody z pustynnych kamiennych cegieł +Outer Desert Stone Brick Stair=Zewnętrzne schody z pustynnych kamiennych cegieł +Desert Stone Brick Slab=Półblok z pustynnych kamiennych cegieł +Desert Stone Block Stair=Schody z pustynnego kamiennego bloku +Inner Desert Stone Block Stair=Wewnętrzne schody z pustynnego kamiennego bloku +Outer Desert Stone Block Stair=Zewnętrzne schody z pustynnego kamiennego bloku +Desert Stone Block Slab=Półblok z pustynnego kamiennego bloku +Sandstone Stair=Schody z piaskowca +Inner Sandstone Stair=Wewnętrzne schody z piaskowca +Outer Sandstone Stair=Zewnętrzne schody z piaskowca +Sandstone Slab=Półblok z piaskowca +Sandstone Brick Stair=Schody z piaskowcowych cegieł +Inner Sandstone Brick Stair=Wewnętrzne schody z piaskowcowych cegieł +Outer Sandstone Brick Stair=Zewnętrzne schody z piaskowcowych cegieł +Sandstone Brick Slab=Półblok z piaskowcowych cegieł +Sandstone Block Stair=Schody z piaskowcowego bloku +Inner Sandstone Block Stair=Wewnętrzne schody z piaskowcowego bloku +Outer Sandstone Block Stair=Zewnętrzne schody z piaskowcowego bloku +Sandstone Block Slab=Półblok z piaskowcowego bloku +Desert Sandstone Stair=Schody z pustynnego piaskowca +Inner Desert Sandstone Stair=Wewnętrzne schody z pustynnego piaskowca +Outer Desert Sandstone Stair=Zewnętrzne schody z pustynnego piaskowca +Desert Sandstone Slab=Półblok z pustynnego piaskowca +Desert Sandstone Brick Stair=Schody z pustynnych piaskowcowych cegieł +Inner Desert Sandstone Brick Stair=Wewnętrzne schody z pustynnych piaskowcowych cegieł +Outer Desert Sandstone Brick Stair=Zewnętrzne schody z pustynnych piaskowcowych cegieł +Desert Sandstone Brick Slab=Półblok z pustynnych piaskowcowych cegieł +Desert Sandstone Block Stair=Schody z pustynnego piaskowcowego bloku +Inner Desert Sandstone Block Stair=Wewnętrzne schody z pustynnego piaskowcowego bloku +Outer Desert Sandstone Block Stair=Zewnętrzne schody z pustynnego piaskowcowego bloku +Desert Sandstone Block Slab=Półblok z pustynnego piaskowcowego bloku +Silver Sandstone Stair=Schody z srebrnego piaskowca +Inner Silver Sandstone Stair=Wewnętrzne schody z srebrnego piaskowca +Outer Silver Sandstone Stair=Zewnętrzne schody z srebrnego piaskowca +Silver Sandstone Slab=Półblok z srebrnego piaskowca +Silver Sandstone Brick Stair=Schody z srebrnych piaskowcowych cegieł +Inner Silver Sandstone Brick Stair=Wewnętrzne schody z srebrnych piaskowcowych cegieł +Outer Silver Sandstone Brick Stair=Zewnętrzne schody z srebrnych piaskowcowych cegieł +Silver Sandstone Brick Slab=Półblok z srebrnych piaskowcowych cegieł +Silver Sandstone Block Stair=Schody z srebrnego piaskowcowego bloku +Inner Silver Sandstone Block Stair=Wewnętrzne schody z srebrnego piaskowcowego bloku +Outer Silver Sandstone Block Stair=Zewnętrzne schody z srebrnego piaskowcowego bloku +Silver Sandstone Block Slab=Półblok z srebrnego piaskowcowego bloku +Obsidian Stair=Schody z obsydianu +Inner Obsidian Stair=Wewnętrzne schody z obsydianu +Outer Obsidian Stair=Zewnętrzne schody z obsydianu +Obsidian Slab=Półblok z obsydianu +Obsidian Brick Stair=Schody z obsydianowych cegieł +Inner Obsidian Brick Stair=Wewnętrzne schody z obsydianowych cegieł +Outer Obsidian Brick Stair=Zewnętrzne schody z obsydianowych cegieł +Obsidian Brick Slab=Półblok z obsydianowych cegieł +Obsidian Block Stair=Schody z obsydianowego bloku +Inner Obsidian Block Stair=Wewnętrzne schody z obsydianowego bloku +Outer Obsidian Block Stair=Zewnętrzne schody z obsydianowego bloku +Obsidian Block Slab=Półblok z obsydianowego bloku +Brick Stair=Schody z cegieł +Inner Brick Stair=Wewnętrzne schody z cegieł +Outer Brick Stair=Zewnętrzne schody z cegieł +Brick Slab=Półblok z cegieł +Steel Block Stair=Schody z bloku stali +Inner Steel Block Stair=Wewnętrzne schody z bloku stali +Outer Steel Block Stair=Zewnętrzne schody z bloku stali +Steel Block Slab=Półblok z bloku stali +Tin Block Stair=Schody z bloku cyny +Inner Tin Block Stair=Wewnętrzne schody z bloku cyny +Outer Tin Block Stair=Zewnętrzne schody z bloku cyny +Tin Block Slab=Półblok z bloku cyny +Copper Block Stair=Schody z bloku miedzi +Inner Copper Block Stair=Wewnętrzne schody z bloku miedzi +Outer Copper Block Stair=Zewnętrzne schody z bloku miedzi +Copper Block Slab=Półblok z bloku miedzi +Bronze Block Stair=Schody z bloku brązu +Inner Bronze Block Stair=Wewnętrnze schody z bloku brązu +Outer Bronze Block Stair=Zewnętrzne schody z bloku brązu +Bronze Block Slab=Półblok z bloku brązu +Gold Block Stair=Schody z bloku złota +Inner Gold Block Stair=Wewnętrzne schody z block złota +Outer Gold Block Stair=Zewnętrzne schody z bloku złota +Gold Block Slab=Półblok z bloku złota +Ice Stair=Schody z lodu +Inner Ice Stair=Wewnętrzne schody z lodu +Outer Ice Stair=Zewnętrzne schody z lodu +Ice Slab=Półblok z lodu +Snow Block Stair=Schody ze śniegu +Inner Snow Block Stair=Wewnętrzne schody ze śniegu +Outer Snow Block Stair=Zewnętrzne schody ze śniegu +Snow Block Slab=Półblok ze śniegu diff --git a/mods/stairs/locale/stairs.pt_BR.tr b/mods/stairs/locale/stairs.pt_BR.tr new file mode 100644 index 00000000..41777a81 --- /dev/null +++ b/mods/stairs/locale/stairs.pt_BR.tr @@ -0,0 +1,145 @@ +# textdomain: stairs +Glass Stair=Escada de vidro +Glass Slab=Placa de vidro +Inner Glass Stair=Escada interior de vidro +Outer Glass Stair=Escada exterior de vidro +Obsidian Glass Stair=Escada de vidro de obsidiana +Obsidian Glass Slab=Placa de vidro de obsidiana +Inner Obsidian Glass Stair=Escada interior de vidro de obsidiana +Outer Obsidian Glass Stair=Escada exterior de vidro de obsidiana +Wooden Stair=Escada de madeira +Inner Wooden Stair=Escada interior de madeira +Outer Wooden Stair=Escada exterior de madeira +Wooden Slab=Laje de madeira +Jungle Wood Stair=Escada de madeira da selva +Inner Jungle Wood Stair=Escada interior de madeira da selva +Outer Jungle Wood Stair=Escada exterior de madeira da selva +Jungle Wood Slab=Laje de madeira da selva +Pine Wood Stair=Escada de madeira de pinho +Inner Pine Wood Stair=Escada interior de madeira de pinho +Outer Pine Wood Stair=Escada exterior de madeira de pinho +Pine Wood Slab=Laje de madeira de pinho +Acacia Wood Stair=Escada de madeira de acácia +Inner Acacia Wood Stair=Escada interior de madeira de acácia +Outer Acacia Wood Stair=Escada exterior de madeira de acácia +Acacia Wood Slab=Placa de madeira de acácia +Aspen Wood Stair=Escada de Álamo +Inner Aspen Wood Stair=Escada interior de Álamo +Outer Aspen Wood Stair=Escada exterior de Álamo +Aspen Wood Slab=Laje de Álamo +Stone Stair=Escada de Pedra +Inner Stone Stair=Escada interior de Pedra +Outer Stone Stair=Escada exterior de Pedra +Stone Slab=Laje de pedra +Cobblestone Stair=Escada de paralelepípedo +Inner Cobblestone Stair=Escada interior de paralelepípedo +Outer Cobblestone Stair=Escada exterior de paralelepípedo +Cobblestone Slab=Laje de paralelepípedo +Mossy Cobblestone Stair=Escada de paralelepípedo com musgo +Inner Mossy Cobblestone Stair=Escada interior de paralelepípedo com musgo +Outer Mossy Cobblestone Stair=Escada exterior de paralelepípedo com musgo +Mossy Cobblestone Slab=Laje de paralelepípedo com musgo +Stone Brick Stair=Escada de tijolo de pedra +Inner Stone Brick Stair=Escada interior de tijolo de pedra +Outer Stone Brick Stair=Escada exterior de tijolo de pedra +Stone Brick Slab=Laje de tijolo de pedra +Stone Block Stair=Escada Bloco de Pedra +Inner Stone Block Stair=Escada Interna de Bloco de Pedra +Outer Stone Block Stair=Escada Externa de Bloco de Pedra +Stone Block Slab=Laje de bloco de pedra +Desert Stone Stair=Escada de Pedra do Deserto +Inner Desert Stone Stair=Escada Interior de Pedra do Deserto +Outer Desert Stone Stair=Escada Exterior de Pedra do Deserto +Desert Stone Slab=Laje de pedra do deserto +Desert Cobblestone Stair=Escada de paralelepípedo do deserto +Inner Desert Cobblestone Stair=Escada interior de paralelepípedo do deserto +Outer Desert Cobblestone Stair=Escada exterior de paralelepípedo do deserto +Desert Cobblestone Slab=Laje de paralelepípedo do deserto +Desert Stone Brick Stair=Escada de tijolo de pedra do deserto +Inner Desert Stone Brick Stair=Escada interior de tijolos de pedra do deserto +Outer Desert Stone Brick Stair=Escada exterior de tijolos de pedra do deserto +Desert Stone Brick Slab=Laje de tijolo de pedra do deserto +Desert Stone Block Stair=Escada de Bloco de Pedra do Deserto +Inner Desert Stone Block Stair=Escada interior de bloco de pedra do deserto +Outer Desert Stone Block Stair=Escada exterior de Bloco de Pedra do Deserto +Desert Stone Block Slab=Laje do bloco de pedra do deserto +Sandstone Stair=Escada de arenito +Inner Sandstone Stair=Escada interior de arenito +Outer Sandstone Stair=Escada Exterior de Arenito +Sandstone Slab=Laje de arenito +Sandstone Brick Stair=Escada de tijolo de arenito +Inner Sandstone Brick Stair=Escada interior de tijolos de arenito +Outer Sandstone Brick Stair=Escada Exterior de Tijolo de Arenito +Sandstone Brick Slab=Laje de tijolo de arenito +Sandstone Block Stair=Escada do Bloco de Arenito +Inner Sandstone Block Stair=Escada interior de bloco de arenito +Outer Sandstone Block Stair=Escada exterior de bloco de arenito +Sandstone Block Slab=Laje de bloco de arenito +Desert Sandstone Stair=Escada de arenito do deserto +Inner Desert Sandstone Stair=Escada interior de arenito do deserto +Outer Desert Sandstone Stair=Escada exterior de arenito do deserto +Desert Sandstone Slab=Laje de arenito do deserto +Desert Sandstone Brick Stair=Escada de tijolos de arenito do deserto +Inner Desert Sandstone Brick Stair=Escada interior de tijolos de arenito do deserto +Outer Desert Sandstone Brick Stair=Escada exterior de tijolos de arenito do deserto +Desert Sandstone Brick Slab=Laje de tijolo de arenito do deserto +Desert Sandstone Block Stair=Escada do bloco de arenito do deserto +Inner Desert Sandstone Block Stair=Escada interior do bloco de arenito do deserto +Outer Desert Sandstone Block Stair=Escada exterior de bloco de arenito do deserto +Desert Sandstone Block Slab=Laje de bloco de arenito do deserto +Silver Sandstone Stair=Escada de arenito prateado +Inner Silver Sandstone Stair=Escada interior de Arenito Prateado +Outer Silver Sandstone Stair=Escada exterior de Arenito Prateado +Silver Sandstone Slab=Laje de arenito prateado +Silver Sandstone Brick Stair=Escada de tijolos de arenito prateado +Inner Silver Sandstone Brick Stair=Escada interior de tijolos de arenito prateado +Outer Silver Sandstone Brick Stair=Escada exterior de tijolos de arenito prateado +Silver Sandstone Brick Slab=Laje de tijolo de arenito prateado +Silver Sandstone Block Stair=Escada de blocos de arenito prateado +Inner Silver Sandstone Block Stair=Escada interior de bloco de arenito prateado +Outer Silver Sandstone Block Stair=Escada exterior de bloco de arenito prateado +Silver Sandstone Block Slab=Laje de bloco de arenito prateado +Obsidian Stair=Escada de Obsidiana +Inner Obsidian Stair=Escada interior de Obsidiana +Outer Obsidian Stair=Escada exterior de Obsidiana +Obsidian Slab=Laje de Obsidiana +Obsidian Brick Stair=Escada de Tijolos de Obsidiana +Inner Obsidian Brick Stair=Escada interna de Tijolos de Obsidiana +Outer Obsidian Brick Stair=Escada externa de Tijolos de Obsidiana +Obsidian Brick Slab=Laje de tijolos de obsidiana +Obsidian Block Stair=Escada de Bloco de Obsidiana +Inner Obsidian Block Stair=Escada interior de Bloco de obsidiana +Outer Obsidian Block Stair=Escada exterior de Bloco de obsidiana +Obsidian Block Slab=Laje de bloco de obsidiana +Brick Stair=Escada de Tijolos +Inner Brick Stair=Escada interior de Tijolos +Outer Brick Stair=Escada exterior de Tijolos +Brick Slab=Laje de tijolos +Steel Block Stair=Escada de bloco de aço +Inner Steel Block Stair=Escada interior de bloco de aço +Outer Steel Block Stair=Escada exterior de bloco de aço +Steel Block Slab=Laje de bloco de aço +Tin Block Stair=Escada de bloco de estanho +Inner Tin Block Stair=Escada interior de bloco de estanho +Outer Tin Block Stair=Escada exterior de bloco de lata +Tin Block Slab=Laje de bloco de estanho +Copper Block Stair=Escada de bloco de cobre +Inner Copper Block Stair=Escada interior de Bloco de Cobre +Outer Copper Block Stair=Escada exterior do Bloco de Cobre +Copper Block Slab=Laje de bloco de cobre +Bronze Block Stair=Escada Bloco de Bronze +Inner Bronze Block Stair=Escada interior de bloco de bronze +Outer Bronze Block Stair=Escada exterior de Bloco de Bronze +Bronze Block Slab=Laje de bloco de bronze +Gold Block Stair=Escada Bloco de Ouro +Inner Gold Block Stair=Escada interior de Bloco de Ouro +Outer Gold Block Stair=Escada exterior de Bloco de Ouro +Gold Block Slab=Laje de Bloco de Ouro +Ice Stair=Escada de gelo +Inner Ice Stair=Escada de gelo interior +Outer Ice Stair=Escada de gelo exterior +Ice Slab=Laje de gelo +Snow Block Stair=Escada Bloco de Neve +Inner Snow Block Stair=Escada de bloco de neve interior +Outer Snow Block Stair=Escada de bloco de neve exterior +Snow Block Slab=Laje de bloco de neve diff --git a/mods/stairs/locale/stairs.ru.tr b/mods/stairs/locale/stairs.ru.tr new file mode 100644 index 00000000..2d5850ea --- /dev/null +++ b/mods/stairs/locale/stairs.ru.tr @@ -0,0 +1,145 @@ +# textdomain: stairs +Glass Stair=Стеклянная Ступень +Glass Slab=Стеклянная Плита +Inner Glass Stair=Угловая Стеклянная Ступень (Внутренний Угол) +Outer Glass Stair=Угловая Стеклянная Ступень (Внешний Угол) +Obsidian Glass Stair=Стеклянная Ступень Из Обсидиана +Obsidian Glass Slab=Стеклянная Плита Из Обсидиана +Inner Obsidian Glass Stair=Угловая Стеклянная Ступень Из Обсидиана (Внутренний Угол) +Outer Obsidian Glass Stair=Угловая Стеклянная Ступень Из Обсидиана (Внешний Угол) +Wooden Stair=Яблоневая Деревянная Ступень +Inner Wooden Stair=Угловая Яблоневая Деревянная Ступень (Внутренний Угол) +Outer Wooden Stair=Угловая Яблоневая Деревянная Ступень (Внешний Угол) +Wooden Slab=Яблоневая Деревянная Плита +Jungle Wood Stair=Тропическая Деревянная Ступень +Inner Jungle Wood Stair=Угловая Тропическая Деревянная Ступень (Внутренний Угол) +Outer Jungle Wood Stair=Угловая Тропическая Деревянная Ступень (Внешний Угол) +Jungle Wood Slab=Тропическая Деревянная Плита +Pine Wood Stair=Сосновая Деревянная Ступень +Inner Pine Wood Stair=Угловая Сосновая Деревянная Ступень (Внутренний Угол) +Outer Pine Wood Stair=Угловая Сосновая Деревянная Ступень (Внешний Угол) +Pine Wood Slab=Сосновая Деревянная Плита +Acacia Wood Stair=Деревянная Ступень Из Акации +Inner Acacia Wood Stair=Угловая Деревянная Ступень Из Акации (Внутренний Угол) +Outer Acacia Wood Stair=Угловая Деревянная Ступень Из Акации (Внешний Угол) +Acacia Wood Slab=Деревянная Плита Из Акации +Aspen Wood Stair=Осиновая Деревянная Ступень +Inner Aspen Wood Stair=Угловая Осиновая Деревянная Ступень (Внутренний Угол) +Outer Aspen Wood Stair=Угловая осиновая Деревянная Ступень (Внешний Угол) +Aspen Wood Slab=Осиновая Деревянная Плита +Stone Stair=Каменная Ступень +Inner Stone Stair=Угловая Каменная Ступень (Внутренний Угол) +Outer Stone Stair=Угловая Каменная Ступень (Внешний Угол) +Stone Slab=Каменная Плита +Cobblestone Stair=Булыжниковая Ступень +Inner Cobblestone Stair=Угловая Булыжниковая Ступень (Внутренний Угол) +Outer Cobblestone Stair=Угловая Булыжниковая Ступень (Внешний Угол) +Cobblestone Slab=Булыжниковая Плита +Mossy Cobblestone Stair=Мшистая Булыжниковая Ступень +Inner Mossy Cobblestone Stair=Угловая Мшистая Булыжниковая Ступень (Внутренний Угол) +Outer Mossy Cobblestone Stair=Угловая Мшистая Булыжниковая Ступень (Внешний Угол) +Mossy Cobblestone Slab=Мшистая Булыжниковая Плита +Stone Brick Stair=Cтупень Из Каменных Кирпичей +Inner Stone Brick Stair=Угловая Ступень Из Каменных Кирпичей (Внутренний Угол) +Outer Stone Brick Stair=Угловая Ступень Из Каменных Кирпичей (Внешний Угол) +Stone Brick Slab=Плита Из Каменных Кирпичей +Stone Block Stair=Ступень Из Каменного Блока +Inner Stone Block Stair=Угловая Ступень Из Каменного Блока (Внутренний Угол) +Outer Stone Block Stair=Угловая Ступень Из Каменного Блока (Внешний Угол) +Stone Block Slab=Плита Из Каменного Блока +Desert Stone Stair=Ступень Из Пустынного Камня +Inner Desert Stone Stair=Угловая Ступень Из Пустынного Камня (Внутренний Угол) +Outer Desert Stone Stair=Угловая Ступень Из Пустынного Камня (Внешний Угол) +Desert Stone Slab=Плита Из Пустынного Камня +Desert Cobblestone Stair=Ступень Из Пустынного Булыжника +Inner Desert Cobblestone Stair=Угловая Ступень Из Пустынного Булыжника (Внутренний Угол) +Outer Desert Cobblestone Stair=Угловая Ступень Из Пустынного Булыжника (Внешний Угол) +Desert Cobblestone Slab=Плита Из Пустынного Камня +Desert Stone Brick Stair=Ступень Из Кирпичей Пустынного Камня +Inner Desert Stone Brick Stair=Угловая Ступень Из Кирпичей Пустынного Камня (Внутренний Угол) +Outer Desert Stone Brick Stair=Угловая Ступень Из Кирпичей Пустынного Камня (Внешний Угол) +Desert Stone Brick Slab=Плита Из Кирпичей Пустынного Камня +Desert Stone Block Stair=Ступень Из Пустынного Каменного Блока +Inner Desert Stone Block Stair=Угловая Ступень Из Пустынного Каменного Блока (Внутренний Угол) +Outer Desert Stone Block Stair=Угловая Ступень Из Пустынного Каменного Блока (Внешний Угол) +Desert Stone Block Slab=Плита Из Пустынного Каменного Блока +Sandstone Stair=Песчаниковая Ступень +Inner Sandstone Stair=Угловая Песчаниковая Ступень (Внутренний Угол) +Outer Sandstone Stair=Угловая Песчаниковая Ступень (Внешний Угол) +Sandstone Slab=Песчаниковая Плита +Sandstone Brick Stair=Ступень Из Песчаниковых Кирпичей +Inner Sandstone Brick Stair=Угловая Ступень Из Песчаниковых Кирпичей (Внутренний Угол) +Outer Sandstone Brick Stair=Угловая Ступень Из Песчаниковых Кирпичей (Внешний Угол) +Sandstone Brick Slab=Плита Из Песчаниковых Кирпичей +Sandstone Block Stair=Ступень Из Песчаникового Блока +Inner Sandstone Block Stair=Угловая Ступень Из Песчаникового Блока (Внутренний Угол) +Outer Sandstone Block Stair=Угловая Ступень Из Песчаникового Блока (Внешний Угол) +Sandstone Block Slab=Плита Из Песчаникового Блока +Desert Sandstone Stair=Ступень Из Пустынного Песчаника +Inner Desert Sandstone Stair=Угловая Ступень Из Пустынного Песчаника (Внутренний Угол) +Outer Desert Sandstone Stair=Угловая Ступень Из Пустынного Песчаника (Внешний Угол) +Desert Sandstone Slab=Плита Из Пустынного Песчаника +Desert Sandstone Brick Stair=Ступень Из Кирпичей Пустынного Песчаника +Inner Desert Sandstone Brick Stair=Угловая Ступень Из Кирпичей Пустынного Песчаника (Внутренний Угол) +Outer Desert Sandstone Brick Stair=Угловая Ступень Из Кирпичей Пустынного Песчаника (Внешний Угол) +Desert Sandstone Brick Slab=Плита Из Кирпичей Пустынного Песчаника +Desert Sandstone Block Stair=Ступень Из Пустынного Песчаникового Блока +Inner Desert Sandstone Block Stair=Угловая Ступень Из Пустынного Песчаникового Блока (Внутренний Угол) +Outer Desert Sandstone Block Stair=Угловая Ступень Из Пустынного Песчаникового Блока (Внешний Угол) +Desert Sandstone Block Slab=Плита Из Пустынного Песчаникового Блока +Silver Sandstone Stair=Ступень Из Серебрянного Песчаника +Inner Silver Sandstone Stair=Угловая Ступень Из Серебряного Песчаника (Внутренний Угол) +Outer Silver Sandstone Stair=Угловая Ступень Из Серебряного Песчаника (Внешний Угол) +Silver Sandstone Slab=Плита Из Серебряного Песчаника +Silver Sandstone Brick Stair=Ступень Из Кирпичей Серебряного Песчаника +Inner Silver Sandstone Brick Stair=Угловая Ступень Из Кирпичей Серебряного Песчаника (Внутренний Угол) +Outer Silver Sandstone Brick Stair=Угловая Ступень Из Кирпичей Серебряного Песчаника (Внешний Угол) +Silver Sandstone Brick Slab=Плита Из Кирпичей Серебряного Песчаника +Silver Sandstone Block Stair=Ступень Из Серебряного Песчаникового Блока +Inner Silver Sandstone Block Stair=Угловая Ступень Из Серебряного Песчаникового Блока (Внутренний Угол) +Outer Silver Sandstone Block Stair=Угловая Ступень Из Серебряного Песчаникового Блока (Внешний Угол) +Silver Sandstone Block Slab=Плита Из Серебряного Песчаникового Блока +Obsidian Stair=Обсидиановая Ступень +Inner Obsidian Stair=Угловая Обсидиановая Ступень (Внутренний Угол) +Outer Obsidian Stair=Угловая Обсидиановая Ступень (Внешний Угол) +Obsidian Slab=Обсидиановая Плита +Obsidian Brick Stair=Ступень Из Обсидиановых Кирпичей +Inner Obsidian Brick Stair=Угловая Ступень Из Обсидиановых Кирпичей (Внутренний Угол) +Outer Obsidian Brick Stair=Угловая Ступень Из Обсидиановых Кирпичей (Внешний Угол) +Obsidian Brick Slab=Плита Из Обсидиановых Кирпичей +Obsidian Block Stair=Ступень Из Обсидианового Блока +Inner Obsidian Block Stair=Угловая Ступень Из Обсидианового Блока (Внутренний Угол) +Outer Obsidian Block Stair=Угловая Ступень Из Обсидианового Блока (Внешний Угол) +Obsidian Block Slab=Плита Из Обсидианового Блока +Brick Stair=Ступень Из Кирпичей +Inner Brick Stair=Угловая Ступень Из Кирпичей (Внутренний Угол) +Outer Brick Stair=Угловая Ступень Из Кирпичей (Внешний Угол) +Brick Slab=Плита Из Кирпичей +Steel Block Stair=Ступень Из Стального Блока +Inner Steel Block Stair=Угловая Ступень Из Стального Блока (Внутренний Угол) +Outer Steel Block Stair=Угловая Ступень Из Стального Блока (Внешний Угол) +Steel Block Slab=Плита Из Стального Блока +Tin Block Stair=Ступень Из Оловянного Блока +Inner Tin Block Stair=Угловая Ступень Из Оловянного Блока (Внутренний Угол) +Outer Tin Block Stair=Угловая Ступень Из Оловянного Блока (Внешний Угол) +Tin Block Slab=Плита Из Оловянного Блока +Copper Block Stair=Ступень Из Медного Блока +Inner Copper Block Stair=Угловая Ступень Из Медного Блока (Внутренний Угол) +Outer Copper Block Stair=Угловая Ступень Из Медного Блока (Внешний Угол) +Copper Block Slab=Плита Из Медного Блока +Bronze Block Stair=Ступень Из Бронзового Блока +Inner Bronze Block Stair=Угловая Ступень Из Бронзового Блока (Внутренний Угол) +Outer Bronze Block Stair=Угловая Ступень Из Бронзового Блока (Внешний Угол) +Bronze Block Slab=Плита Из Бронзового Блока +Gold Block Stair=Ступень Из Золотого Блока +Inner Gold Block Stair=Угловая Ступень Из Золотого Блока (Внутренний Угол) +Outer Gold Block Stair=Угловая Ступень Из Золотого Блока (Внешний Угол) +Gold Block Slab=Плита Из Золотого Блока +Ice Stair=Ледяная Ступень +Inner Ice Stair=Угловая Ледяная Ступень (Внутренний Угол) +Outer Ice Stair=Угловая Ледяная Ступень (Внешний Угол) +Ice Slab=Ледяная Плита +Snow Block Stair=Ступень Из Снежного Блока +Inner Snow Block Stair=Угловая Ступень Из Снежного Блока (Внутренний Угол) +Outer Snow Block Stair=Угловая Ступень Из Снежного Блока (Внешний Угол) +Snow Block Slab=Плита Из Снежного Блока diff --git a/mods/stairs/locale/stairs.sk.tr b/mods/stairs/locale/stairs.sk.tr new file mode 100644 index 00000000..b006fdb5 --- /dev/null +++ b/mods/stairs/locale/stairs.sk.tr @@ -0,0 +1,145 @@ +# textdomain: stairs +Glass Stair=Sklenené schod +Glass Slab=Sklenený stupienok +Inner Glass Stair=Vnútorný sklenené schod +Outer Glass Stair=Vonkajší sklenené schod +Obsidian Glass Stair=Obsidiánové sklenené schod +Obsidian Glass Slab=Obsidiánový sklenený stupienok +Inner Obsidian Glass Stair=Vnútorný obsidiánové sklenené schod +Outer Obsidian Glass Stair=Vonkajší obsidiánové sklenené schod +Wooden Stair=Drevené schod +Inner Wooden Stair=Vnútorný drevené schod +Outer Wooden Stair=Vonkajší drevené schod +Wooden Slab=Drevený stupienok +Jungle Wood Stair=Drevené schod z džungľového dreva +Inner Jungle Wood Stair=Vnútorný drevené schod z džungľového dreva +Outer Jungle Wood Stair=Vonkajší drevené schod z džungľového dreva +Jungle Wood Slab=Stupienok z džungľového dreva +Pine Wood Stair=Drevené schod z borovicového dreva +Inner Pine Wood Stair=Vnútorný drevené schod z borovicového dreva +Outer Pine Wood Stair=Vonkajší drevené schod z borovicového dreva +Pine Wood Slab=Stupienok z borovicového dreva +Acacia Wood Stair=Drevené schod z akáciového dreva +Inner Acacia Wood Stair=Vnútorný drevené schod z akáciového dreva +Outer Acacia Wood Stair=Vonkajší drevené schod z akáciového dreva +Acacia Wood Slab=Stupienok z akáciového dreva +Aspen Wood Stair=Drevené schod z osiky +Inner Aspen Wood Stair=Vnútorný drevené schod z osiky +Outer Aspen Wood Stair=Vonkajší drevené schod z osiky +Aspen Wood Slab=Stupienok z osiky +Stone Stair=Kamenné schod +Inner Stone Stair=Vnútorný kamenné schod +Outer Stone Stair=Vonkajší kamenné schod +Stone Slab=Kamenný stupienok +Cobblestone Stair=Schod z dlažbového kameňa +Inner Cobblestone Stair=Vnútorný schod z dlažbového kameňa +Outer Cobblestone Stair=Vonkajší schod z dlažbového kameňa +Cobblestone Slab=Stupienok z dlažbového kameňa +Mossy Cobblestone Stair=Schod dlažbového kameňa obrastené machom +Inner Mossy Cobblestone Stair=Vnútorný schod dlažbového kameňa obrastené machom +Outer Mossy Cobblestone Stair=Vonkajší schod dlažbového kameňa obrastené machom +Mossy Cobblestone Slab=Stupienok z dlažbového kameňa obrastený machom +Stone Brick Stair=Schod z kamenných tehál +Inner Stone Brick Stair=Vnútorný schod z kamenných tehál +Outer Stone Brick Stair=Vonkajší schod z kamenných tehál +Stone Brick Slab=Stupienok z kamenných tehál +Stone Block Stair=Schod z kameňa +Inner Stone Block Stair=Vnútorný schod z kameňa +Outer Stone Block Stair=Vonkajší schod z kameňa +Stone Block Slab=Stupienok z kameňa +Desert Stone Stair=Schod z púštneho kameňa +Inner Desert Stone Stair=Vnútorný schod z púštneho kameňa +Outer Desert Stone Stair=Vonkajší schod z púštneho kameňa +Desert Stone Slab=Stupienok z púštneho kameňa +Desert Cobblestone Stair=Schod z púštneho dlažbového kameňa +Inner Desert Cobblestone Stair=Vnútorný schod z púštneho dlažbového kameňa +Outer Desert Cobblestone Stair=Vonkajší schod z púštneho dlažbového kameňa +Desert Cobblestone Slab=Stupienok z púštneho dlažbového kameňa +Desert Stone Brick Stair=Schod z tehiel z púštneho kameňa +Inner Desert Stone Brick Stair=Vnútorný schod z tehiel z púštneho kameňa +Outer Desert Stone Brick Stair=Vonkajší schod z tehiel z púštneho kameňa +Desert Stone Brick Slab=Stupienok z tehiel z púštneho kameňa +Desert Stone Block Stair=Schod z blokov púštneho kameňa +Inner Desert Stone Block Stair=Vnútorný schod z blokov púštneho kameňa +Outer Desert Stone Block Stair=Vonkajší schod z blokov púštneho kameňa +Desert Stone Block Slab=Stupienok z blokov púštneho kameňa +Sandstone Stair=Schod z pieskovca +Inner Sandstone Stair=Vnútorný schod z pieskovca +Outer Sandstone Stair=Vonkajší schod z pieskovca +Sandstone Slab=Stupienok z pieskovca +Sandstone Brick Stair=Schod z tehál pieskovca +Inner Sandstone Brick Stair=Vnútorný schod z tehál pieskovca +Outer Sandstone Brick Stair=Vonkajší schod z tehál pieskovca +Sandstone Brick Slab=Stupienok z tehál pieskovca +Sandstone Block Stair=Schod z blokov pieskovca +Inner Sandstone Block Stair=Vnútorný schod z blokov pieskovca +Outer Sandstone Block Stair=Vonkajší schod z blokov pieskovca +Sandstone Block Slab=Stupienok z blokov pieskovca +Desert Sandstone Stair=Schod z púštneho pieskovca +Inner Desert Sandstone Stair=Vnútorný schod z púštneho pieskovca +Outer Desert Sandstone Stair=Vonkajší schod z púštneho pieskovca +Desert Sandstone Slab=Stupienok z púštneho pieskovca +Desert Sandstone Brick Stair=Schod z tehál z púštneho pieskovca +Inner Desert Sandstone Brick Stair=Vnútorný schod z tehál z púštneho pieskovca +Outer Desert Sandstone Brick Stair=Vonkajší schod z tehál z púštneho pieskovca +Desert Sandstone Brick Slab=Stupienok z tehál z púštneho pieskovca +Desert Sandstone Block Stair=Schod z blokov púštneho pieskovca +Inner Desert Sandstone Block Stair=Vnútorný schod z blokov púštneho pieskovca +Outer Desert Sandstone Block Stair=Vonkajší schod z blokov púštneho pieskovca +Desert Sandstone Block Slab=Stupienok z blokov púštneho pieskovca +Silver Sandstone Stair=Schod zo strieborného pieskovca +Inner Silver Sandstone Stair=Vnútorný schod zo strieborného pieskovca +Outer Silver Sandstone Stair=Vonkajší schod zo strieborného pieskovca +Silver Sandstone Slab=Stupienok zo strieborného pieskovca +Silver Sandstone Brick Stair=Schod z tehál zo strieborného pieskovca +Inner Silver Sandstone Brick Stair=Vnútorný schod z tehál zo strieborného pieskovca +Outer Silver Sandstone Brick Stair=Vonkajší schod z tehál zo strieborného pieskovca +Silver Sandstone Brick Slab=Stupienok z tehál zo strieborného pieskovca +Silver Sandstone Block Stair=Schod z blokov strieborného pieskovca +Inner Silver Sandstone Block Stair=Vnútorný schod z blokov strieborného pieskovca +Outer Silver Sandstone Block Stair=Vonkajší schod z blokov strieborného pieskovca +Silver Sandstone Block Slab=Stupienok z blokov strieborného pieskovca +Obsidian Stair=Schod z obsidiánu +Inner Obsidian Stair=Vnútorný schod z obsidiánu +Outer Obsidian Stair=Vonkajší schod z obsidiánu +Obsidian Slab=Stupienok z obsidiánu +Obsidian Brick Stair=Schod z tehál obsidiánu +Inner Obsidian Brick Stair=Vnútorný schod z tehál obsidiánu +Outer Obsidian Brick Stair=Vonkajší schod z tehál obsidiánu +Obsidian Brick Slab=Stupienok z tehál obsidiánu +Obsidian Block Stair=Schod z bloku obsidiánu +Inner Obsidian Block Stair=Vnútorný schod z bloku obsidiánu +Outer Obsidian Block Stair=Vonkajší schod z bloku obsidiánu +Obsidian Block Slab=Stupienok z bloku obsidiánu +Brick Stair=Schod z tehál +Inner Brick Stair=Vnútorný schod z tehál +Outer Brick Stair=Vonkajší schod z tehál +Brick Slab=Stupienok z tehál +Steel Block Stair=Oceľový schod +Inner Steel Block Stair=Vnútorný oceľový schod +Outer Steel Block Stair=Vonkajší oceľový schod +Steel Block Slab=Oceľový stupienok +Tin Block Stair=Cínový schod +Inner Tin Block Stair=Vnútorný cínový schod +Outer Tin Block Stair=Vonkajší cínový schod +Tin Block Slab=Cínový stupienok +Copper Block Stair=Medený schod +Inner Copper Block Stair=Vnútorný medený schod +Outer Copper Block Stair=Vonkajší medený schod +Copper Block Slab=Medený stupienok +Bronze Block Stair=Bronzový schod +Inner Bronze Block Stair=Vnútorný bronzový schod +Outer Bronze Block Stair=Vonkajší bronzový schod +Bronze Block Slab=Bronzový stupienok +Gold Block Stair=Zlatý schod +Inner Gold Block Stair=Vnútorný zlatý schod +Outer Gold Block Stair=Vonkajší zlatý schod +Gold Block Slab=Zlatý stupienok +Ice Stair=Ľadový schod +Inner Ice Stair=Vnútorný ľadový schod +Outer Ice Stair=Vonkajší ľadový schod +Ice Slab=Ľadový stupienok +Snow Block Stair=Snehový schod +Inner Snow Block Stair=Vnútorný snehový schod +Outer Snow Block Stair=Vonkajší snehový schod +Snow Block Slab=Snehový stupienok diff --git a/mods/stairs/locale/stairs.sv.tr b/mods/stairs/locale/stairs.sv.tr new file mode 100644 index 00000000..8044af81 --- /dev/null +++ b/mods/stairs/locale/stairs.sv.tr @@ -0,0 +1,145 @@ +# textdomain: stairs +Glass Stair=Glastrappa +Glass Slab=Glasplatta +Inner Glass Stair=Inre glasstrappa +Outer Glass Stair=Yttre glasstrappa +Obsidian Glass Stair=Obsidianglasstrappa +Obsidian Glass Slab=Obsidianglasplatta +Inner Obsidian Glass Stair=Inre obsidianglastrappa +Outer Obsidian Glass Stair=Yttre obsidianglastrappa +Wooden Stair=Trätrappa +Inner Wooden Stair=Inre trätrappa +Outer Wooden Stair=Yttre trätrappa +Wooden Slab=Träplatta +Jungle Wood Stair=Djungelträtrappa +Inner Jungle Wood Stair=Inre djungelträtrappa +Outer Jungle Wood Stair=Ytter djungelträtrappa +Jungle Wood Slab=Djungelträplatta +Pine Wood Stair=Tallträplatta +Inner Pine Wood Stair=Inre tallträplatta +Outer Pine Wood Stair=Ytter tallträplatta +Pine Wood Slab=Tallskiva +Acacia Wood Stair=Acaciatrappa +Inner Acacia Wood Stair=Inre acaciatrappa +Outer Acacia Wood Stair=Yttre acaciatrappa +Acacia Wood Slab=Acaciaplatta +Aspen Wood Stair=Aspträtrappa +Inner Aspen Wood Stair=Inre aspträtrappa +Outer Aspen Wood Stair=Yttre aspträtrappa +Aspen Wood Slab=Aspträplatta +Stone Stair=Stentrappa +Inner Stone Stair=Inre stentrappa +Outer Stone Stair=Yttre stentrappa +Stone Slab=Stenplatta +Cobblestone Stair=Kullerstenstrappa +Inner Cobblestone Stair=Inre kullerstenstrappa +Outer Cobblestone Stair=Yttre kullerstenstrappa +Cobblestone Slab=Kullerstenplatta +Mossy Cobblestone Stair=Mossig kullerstenstrappa +Inner Mossy Cobblestone Stair=Inre mossig kullerstenstrappa +Outer Mossy Cobblestone Stair=Yttre mossig kullerstenstrappa +Mossy Cobblestone Slab=Mossig kullerstenplatta +Stone Brick Stair=Stentegeltrappa +Inner Stone Brick Stair=Inre stentegeltrappa +Outer Stone Brick Stair=Yttre stentegeltrappa +Stone Brick Slab=Stentegelplatta +Stone Block Stair=Stenblockstrappa +Inner Stone Block Stair=Inre stenblockstrappa +Outer Stone Block Stair=Yttre stenblockstrappa +Stone Block Slab=Stenblocksplatta +Desert Stone Stair=Ökenstentrappa +Inner Desert Stone Stair=Inre ökenstentrappa +Outer Desert Stone Stair=Yttre ökenstentrappa +Desert Stone Slab=Ökenstenplatta +Desert Cobblestone Stair=Ökenkullerstenstrappa +Inner Desert Cobblestone Stair=Inre ökenkullerstenstrappa +Outer Desert Cobblestone Stair=Yttre ökenkullerstenstrappa +Desert Cobblestone Slab=Ökenkullerstensplatta +Desert Stone Brick Stair=Ökentegelstenstrappa +Inner Desert Stone Brick Stair=Inre Ökentegelstenstrappa +Outer Desert Stone Brick Stair=Yttre Ökentegelstenstrappa +Desert Stone Brick Slab=Ökentegelstensplatta +Desert Stone Block Stair=Ökenstenblockstrappa +Inner Desert Stone Block Stair=Inre ökenstenblockstrappa +Outer Desert Stone Block Stair=Yttre ökenstenblockstrappa +Desert Stone Block Slab=Ökenstenblocksplatta +Sandstone Stair=Sandstenstrappa +Inner Sandstone Stair=Inre Sandstenstrappa +Outer Sandstone Stair=Yttre Sandstenstrappa +Sandstone Slab=Sandstenplatta +Sandstone Brick Stair=Sandstentegeltrappa +Inner Sandstone Brick Stair=Inre Sandstentegeltrappa +Outer Sandstone Brick Stair=Yttre Sandstentegeltrappa +Sandstone Brick Slab=Sandstentegelplatta +Sandstone Block Stair=Sandstenblockstrappa +Inner Sandstone Block Stair=Inre Sandstenblockstrappa +Outer Sandstone Block Stair=Yttre Sandstenblockstrappa +Sandstone Block Slab=Sandstenblocksplatta +Desert Sandstone Stair=Ökensandstenstrappa +Inner Desert Sandstone Stair=Inre ökensandstenstrappa +Outer Desert Sandstone Stair=Yttre ökensandstenstrappa +Desert Sandstone Slab=Ökensandstensplatta +Desert Sandstone Brick Stair=Ökensandstentegeltrappa +Inner Desert Sandstone Brick Stair=Inre ökensandstentegeltrappa +Outer Desert Sandstone Brick Stair=Yttre ökensandstentegeltrappa +Desert Sandstone Brick Slab=Ökensandstentegelplatta +Desert Sandstone Block Stair=Ökensandstentegeltrappa +Inner Desert Sandstone Block Stair=Inre ökensandstentegeltrappa +Outer Desert Sandstone Block Stair=Yttre ökensandstentegeltrappa +Desert Sandstone Block Slab=Ökensandstentegelplatta +Silver Sandstone Stair=Silversandstenstrappa +Inner Silver Sandstone Stair=Inre silversandstenstrappa +Outer Silver Sandstone Stair=Yttre silversandstenstrappa +Silver Sandstone Slab=Silversandstenstrappa +Silver Sandstone Brick Stair=Silversandstenstegeltrappa +Inner Silver Sandstone Brick Stair=Inre silversandstenstegeltrappa +Outer Silver Sandstone Brick Stair=Yttre silversandstenstegeltrappa +Silver Sandstone Brick Slab=Silversandstenstegelplatta +Silver Sandstone Block Stair=Silversandstenblockstrappa +Inner Silver Sandstone Block Stair=Inre silversandstenblockstrappa +Outer Silver Sandstone Block Stair=Yttre silversandstenblockstrappa +Silver Sandstone Block Slab=Silversandstenblocksplatta +Obsidian Stair=Obsidiantrappa +Inner Obsidian Stair=Inre obsidiantrappa +Outer Obsidian Stair=Yttre obsidiantrappa +Obsidian Slab=Obsidianplatta +Obsidian Brick Stair=Obsidiantegeltrappa +Inner Obsidian Brick Stair=Inre obsidiantegeltrappa +Outer Obsidian Brick Stair=Yttre obsidiantegeltrappa +Obsidian Brick Slab=Obsidiantegelplatta +Obsidian Block Stair=Obsidianblocktrappa +Inner Obsidian Block Stair=Inre Obsidianblocktrappa +Outer Obsidian Block Stair=Yttre Obsidianblocktrappa +Obsidian Block Slab=Obsidianblockplatta +Brick Stair=Tegeltrappa +Inner Brick Stair=Inre tegeltrappa +Outer Brick Stair=Yttre tegeltrappa +Brick Slab=Tegelplatta +Steel Block Stair=Ståltrappa +Inner Steel Block Stair=Inre ståltrappa +Outer Steel Block Stair=Yttre ståltrappa +Steel Block Slab=Stålplatta +Tin Block Stair=Tenntrappa +Inner Tin Block Stair=Inre tenntrappa +Outer Tin Block Stair=Yttre tenntrappa +Tin Block Slab=Tennplatta +Copper Block Stair=Koppartrappa +Inner Copper Block Stair=Inre koppartrappa +Outer Copper Block Stair=Yttre koppartrappa +Copper Block Slab=Kopparplatta +Bronze Block Stair=Bronstrappa +Inner Bronze Block Stair=Inre bronstrappa +Outer Bronze Block Stair=Yttre bronstrappa +Bronze Block Slab=Bronsplatta +Gold Block Stair=Guldtrappa +Inner Gold Block Stair=Inre guldtrappa +Outer Gold Block Stair=Yttre guldtrappa +Gold Block Slab=Guldplatta +Ice Stair=Istrappa +Inner Ice Stair=Inre istrappa +Outer Ice Stair=Yttre istrappa +Ice Slab=Isplatta +Snow Block Stair=Snöblockstrappa +Inner Snow Block Stair=Inre snöblockstrappa +Outer Snow Block Stair=Yttre snöblockstrappa +Snow Block Slab=Snöblocksplatta diff --git a/mods/stairs/locale/stairs.uk.tr b/mods/stairs/locale/stairs.uk.tr new file mode 100644 index 00000000..f501b5eb --- /dev/null +++ b/mods/stairs/locale/stairs.uk.tr @@ -0,0 +1,145 @@ +# textdomain: stairs +Glass Stair=Скляна Сходинка +Glass Slab=Скляна Плита +Inner Glass Stair=Кутова Скляна Сходинка (Внутрішній Кут) +Outer Glass Stair=Кутова Скляна Сходинка (Зовнішній Кут) +Obsidian Glass Stair=Скляна Сходинка З Обсидіану +Obsidian Glass Slab=Скляна Плита З Обсидіану +Inner Obsidian Glass Stair=Кутова Скляна Сходинка З Обсидіану (Внутрішній Кут) +Outer Obsidian Glass Stair=Кутова Скляна Сходинка З Обсидіану (Зовнішній Кут) +Wooden Stair=Яблунева Дерев'яна Сходинка +Inner Wooden Stair=Кутова Яблунева Дерев'яна Сходинка (Внутрішній Кут) +Outer Wooden Stair=Кутова Яблунева Дерев'яна Сходинка (Внутрішній Кут) +Wooden Slab=Яблунева Дерев'яна Плита +Jungle Wood Stair=Дерев'яна Сходинка З Тропічного Дерева +Inner Jungle Wood Stair=Кутова Дерев'яна Сходинка З Тропічного Дерева (Внутрішній Кут) +Outer Jungle Wood Stair=Кутова Дерев'яна Сходинка З Тропічного Дерева (Зовнішній Кут) +Jungle Wood Slab=Дерев'яна Плита З Тропічного Дерева +Pine Wood Stair=Дерев'яна Сходинка З Сосни +Inner Pine Wood Stair=Кутова Дерев'яна Сходинка З Сосни (Внутрішній Кут) +Outer Pine Wood Stair=Кутова Дерев'яна Сходинка З Сосни (Зовнішній Кут) +Pine Wood Slab=Дерев'яна Плита З Сосни +Acacia Wood Stair=Дерев'яна Сходинка З Акації +Inner Acacia Wood Stair=Кутова Дерев'яна Сходинка З Акації (Внутрішній Кут) +Outer Acacia Wood Stair=Кутова Дерев'яна Сходинка З Акації (Зовнішній Кут) +Acacia Wood Slab=Дерев'яна Плита З Акації +Aspen Wood Stair=Дерев'яна Сходинка З Осики +Inner Aspen Wood Stair=Кутова Дерев'яна Сходинка З Осики (Внутрішній Кут) +Outer Aspen Wood Stair=Кутова Дерев'яна Сходинка З Осики (Зовнішній Кут) +Aspen Wood Slab=Дерев'яна Плита З Осики +Stone Stair=Кам'яна Сходинка +Inner Stone Stair=Кутова Кам'яна Сходинка (Внутрішній Кут) +Outer Stone Stair=Кутова Кам'яна Сходинка (Зовнішній Кут) +Stone Slab=Кам'яна Плита +Cobblestone Stair=Сходинка З Кругляку +Inner Cobblestone Stair=Кутова Сходинка З Кругляку (Внутрішній Кут) +Outer Cobblestone Stair=Кутова Сходинка З Кругляку (Зовнішній Кут) +Cobblestone Slab=Плита З Кругляку +Mossy Cobblestone Stair=Мохова Сходинка З Кругляку +Inner Mossy Cobblestone Stair=Кутова Мохова Сходинка З Кругляку (Внутрішній Кут) +Outer Mossy Cobblestone Stair=Кутова Мохова Сходинка З Кругляку (Зовнішній Кут) +Mossy Cobblestone Slab=Мохова Плита З Кругляку +Stone Brick Stair=Сходинка З Кам'яної Цегли +Inner Stone Brick Stair=Кутова Сходинка З Кам'яної Цегли (Внутрішній Кут) +Outer Stone Brick Stair=Кутова Сходинка З Кам'яної Цегли (Зовнішній Кут) +Stone Brick Slab=Плита З Кам'яної Цегли +Stone Block Stair=Сходинка З Кам'яного Блоку +Inner Stone Block Stair=Кутова Сходинка З Кам'яного Блоку (Внутрішній Кут) +Outer Stone Block Stair=Кутова Сходинка З Кам'яного Блоку (Зовнішній Кут) +Stone Block Slab=Плита З Кам'яного Блоку +Desert Stone Stair=Сходинка З Пустельного Каменю +Inner Desert Stone Stair=Кутова Сходинка З Пустельного Каменю (Внутрішній Кут) +Outer Desert Stone Stair=Кутова Сходинка З Пустельного Каменю (Зовнішній Кут) +Desert Stone Slab=Плита З Пустельного Каменю +Desert Cobblestone Stair=Сходинка З Пустельного Кругляку +Inner Desert Cobblestone Stair=Кутова Сходинка З Пустельного Кругляку (Внутрішній Кут) +Outer Desert Cobblestone Stair=Кутова Сходинка З Пустельного Кругляку (Зовнішній Кут) +Desert Cobblestone Slab=Плита З Пустельного Каменю +Desert Stone Brick Stair=Сходинка З Цегли Із Пустельного Каменю +Inner Desert Stone Brick Stair=Кутова Сходинка З Цегли Із Пустельного Каменю (Внутрішній Кут) +Outer Desert Stone Brick Stair=Кутова Сходинка З Цегли Із Пустельного Каменю (Зовнішній Кут) +Desert Stone Brick Slab=Плита З Цегли Із Пустельного Каменю +Desert Stone Block Stair=Сходинка З Пустельного Кам'яного Блоку +Inner Desert Stone Block Stair=Кутова Сходинка З Пустельного Кам'яного Блоку (Внутрішній Кут) +Outer Desert Stone Block Stair=Кутова Сходинка З Пустельного Кам'яного Блоку (Зовнішній Кут) +Desert Stone Block Slab=Плита З Пустельного Кам'яного Блоку +Sandstone Stair=Сходинка З Піщанику +Inner Sandstone Stair=Кутова Сходинка З Піщанику (Внутрішній Кут) +Outer Sandstone Stair=Кутова Сходинка З Піщанику (Зовнішній Кут) +Sandstone Slab=Плита З Піщанику +Sandstone Brick Stair=Сходинка З Цегли Із Піщанику +Inner Sandstone Brick Stair=Кутова Сходинка З Цегли Із Піщанику (Внутрішній Кут) +Outer Sandstone Brick Stair=Кутова Сходинка З Цегли Із Піщанику (Зовнішній Кут) +Sandstone Brick Slab=Плита З Цегли Із Піщанику +Sandstone Block Stair=Сходинка З Блоку Із Піщанику +Inner Sandstone Block Stair=Кутова Сходинка З Блоку Із Піщанику (Внутрішній Кут) +Outer Sandstone Block Stair=Кутова Сходинка З Блоку Із Піщанику (Зовнішній Кут) +Sandstone Block Slab=Плита З Блоку Із Піщанику +Desert Sandstone Stair=Сходинка З Пустельного Піщанику +Inner Desert Sandstone Stair=Кутова Сходинка З Пустельного Піщанику (Внутрішній Кут) +Outer Desert Sandstone Stair=Кутова Сходинка З Пустельного Піщанику (Зовнішній Кут) +Desert Sandstone Slab=Плита З Пустельного Піщанику +Desert Sandstone Brick Stair=Сходинка З Цегли Із Пустельного Піщанику +Inner Desert Sandstone Brick Stair=Кутова Сходинка З Цегли Із Пустельного Піщанику (Внутрішній Кут) +Outer Desert Sandstone Brick Stair=Кутова Сходинка З Цегли Із Пустельного Піщанику (Зовнішній Кут) +Desert Sandstone Brick Slab=Плита З Цегли Із Пустельного Піщанику +Desert Sandstone Block Stair=Сходинка З Блоку Із Пустельного Піщанику +Inner Desert Sandstone Block Stair=Кутова Сходинка З Блоку Із Пустельного Піщанику (Внутрішній Кут) +Outer Desert Sandstone Block Stair=Кутова Сходинка З Блоку Із Пустельного Піщанику (Зовнішній Кут) +Desert Sandstone Block Slab=Плита З Блоку Із Пустельного Піщанику +Silver Sandstone Stair=Сходинка З Срібного Піщанику +Inner Silver Sandstone Stair=Кутова Сходинка З Срібного Піщанику (Внутрішній Кут) +Outer Silver Sandstone Stair=Кутова Сходинка З Срібного Піщанику (Зовнішній Кут) +Silver Sandstone Slab=Плита З Срібного Піщанику +Silver Sandstone Brick Stair=Сходинка З Цегли Із Срібного Піщанику +Inner Silver Sandstone Brick Stair=Кутова Сходинка З Цегли Із Срібного Піщанику (Внутрішній Кут) +Outer Silver Sandstone Brick Stair=Кутова Сходинка З Цегли Із Срібного Піщанику (Зовнішній Кут) +Silver Sandstone Brick Slab=Плита З Цегли Із Срібного Піщанику +Silver Sandstone Block Stair=Сходинка З Блоку Із Срібного Піщанику +Inner Silver Sandstone Block Stair=Кутова Сходинка З Блоку Із Срібного Піщанику (Внутрішній Кут) +Outer Silver Sandstone Block Stair=Кутова Сходинка З Блоку Із Срібного Піщанику (Зовнішній Кут) +Silver Sandstone Block Slab=Плита З Блоку Із Срібного Піщанику +Obsidian Stair=Обсидіанова Сходинка +Inner Obsidian Stair=Кутова Обсидіанова Сходинка (Внутрішній Кут) +Outer Obsidian Stair=Кутова Обсидіанова Сходинка (Зовнішній Кут) +Obsidian Slab=Обсидіанова Плита +Obsidian Brick Stair=Сходинка З Обсидіанової Цегли +Inner Obsidian Brick Stair=Кутова Сходинка З Обсидіанової Цегли (Внутрішній Кут) +Outer Obsidian Brick Stair=Кутова Сходинка З Обсидіанової Цегли (Зовнішній Кут) +Obsidian Brick Slab=Плита З Обсидіанової Цегли +Obsidian Block Stair=Сходинка З Обсидіанового Блоку +Inner Obsidian Block Stair=Кутова Сходинка З Обсидіанового Блоку (Внутрішній Кут) +Outer Obsidian Block Stair=Кутова Сходинка З Обсидіанового Блоку (Зовнішній Кут) +Obsidian Block Slab=Плита З Обсидіанового Блоку +Brick Stair=Сходинка З Цегли +Inner Brick Stair=Кутова Сходинка З Цегли (Внутрішній Кут) +Outer Brick Stair=Кутова Сходинка З Цегли (Зовнішній Кут) +Brick Slab=Плита З Цегли +Steel Block Stair=Сходинка Із Сталевого Блоку +Inner Steel Block Stair=Кутова Сходинка Із Сталевого Блоку (Внутрішній Кут) +Outer Steel Block Stair=Кутова Сходинка Із Сталевого Блоку (Зовнішній Кут) +Steel Block Slab=Плита Із Сталевого Блоку +Tin Block Stair=Сходинка З Олов'яного Блоку +Inner Tin Block Stair=Кутова Сходинка З Олов'яного Блоку (Внутрішній Кут) +Outer Tin Block Stair=Кутова Сходинка З Олов'яного Блоку (Зовнішній Кут) +Tin Block Slab=Плита З Олов'яного Блоку +Copper Block Stair=Сходинка З Мідного Блоку +Inner Copper Block Stair=Кутова Сходинка З Мідного Блоку (Внутрішній Кут) +Outer Copper Block Stair=Кутова Сходинка З Мідного Блоку (Зовнішній Кут) +Copper Block Slab=Плита З Мідного Блоку +Bronze Block Stair=Сходинка З Бронзового Блоку +Inner Bronze Block Stair=Кутова Сходинка З Бронзового Блоку (Внутрішній Кут) +Outer Bronze Block Stair=Кутова Сходинка З Бронзового Блоку (Зовнішній Кут) +Bronze Block Slab=Плита З Бронзового Блоку +Gold Block Stair=Сходинка З Золотого Блоку +Inner Gold Block Stair=Сходинка З Золотого Блоку (Внутрішній Кут) +Outer Gold Block Stair=Сходинка З Золотого Блоку (Зовнішній Кут) +Gold Block Slab=Плита З Золотого Блоку +Ice Stair=Крижана Сходинка +Inner Ice Stair=Кутова Крижана Сходинка (Внутрішній Кут) +Outer Ice Stair=Кутова Крижана Сходинка (Зовнішній Кут) +Ice Slab=Крижана Плита +Snow Block Stair=Ступінь З Крижаного Блоку +Inner Snow Block Stair=Кутова Ступінь З Крижаного Блоку (Внутрішній Кут) +Outer Snow Block Stair=Кутова Ступінь З Крижаного Блоку (Зовнішній Кут) +Snow Block Slab=Плита З Крижаного Блоку diff --git a/mods/stairs/locale/stairs.zh_CN.tr b/mods/stairs/locale/stairs.zh_CN.tr new file mode 100644 index 00000000..e37ebcbb --- /dev/null +++ b/mods/stairs/locale/stairs.zh_CN.tr @@ -0,0 +1,153 @@ +# textdomain: stairs +Glass Stair=玻璃楼梯 +Glass Slab=玻璃台阶 +Inner Glass Stair=玻璃楼梯(内) +Outer Glass Stair=玻璃楼梯(外) +Obsidian Glass Stair=黑曜石玻璃楼梯 +Obsidian Glass Slab=黑曜石玻璃台阶 +Inner Obsidian Glass Stair=黑曜石玻璃楼梯(内) +Outer Obsidian Glass Stair=黑曜石玻璃楼梯(外) +Wooden Stair=木楼梯 +Inner Wooden Stair=木楼梯(内) +Outer Wooden Stair=木楼梯(外) +Wooden Slab=木台阶 +Jungle Wood Stair=丛林木楼梯 +Inner Jungle Wood Stair=丛林木楼梯(内) +Outer Jungle Wood Stair=丛林木楼梯(外) +Jungle Wood Slab=丛林木台阶 +Pine Wood Stair=松木楼梯 +Inner Pine Wood Stair=松木楼梯(内) +Outer Pine Wood Stair=松木楼梯(外) +Pine Wood Slab=松木台阶 +Acacia Wood Stair=金合欢木楼梯 +Inner Acacia Wood Stair=金合欢木楼梯(内) +Outer Acacia Wood Stair=金合欢木楼梯(外) +Acacia Wood Slab=金合欢木台阶 +Aspen Wood Stair=白杨木楼梯 +Inner Aspen Wood Stair=白杨木楼梯(内) +Outer Aspen Wood Stair=白杨木楼梯(外) +Aspen Wood Slab=白杨木台阶 +Stone Stair=石楼梯 +Inner Stone Stair=石楼梯(内) +Outer Stone Stair=石楼梯(外) +Stone Slab=石台阶 +Cobblestone Stair=鹅卵石楼梯 +Inner Cobblestone Stair=鹅卵石楼梯(内) +Outer Cobblestone Stair=鹅卵石楼梯(外) +Cobblestone Slab=鹅卵石台阶 +Mossy Cobblestone Stair=苔藓覆盖的鹅卵石楼梯 +Inner Mossy Cobblestone Stair=苔藓覆盖的鹅卵石楼梯(内) +Outer Mossy Cobblestone Stair=苔藓覆盖的鹅卵石楼梯(外) +Mossy Cobblestone Slab=苔藓覆盖的鹅卵石台阶 +Stone Brick Stair=石砖楼梯 +Inner Stone Brick Stair=石砖楼梯(内) +Outer Stone Brick Stair=石砖楼梯(外) +Stone Brick Slab=石砖台阶 +Stone Block Stair=石块楼梯 +Inner Stone Block Stair=石块楼梯(内) +Outer Stone Block Stair=石块楼梯(外) +Stone Block Slab=石块台阶 +Desert Stone Stair=沙漠石楼梯 +Inner Desert Stone Stair=沙漠石楼梯(内) +Outer Desert Stone Stair=沙漠石楼梯(外) +Desert Stone Slab=沙漠石台阶 +Desert Cobblestone Stair=沙漠鹅卵石楼梯 +Inner Desert Cobblestone Stair=沙漠鹅卵石楼梯(内) +Outer Desert Cobblestone Stair=沙漠鹅卵石楼梯(外) +Desert Cobblestone Slab=沙漠鹅卵石台阶 +Desert Stone Brick Stair=沙漠石砖楼梯 +Inner Desert Stone Brick Stair=沙漠石砖楼梯(内) +Outer Desert Stone Brick Stair=沙漠石砖楼梯(外) +Desert Stone Brick Slab=沙漠石砖台阶 +Desert Stone Block Stair=沙漠石块楼梯 +Inner Desert Stone Block Stair=沙漠石块楼梯(内) +Outer Desert Stone Block Stair=沙漠石块楼梯(外) +Desert Stone Block Slab=沙漠石块台阶 +Sandstone Stair=沙石楼梯 +Inner Sandstone Stair=沙石楼梯(内) +Outer Sandstone Stair=沙石楼梯(外) +Sandstone Slab=沙石台阶 +Sandstone Brick Stair=沙石砖楼梯 +Inner Sandstone Brick Stair=沙石砖楼梯(内) +Outer Sandstone Brick Stair=沙石砖楼梯(外) +Sandstone Brick Slab=沙石砖台阶 +Sandstone Block Stair=沙石块楼梯 +Inner Sandstone Block Stair=沙石块楼梯(内) +Outer Sandstone Block Stair=沙石块楼梯(外) +Sandstone Block Slab=沙石块台阶 +Desert Sandstone Stair=沙漠沙石楼梯 +Inner Desert Sandstone Stair=沙漠沙石楼梯(内) +Outer Desert Sandstone Stair=沙漠沙石楼梯(外) +Desert Sandstone Slab=沙漠沙石台阶 +Desert Sandstone Brick Stair=沙漠沙石砖楼梯 +Inner Desert Sandstone Brick Stair=沙漠沙石砖楼梯(内) +Outer Desert Sandstone Brick Stair=沙漠沙石砖楼梯(外) +Desert Sandstone Brick Slab=沙漠沙石砖台阶 +Desert Sandstone Block Stair=沙漠沙石块楼梯 +Inner Desert Sandstone Block Stair=沙漠沙石块楼梯(内) +Outer Desert Sandstone Block Stair=沙漠沙石块楼梯(外) +Desert Sandstone Block Slab=沙漠沙石块台阶 +Silver Sandstone Stair=银沙石楼梯 +Inner Silver Sandstone Stair=银沙石楼梯(内) +Outer Silver Sandstone Stair=银沙石楼梯(外) +Silver Sandstone Slab=银沙石台阶 +Silver Sandstone Brick Stair=银沙石砖楼梯 +Inner Silver Sandstone Brick Stair=银沙石砖楼梯(内) +Outer Silver Sandstone Brick Stair=银沙石砖楼梯(外) +Silver Sandstone Brick Slab=银沙石砖台阶 +Silver Sandstone Block Stair=银沙石块楼梯 +Inner Silver Sandstone Block Stair=银沙石块楼梯(内) +Outer Silver Sandstone Block Stair=银沙石块楼梯(外) +Silver Sandstone Block Slab=银沙石块台阶 +Obsidian Stair=黑曜石楼梯 +Inner Obsidian Stair=黑曜石楼梯(内) +Outer Obsidian Stair=黑曜石楼梯(外) +Obsidian Slab=黑曜石台阶 +Obsidian Brick Stair=黑曜石砖楼梯 +Inner Obsidian Brick Stair=黑曜石砖楼梯(内) +Outer Obsidian Brick Stair=黑曜石砖楼梯(外) +Obsidian Brick Slab=黑曜石砖台阶 +Obsidian Block Stair=黑曜石块楼梯 +Inner Obsidian Block Stair=黑曜石块楼梯(内) +Outer Obsidian Block Stair=黑曜石块楼梯(外) +Obsidian Block Slab=黑曜石块台阶 +Brick Stair=砖楼梯 +Inner Brick Stair=砖楼梯(内) +Outer Brick Stair=砖楼梯(外) +Brick Slab=砖台阶 +Steel Block Stair=铁块楼梯 +Inner Steel Block Stair=铁块楼梯(内) +Outer Steel Block Stair=铁块楼梯(外) +Steel Block Slab=铁块台阶 +Tin Block Stair=锡块楼梯 +Inner Tin Block Stair=锡块楼梯(内) +Outer Tin Block Stair=锡块楼梯(外) +Tin Block Slab=锡块台阶 +Copper Block Stair=铜块楼梯 +Inner Copper Block Stair=铜块楼梯(内) +Outer Copper Block Stair=铜块楼梯(外) +Copper Block Slab=铜块台阶 +Bronze Block Stair=青铜块楼梯 +Inner Bronze Block Stair=青铜块楼梯(内) +Outer Bronze Block Stair=青铜块楼梯(外) +Bronze Block Slab=青铜块台阶 +Gold Block Stair=金块楼梯 +Inner Gold Block Stair=金块楼梯(内) +Outer Gold Block Stair=金块楼梯(外) +Gold Block Slab=金块台阶 +Ice Stair=冰楼梯 +Inner Ice Stair=冰块楼梯(内) +Outer Ice Stair=冰块楼梯(外) +Ice Slab=冰台阶 +Snow Block Stair=雪块楼梯 +Inner Snow Block Stair=雪块楼梯(内) +Outer Snow Block Stair=雪块楼梯(外) +Snow Block Slab=雪块台阶 + + +##### not used anymore ##### + +Blue Stained Stair=蓝木楼梯 +Inner Blue Stained Stair=蓝木楼梯(内) +Outer Blue Stained Stair=蓝木楼梯(外) +Blue Stained Slab=蓝木台阶 diff --git a/mods/stairs/locale/stairs.zh_TW.tr b/mods/stairs/locale/stairs.zh_TW.tr new file mode 100644 index 00000000..eaed61f9 --- /dev/null +++ b/mods/stairs/locale/stairs.zh_TW.tr @@ -0,0 +1,153 @@ +# textdomain: stairs +Glass Stair=玻璃樓梯 +Glass Slab=玻璃臺階 +Inner Glass Stair=玻璃樓梯(內) +Outer Glass Stair=玻璃樓梯(外) +Obsidian Glass Stair=黑曜石玻璃樓梯 +Obsidian Glass Slab=黑曜石玻璃臺階 +Inner Obsidian Glass Stair=黑曜石玻璃樓梯(內) +Outer Obsidian Glass Stair=黑曜石玻璃樓梯(外) +Wooden Stair=木製樓梯 +Inner Wooden Stair=木樓梯(內) +Outer Wooden Stair=木樓梯(外) +Wooden Slab=木製臺階 +Jungle Wood Stair=叢林木樓梯 +Inner Jungle Wood Stair=叢林木樓梯(內) +Outer Jungle Wood Stair=叢林木樓梯(外) +Jungle Wood Slab=叢林木臺階 +Pine Wood Stair=松木樓梯 +Inner Pine Wood Stair=松木樓梯(內) +Outer Pine Wood Stair=松木樓梯(外) +Pine Wood Slab=松木臺階 +Acacia Wood Stair=金合歡木樓梯 +Inner Acacia Wood Stair=金合歡木樓梯(內) +Outer Acacia Wood Stair=金合歡木樓梯(外) +Acacia Wood Slab=金合歡木臺階 +Aspen Wood Stair=白楊木樓梯 +Inner Aspen Wood Stair=白楊木樓梯(內) +Outer Aspen Wood Stair=白楊木樓梯(外) +Aspen Wood Slab=白楊木臺階 +Stone Stair=石樓梯 +Inner Stone Stair=石樓梯(內) +Outer Stone Stair=石樓梯(外) +Stone Slab=石臺階 +Cobblestone Stair=圓石樓梯 +Inner Cobblestone Stair=圓石樓梯(內) +Outer Cobblestone Stair=圓石樓梯(外) +Cobblestone Slab=圓石臺階 +Mossy Cobblestone Stair=苔石樓梯 +Inner Mossy Cobblestone Stair=苔石樓梯(內) +Outer Mossy Cobblestone Stair=苔石樓梯(外) +Mossy Cobblestone Slab=苔石臺階 +Stone Brick Stair=石磚樓梯 +Inner Stone Brick Stair=石磚樓梯(內) +Outer Stone Brick Stair=石磚樓梯(外) +Stone Brick Slab=石磚臺階 +Stone Block Stair=石塊樓梯 +Inner Stone Block Stair=石塊樓梯(內) +Outer Stone Block Stair=石塊樓梯(外) +Stone Block Slab=石塊臺階 +Desert Stone Stair=沙漠石樓梯 +Inner Desert Stone Stair=沙漠石樓梯(內) +Outer Desert Stone Stair=沙漠石樓梯(外) +Desert Stone Slab=沙漠石臺階 +Desert Cobblestone Stair=沙漠圓石樓梯 +Inner Desert Cobblestone Stair=沙漠圓石樓梯(內) +Outer Desert Cobblestone Stair=沙漠圓石樓梯(外) +Desert Cobblestone Slab=沙漠圓石臺階 +Desert Stone Brick Stair=沙漠石磚樓梯 +Inner Desert Stone Brick Stair=沙漠石磚樓梯(內) +Outer Desert Stone Brick Stair=沙漠石磚樓梯(外) +Desert Stone Brick Slab=沙漠石磚臺階 +Desert Stone Block Stair=沙漠石塊樓梯 +Inner Desert Stone Block Stair=沙漠石塊樓梯(內) +Outer Desert Stone Block Stair=沙漠石塊樓梯(外) +Desert Stone Block Slab=沙漠石塊臺階 +Sandstone Stair=沙石樓梯 +Inner Sandstone Stair=沙石樓梯(內) +Outer Sandstone Stair=沙石樓梯(外) +Sandstone Slab=沙石臺階 +Sandstone Brick Stair=沙石磚樓梯 +Inner Sandstone Brick Stair=沙石磚樓梯(內) +Outer Sandstone Brick Stair=沙石磚樓梯(外) +Sandstone Brick Slab=沙石磚臺階 +Sandstone Block Stair=沙石塊樓梯 +Inner Sandstone Block Stair=沙石塊樓梯(內) +Outer Sandstone Block Stair=沙石塊樓梯(外) +Sandstone Block Slab=沙石塊臺階 +Desert Sandstone Stair=沙漠沙石樓梯 +Inner Desert Sandstone Stair=沙漠沙石樓梯(內) +Outer Desert Sandstone Stair=沙漠沙石樓梯(外) +Desert Sandstone Slab=沙漠沙石臺階 +Desert Sandstone Brick Stair=沙漠沙石磚樓梯 +Inner Desert Sandstone Brick Stair=沙漠沙石磚樓梯(內) +Outer Desert Sandstone Brick Stair=沙漠沙石磚樓梯(外) +Desert Sandstone Brick Slab=沙漠沙石磚臺階 +Desert Sandstone Block Stair=沙漠沙石塊樓梯 +Inner Desert Sandstone Block Stair=沙漠沙石塊樓梯(內) +Outer Desert Sandstone Block Stair=沙漠沙石塊樓梯(外) +Desert Sandstone Block Slab=沙漠沙石塊臺階 +Silver Sandstone Stair=銀沙石樓梯 +Inner Silver Sandstone Stair=銀沙石樓梯(內) +Outer Silver Sandstone Stair=銀沙石樓梯(外) +Silver Sandstone Slab=銀沙石臺階 +Silver Sandstone Brick Stair=銀沙石磚樓梯 +Inner Silver Sandstone Brick Stair=銀沙石磚樓梯(內) +Outer Silver Sandstone Brick Stair=銀沙石磚樓梯(外) +Silver Sandstone Brick Slab=銀沙石磚臺階 +Silver Sandstone Block Stair=銀沙石塊樓梯 +Inner Silver Sandstone Block Stair=銀沙石塊樓梯(內) +Outer Silver Sandstone Block Stair=銀沙石塊樓梯(外) +Silver Sandstone Block Slab=銀沙石塊臺階 +Obsidian Stair=黑曜石樓梯 +Inner Obsidian Stair=黑曜石樓梯(內) +Outer Obsidian Stair=黑曜石樓梯(外) +Obsidian Slab=黑曜石臺階 +Obsidian Brick Stair=黑曜石磚樓梯 +Inner Obsidian Brick Stair=黑曜石磚樓梯(內) +Outer Obsidian Brick Stair=黑曜石磚樓梯(外) +Obsidian Brick Slab=黑曜石磚臺階 +Obsidian Block Stair=黑曜石塊樓梯 +Inner Obsidian Block Stair=黑曜石塊樓梯(內) +Outer Obsidian Block Stair=黑曜石塊樓梯(外) +Obsidian Block Slab=黑曜石塊臺階 +Brick Stair=磚樓梯 +Inner Brick Stair=磚樓梯(內) +Outer Brick Stair=磚樓梯(外) +Brick Slab=磚制臺階 +Steel Block Stair=鐵塊樓梯 +Inner Steel Block Stair=鐵塊樓梯(內) +Outer Steel Block Stair=鐵塊樓梯(外) +Steel Block Slab=鐵塊臺階 +Tin Block Stair=錫塊樓梯 +Inner Tin Block Stair=錫塊樓梯(內) +Outer Tin Block Stair=錫塊樓梯(外) +Tin Block Slab=錫塊臺階 +Copper Block Stair=銅塊樓梯 +Inner Copper Block Stair=銅塊樓梯(內) +Outer Copper Block Stair=銅塊樓梯(外) +Copper Block Slab=銅塊臺階 +Bronze Block Stair=青銅塊樓梯 +Inner Bronze Block Stair=青銅塊樓梯(內) +Outer Bronze Block Stair=青銅塊樓梯(外) +Bronze Block Slab=青銅塊臺階 +Gold Block Stair=金塊樓梯 +Inner Gold Block Stair=金塊樓梯(內) +Outer Gold Block Stair=金塊樓梯(外) +Gold Block Slab=金塊臺階 +Ice Stair=冰階梯 +Inner Ice Stair=冰塊樓梯(內) +Outer Ice Stair=冰塊樓梯(外) +Ice Slab=冰臺階 +Snow Block Stair=雪塊樓梯 +Inner Snow Block Stair=雪塊樓梯(內) +Outer Snow Block Stair=雪塊樓梯(外) +Snow Block Slab=雪塊臺階 + + +##### not used anymore ##### + +Blue Stained Stair=藍木樓梯 +Inner Blue Stained Stair=藍木樓梯(內) +Outer Blue Stained Stair=藍木樓梯(外) +Blue Stained Slab=藍木臺階 diff --git a/mods/stairs/locale/template.txt b/mods/stairs/locale/template.txt new file mode 100644 index 00000000..ca2c8657 --- /dev/null +++ b/mods/stairs/locale/template.txt @@ -0,0 +1,145 @@ +# textdomain: stairs +Glass Stair= +Glass Slab= +Inner Glass Stair= +Outer Glass Stair= +Obsidian Glass Stair= +Obsidian Glass Slab= +Inner Obsidian Glass Stair= +Outer Obsidian Glass Stair= +Wooden Stair= +Inner Wooden Stair= +Outer Wooden Stair= +Wooden Slab= +Jungle Wood Stair= +Inner Jungle Wood Stair= +Outer Jungle Wood Stair= +Jungle Wood Slab= +Pine Wood Stair= +Inner Pine Wood Stair= +Outer Pine Wood Stair= +Pine Wood Slab= +Acacia Wood Stair= +Inner Acacia Wood Stair= +Outer Acacia Wood Stair= +Acacia Wood Slab= +Aspen Wood Stair= +Inner Aspen Wood Stair= +Outer Aspen Wood Stair= +Aspen Wood Slab= +Stone Stair= +Inner Stone Stair= +Outer Stone Stair= +Stone Slab= +Cobblestone Stair= +Inner Cobblestone Stair= +Outer Cobblestone Stair= +Cobblestone Slab= +Mossy Cobblestone Stair= +Inner Mossy Cobblestone Stair= +Outer Mossy Cobblestone Stair= +Mossy Cobblestone Slab= +Stone Brick Stair= +Inner Stone Brick Stair= +Outer Stone Brick Stair= +Stone Brick Slab= +Stone Block Stair= +Inner Stone Block Stair= +Outer Stone Block Stair= +Stone Block Slab= +Desert Stone Stair= +Inner Desert Stone Stair= +Outer Desert Stone Stair= +Desert Stone Slab= +Desert Cobblestone Stair= +Inner Desert Cobblestone Stair= +Outer Desert Cobblestone Stair= +Desert Cobblestone Slab= +Desert Stone Brick Stair= +Inner Desert Stone Brick Stair= +Outer Desert Stone Brick Stair= +Desert Stone Brick Slab= +Desert Stone Block Stair= +Inner Desert Stone Block Stair= +Outer Desert Stone Block Stair= +Desert Stone Block Slab= +Sandstone Stair= +Inner Sandstone Stair= +Outer Sandstone Stair= +Sandstone Slab= +Sandstone Brick Stair= +Inner Sandstone Brick Stair= +Outer Sandstone Brick Stair= +Sandstone Brick Slab= +Sandstone Block Stair= +Inner Sandstone Block Stair= +Outer Sandstone Block Stair= +Sandstone Block Slab= +Desert Sandstone Stair= +Inner Desert Sandstone Stair= +Outer Desert Sandstone Stair= +Desert Sandstone Slab= +Desert Sandstone Brick Stair= +Inner Desert Sandstone Brick Stair= +Outer Desert Sandstone Brick Stair= +Desert Sandstone Brick Slab= +Desert Sandstone Block Stair= +Inner Desert Sandstone Block Stair= +Outer Desert Sandstone Block Stair= +Desert Sandstone Block Slab= +Silver Sandstone Stair= +Inner Silver Sandstone Stair= +Outer Silver Sandstone Stair= +Silver Sandstone Slab= +Silver Sandstone Brick Stair= +Inner Silver Sandstone Brick Stair= +Outer Silver Sandstone Brick Stair= +Silver Sandstone Brick Slab= +Silver Sandstone Block Stair= +Inner Silver Sandstone Block Stair= +Outer Silver Sandstone Block Stair= +Silver Sandstone Block Slab= +Obsidian Stair= +Inner Obsidian Stair= +Outer Obsidian Stair= +Obsidian Slab= +Obsidian Brick Stair= +Inner Obsidian Brick Stair= +Outer Obsidian Brick Stair= +Obsidian Brick Slab= +Obsidian Block Stair= +Inner Obsidian Block Stair= +Outer Obsidian Block Stair= +Obsidian Block Slab= +Brick Stair= +Inner Brick Stair= +Outer Brick Stair= +Brick Slab= +Steel Block Stair= +Inner Steel Block Stair= +Outer Steel Block Stair= +Steel Block Slab= +Tin Block Stair= +Inner Tin Block Stair= +Outer Tin Block Stair= +Tin Block Slab= +Copper Block Stair= +Inner Copper Block Stair= +Outer Copper Block Stair= +Copper Block Slab= +Bronze Block Stair= +Inner Bronze Block Stair= +Outer Bronze Block Stair= +Bronze Block Slab= +Gold Block Stair= +Inner Gold Block Stair= +Outer Gold Block Stair= +Gold Block Slab= +Ice Stair= +Inner Ice Stair= +Outer Ice Stair= +Ice Slab= +Snow Block Stair= +Inner Snow Block Stair= +Outer Snow Block Stair= +Snow Block Slab= diff --git a/mods/stairs/mod.conf b/mods/stairs/mod.conf new file mode 100644 index 00000000..7548fa72 --- /dev/null +++ b/mods/stairs/mod.conf @@ -0,0 +1,3 @@ +name = stairs +description = Minetest Game mod: stairs +depends = default diff --git a/mods/stairs/textures/stairs_glass_outer_stairside.png b/mods/stairs/textures/stairs_glass_outer_stairside.png new file mode 100644 index 00000000..9b298c8b Binary files /dev/null and b/mods/stairs/textures/stairs_glass_outer_stairside.png differ diff --git a/mods/stairs/textures/stairs_glass_split.png b/mods/stairs/textures/stairs_glass_split.png new file mode 100644 index 00000000..62879597 Binary files /dev/null and b/mods/stairs/textures/stairs_glass_split.png differ diff --git a/mods/stairs/textures/stairs_glass_stairside.png b/mods/stairs/textures/stairs_glass_stairside.png new file mode 100644 index 00000000..c4242943 Binary files /dev/null and b/mods/stairs/textures/stairs_glass_stairside.png differ diff --git a/mods/stairs/textures/stairs_obsidian_glass_outer_stairside.png b/mods/stairs/textures/stairs_obsidian_glass_outer_stairside.png new file mode 100644 index 00000000..0098f683 Binary files /dev/null and b/mods/stairs/textures/stairs_obsidian_glass_outer_stairside.png differ diff --git a/mods/stairs/textures/stairs_obsidian_glass_split.png b/mods/stairs/textures/stairs_obsidian_glass_split.png new file mode 100644 index 00000000..7647b9b0 Binary files /dev/null and b/mods/stairs/textures/stairs_obsidian_glass_split.png differ diff --git a/mods/stairs/textures/stairs_obsidian_glass_stairside.png b/mods/stairs/textures/stairs_obsidian_glass_stairside.png new file mode 100644 index 00000000..40b17545 Binary files /dev/null and b/mods/stairs/textures/stairs_obsidian_glass_stairside.png differ diff --git a/mods/steel b/mods/steel new file mode 160000 index 00000000..1e512136 --- /dev/null +++ b/mods/steel @@ -0,0 +1 @@ +Subproject commit 1e5121362165ef3490ddff3d87c0565b75eb79da diff --git a/mods/technic b/mods/technic new file mode 160000 index 00000000..c665caf9 --- /dev/null +++ b/mods/technic @@ -0,0 +1 @@ +Subproject commit c665caf91099e838f8ef6a5a73bbe3bad1e7f11e diff --git a/mods/technic_armor b/mods/technic_armor new file mode 160000 index 00000000..694642f5 --- /dev/null +++ b/mods/technic_armor @@ -0,0 +1 @@ +Subproject commit 694642f5619aa31ef81caadbddade5d007527ae9 diff --git a/mods/teleport_potion b/mods/teleport_potion new file mode 160000 index 00000000..eeb912c1 --- /dev/null +++ b/mods/teleport_potion @@ -0,0 +1 @@ +Subproject commit eeb912c1050d778bd2c1220bd3c2df5071382cfb diff --git a/mods/tnt/README.txt b/mods/tnt/README.txt new file mode 100644 index 00000000..df244fe4 --- /dev/null +++ b/mods/tnt/README.txt @@ -0,0 +1,74 @@ +Minetest Game mod: tnt +====================== +See license.txt for license information. + +Authors of source code +---------------------- +PilzAdam (MIT) +ShadowNinja (MIT) +sofar (sofar@foo-projects.org) (MIT) +Various Minetest developers and contributors (MIT) + +Authors of media +---------------- +BlockMen (CC BY-SA 3.0): +All textures not mentioned below. + +ShadowNinja (CC BY-SA 3.0): +tnt_smoke.png + +Wuzzy (CC BY-SA 3.0): +All gunpowder textures except tnt_gunpowder_inventory.png. + +sofar (sofar@foo-projects.org) (CC BY-SA 3.0): +tnt_blast.png + +paramat (CC BY-SA 3.0) +tnt_tnt_stick.png - Derived from a texture by benrob0329. + +TumeniNodes (CC0 1.0) +tnt_explode.ogg +renamed, edited, and converted to .ogg from Explosion2.wav +by steveygos93 (CC0 1.0) + + +tnt_ignite.ogg +renamed, edited, and converted to .ogg from sparkler_fuse_nm.wav +by theneedle.tv (CC0 1.0) + + +tnt_gunpowder_burning.ogg +renamed, edited, and converted to .ogg from road flare ignite burns.wav +by frankelmedico (CC0 1.0) + + + +Introduction +------------ +This mod adds TNT to Minetest. TNT is a tool to help the player +in mining. + +How to use the mod: + +Craft gunpowder by placing coal and gravel in the crafting area. +The gunpowder can be used to craft TNT sticks or as a fuse trail for TNT. + +To craft 2 TNT sticks: +G_G +GPG +G_G +G = gunpowder +P = paper +The sticks are not usable as an explosive. + +Craft TNT from 9 TNT sticks. + +There are different ways to ignite TNT: + 1. Hit it with a torch. + 2. Hit a gunpowder fuse trail that leads to TNT with a torch or + flint-and-steel. + 3. Activate it with mesecons (fastest way). + +For 1 TNT: +Node destruction radius is 3 nodes. +Player and object damage radius is 6 nodes. diff --git a/mods/tnt/init.lua b/mods/tnt/init.lua new file mode 100644 index 00000000..d48258f3 --- /dev/null +++ b/mods/tnt/init.lua @@ -0,0 +1,700 @@ +-- tnt/init.lua + +tnt = {} +core.register_privilege("trusted_player", "special grantings, used for tnt for example") + +-- Load support for MT game translation. +local S = minetest.get_translator("tnt") + + +-- Default to enabled when in singleplayer +local enable_tnt = minetest.settings:get_bool("enable_tnt") +if enable_tnt == nil then + enable_tnt = minetest.is_singleplayer() +end + +-- loss probabilities array (one in X will be lost) +local loss_prob = {} + +loss_prob["default:cobble"] = 3 +loss_prob["default:dirt"] = 4 + +local tnt_radius = tonumber(minetest.settings:get("tnt_radius") or 3) + +-- Fill a list with data for content IDs, after all nodes are registered +local cid_data = {} +minetest.register_on_mods_loaded(function() + for name, def in pairs(minetest.registered_nodes) do + cid_data[minetest.get_content_id(name)] = { + name = name, + drops = def.drops, + flammable = def.groups.flammable, + on_blast = def.on_blast, + } + end +end) + +local function rand_pos(center, pos, radius) + local def + local reg_nodes = minetest.registered_nodes + local i = 0 + repeat + -- Give up and use the center if this takes too long + if i > 4 then + pos.x, pos.z = center.x, center.z + break + end + pos.x = center.x + math.random(-radius, radius) + pos.z = center.z + math.random(-radius, radius) + def = reg_nodes[minetest.get_node(pos).name] + i = i + 1 + until def and not def.walkable +end + +local function eject_drops(drops, pos, radius) + local drop_pos = vector.new(pos) + for _, item in pairs(drops) do + local count = math.min(item:get_count(), item:get_stack_max()) + while count > 0 do + local take = math.max(1,math.min(radius * radius, + count, + item:get_stack_max())) + rand_pos(pos, drop_pos, radius) + local dropitem = ItemStack(item) + dropitem:set_count(take) + local obj = minetest.add_item(drop_pos, dropitem) + if obj then + obj:get_luaentity().collect = true + obj:set_acceleration({x = 0, y = -10, z = 0}) + obj:set_velocity({x = math.random(-3, 3), + y = math.random(0, 10), + z = math.random(-3, 3)}) + end + count = count - take + end + end +end + +local function add_drop(drops, item) + item = ItemStack(item) + local name = item:get_name() + if loss_prob[name] ~= nil and math.random(1, loss_prob[name]) == 1 then + return + end + + local drop = drops[name] + if drop == nil then + drops[name] = item + else + drop:set_count(drop:get_count() + item:get_count()) + end +end + +local basic_flame_on_construct -- cached value +local function destroy(drops, npos, cid, c_air, c_fire, + on_blast_queue, on_construct_queue, + ignore_protection, ignore_on_blast, owner) + if not ignore_protection and minetest.is_protected(npos, owner) then + return cid + end + + local def = cid_data[cid] + + if not def then + return c_air + elseif not ignore_on_blast and def.on_blast then + on_blast_queue[#on_blast_queue + 1] = { + pos = vector.new(npos), + on_blast = def.on_blast + } + return cid + elseif def.flammable then + on_construct_queue[#on_construct_queue + 1] = { + fn = basic_flame_on_construct, + pos = vector.new(npos) + } + return c_fire + else + local node_drops = minetest.get_node_drops(def.name, "") + for _, item in pairs(node_drops) do + add_drop(drops, item) + end + return c_air + end +end + +local function calc_velocity(pos1, pos2, old_vel, power) + -- Avoid errors caused by a vector of zero length + if vector.equals(pos1, pos2) then + return old_vel + end + + local vel = vector.direction(pos1, pos2) + vel = vector.normalize(vel) + vel = vector.multiply(vel, power) + + -- Divide by distance + local dist = vector.distance(pos1, pos2) + dist = math.max(dist, 1) + vel = vector.divide(vel, dist) + + -- Add old velocity + vel = vector.add(vel, old_vel) + + -- randomize it a bit + vel = vector.add(vel, { + x = math.random() - 0.5, + y = math.random() - 0.5, + z = math.random() - 0.5, + }) + + -- Limit to terminal velocity + dist = vector.length(vel) + if dist > 250 then + vel = vector.divide(vel, dist / 250) + end + return vel +end + +local function entity_physics(pos, radius, drops) + local objs = minetest.get_objects_inside_radius(pos, radius) + for _, obj in pairs(objs) do + local obj_pos = obj:get_pos() + local dist = math.max(1, vector.distance(pos, obj_pos)) + + local damage = (4 / dist) * radius + if obj:is_player() then + local dir = vector.normalize(vector.subtract(obj_pos, pos)) + local moveoff = vector.multiply(dir, 2 / dist * radius) + obj:add_velocity(moveoff) + + obj:set_hp(obj:get_hp() - damage) + else + local luaobj = obj:get_luaentity() + + -- object might have disappeared somehow + if luaobj then + local do_damage = true + local do_knockback = true + local entity_drops = {} + local objdef = minetest.registered_entities[luaobj.name] + + if objdef and objdef.on_blast then + do_damage, do_knockback, entity_drops = objdef.on_blast(luaobj, damage) + end + + if do_knockback then + local obj_vel = obj:get_velocity() + obj:set_velocity(calc_velocity(pos, obj_pos, + obj_vel, radius * 10)) + end + if do_damage then + if not obj:get_armor_groups().immortal then + obj:punch(obj, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = damage}, + }, nil) + end + end + for _, item in pairs(entity_drops) do + add_drop(drops, item) + end + end + end + end +end + +local function add_effects(pos, radius, drops) + minetest.add_particle({ + pos = pos, + velocity = vector.new(), + acceleration = vector.new(), + expirationtime = 0.4, + size = radius * 10, + collisiondetection = false, + vertical = false, + texture = "tnt_boom.png", + glow = 15, + }) + minetest.add_particlespawner({ + amount = 64, + time = 0.5, + minpos = vector.subtract(pos, radius / 2), + maxpos = vector.add(pos, radius / 2), + minvel = {x = -10, y = -10, z = -10}, + maxvel = {x = 10, y = 10, z = 10}, + minacc = vector.new(), + maxacc = vector.new(), + minexptime = 1, + maxexptime = 2.5, + minsize = radius * 3, + maxsize = radius * 5, + texture = "tnt_smoke.png", + }) + + -- we just dropped some items. Look at the items entities and pick + -- one of them to use as texture + local texture = "tnt_blast.png" --fallback texture + local node + local most = 0 + for name, stack in pairs(drops) do + local count = stack:get_count() + if count > most then + most = count + local def = minetest.registered_nodes[name] + if def then + node = { name = name } + if def.tiles and type(def.tiles[1]) == "string" then + texture = def.tiles[1] + end + end + end + end + + minetest.add_particlespawner({ + amount = 64, + time = 0.1, + minpos = vector.subtract(pos, radius / 2), + maxpos = vector.add(pos, radius / 2), + minvel = {x = -3, y = 0, z = -3}, + maxvel = {x = 3, y = 5, z = 3}, + minacc = {x = 0, y = -10, z = 0}, + maxacc = {x = 0, y = -10, z = 0}, + minexptime = 0.8, + maxexptime = 2.0, + minsize = radius * 0.33, + maxsize = radius, + texture = texture, + -- ^ only as fallback for clients without support for `node` parameter + node = node, + collisiondetection = true, + }) +end + +function tnt.burn(pos, nodename) + local name = nodename or minetest.get_node(pos).name + local def = minetest.registered_nodes[name] + if not def then + return + elseif def.on_ignite then + def.on_ignite(pos) + elseif minetest.get_item_group(name, "tnt") > 0 then + minetest.swap_node(pos, {name = name .. "_burning"}) + minetest.sound_play("tnt_ignite", {pos = pos, gain = 1.0}, true) + minetest.get_node_timer(pos):start(1) + end +end + +local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast, owner, explode_center) + pos = vector.round(pos) + -- scan for adjacent TNT nodes first, and enlarge the explosion + local vm1 = VoxelManip() + local p1 = vector.subtract(pos, 2) + local p2 = vector.add(pos, 2) + local minp, maxp = vm1:read_from_map(p1, p2) + local a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) + local data = vm1:get_data() + local count = 0 + local c_tnt + local c_tnt_burning = minetest.get_content_id("tnt:tnt_burning") + local c_tnt_boom = minetest.get_content_id("tnt:boom") + local c_air = minetest.CONTENT_AIR + local c_ignore = minetest.CONTENT_IGNORE + if enable_tnt then + c_tnt = minetest.get_content_id("tnt:tnt") + else + c_tnt = c_tnt_burning -- tnt is not registered if disabled + end + -- make sure we still have explosion even when centre node isnt tnt related + if explode_center then + count = 1 + end + + for z = pos.z - 2, pos.z + 2 do + for y = pos.y - 2, pos.y + 2 do + local vi = a:index(pos.x - 2, y, z) + for x = pos.x - 2, pos.x + 2 do + local cid = data[vi] + if cid == c_tnt or cid == c_tnt_boom or cid == c_tnt_burning then + count = count + 1 + data[vi] = c_air + end + vi = vi + 1 + end + end + end + + vm1:set_data(data) + vm1:write_to_map() + + -- recalculate new radius + radius = math.floor(radius * math.pow(count, 1/3)) + + -- perform the explosion + local vm = VoxelManip() + local pr = PseudoRandom(os.time()) + p1 = vector.subtract(pos, radius) + p2 = vector.add(pos, radius) + minp, maxp = vm:read_from_map(p1, p2) + a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) + data = vm:get_data() + + local drops = {} + local on_blast_queue = {} + local on_construct_queue = {} + basic_flame_on_construct = minetest.registered_nodes["fire:basic_flame"].on_construct + + local c_fire = minetest.get_content_id("fire:basic_flame") + for z = -radius, radius do + for y = -radius, radius do + local vi = a:index(pos.x + (-radius), pos.y + y, pos.z + z) + for x = -radius, radius do + local r = vector.length(vector.new(x, y, z)) + if (radius * radius) / (r * r) >= (pr:next(80, 125) / 100) then + local cid = data[vi] + local p = {x = pos.x + x, y = pos.y + y, z = pos.z + z} + if cid ~= c_air and cid ~= c_ignore then + data[vi] = destroy(drops, p, cid, c_air, c_fire, + on_blast_queue, on_construct_queue, + ignore_protection, ignore_on_blast, owner) + end + end + vi = vi + 1 + end + end + end + + vm:set_data(data) + vm:write_to_map() + vm:update_map() + vm:update_liquids() + + -- call check_single_for_falling for everything within 1.5x blast radius + for y = -radius * 1.5, radius * 1.5 do + for z = -radius * 1.5, radius * 1.5 do + for x = -radius * 1.5, radius * 1.5 do + local rad = {x = x, y = y, z = z} + local s = vector.add(pos, rad) + local r = vector.length(rad) + if r / radius < 1.4 then + minetest.check_single_for_falling(s) + end + end + end + end + + for _, queued_data in pairs(on_blast_queue) do + local dist = math.max(1, vector.distance(queued_data.pos, pos)) + local intensity = (radius * radius) / (dist * dist) + local node_drops = queued_data.on_blast(queued_data.pos, intensity) + if node_drops then + for _, item in pairs(node_drops) do + add_drop(drops, item) + end + end + end + + for _, queued_data in pairs(on_construct_queue) do + queued_data.fn(queued_data.pos) + end + + minetest.log("action", "TNT owned by " .. owner .. " detonated at " .. + minetest.pos_to_string(pos) .. " with radius " .. radius) + + return drops, radius +end + +function tnt.boom(pos, def) + def = def or {} + def.radius = def.radius or 1 + def.damage_radius = def.damage_radius or def.radius * 2 + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + if not def.explode_center and def.ignore_protection ~= true then + minetest.set_node(pos, {name = "tnt:boom"}) + end + local sound = def.sound or "tnt_explode" + minetest.sound_play(sound, {pos = pos, gain = 2.5, + max_hear_distance = math.min(def.radius * 20, 128)}, true) + local drops, radius = tnt_explode(pos, def.radius, def.ignore_protection, + def.ignore_on_blast, owner, def.explode_center) + -- append entity drops + local damage_radius = (radius / math.max(1, def.radius)) * def.damage_radius + entity_physics(pos, damage_radius, drops) + if not def.disable_drops then + eject_drops(drops, pos, radius) + end + add_effects(pos, radius, drops) + minetest.log("action", "A TNT explosion occurred at " .. minetest.pos_to_string(pos) .. + " with radius " .. radius) +end + +minetest.register_node("tnt:boom", { + drawtype = "airlike", + inventory_image = "tnt_boom.png", + wield_image = "tnt_boom.png", + light_source = default.LIGHT_MAX, + walkable = false, + drop = "", + groups = {dig_immediate = 3, not_in_creative_inventory = 1}, + -- unaffected by explosions + on_blast = function() end, +}) + +minetest.register_node("tnt:gunpowder", { + description = S("Gun Powder"), + drawtype = "raillike", + paramtype = "light", + is_ground_content = false, + sunlight_propagates = true, + walkable = false, + tiles = { + "tnt_gunpowder_straight.png", + "tnt_gunpowder_curved.png", + "tnt_gunpowder_t_junction.png", + "tnt_gunpowder_crossing.png" + }, + inventory_image = "tnt_gunpowder_inventory.png", + wield_image = "tnt_gunpowder_inventory.png", + selection_box = { + type = "fixed", + fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, + }, + groups = {dig_immediate = 2, attached_node = 1, flammable = 5, + connect_to_raillike = minetest.raillike_group("gunpowder")}, + sounds = default.node_sound_leaves_defaults(), + + on_punch = function(pos, node, puncher) + if puncher:get_wielded_item():get_name() == "default:torch" then + if(minetest.check_player_privs(puncher:get_player_name(), {trusted_player=true})) then + minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) + default.log_player_action(puncher, "ignites tnt:gunpowder at", pos) + end + end + end, + on_blast = function(pos, intensity) + minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) + end, + on_burn = function(pos) + minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) + end, + on_ignite = function(pos, igniter) + minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) + end, +}) + +minetest.register_node("tnt:gunpowder_burning", { + drawtype = "raillike", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + light_source = 5, + tiles = {{ + name = "tnt_gunpowder_burning_straight_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1, + } + }, + { + name = "tnt_gunpowder_burning_curved_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1, + } + }, + { + name = "tnt_gunpowder_burning_t_junction_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1, + } + }, + { + name = "tnt_gunpowder_burning_crossing_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1, + } + }}, + selection_box = { + type = "fixed", + fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, + }, + drop = "", + groups = { + dig_immediate = 2, + attached_node = 1, + connect_to_raillike = minetest.raillike_group("gunpowder"), + not_in_creative_inventory = 1 + }, + sounds = default.node_sound_leaves_defaults(), + on_timer = function(pos, elapsed) + for dx = -1, 1 do + for dz = -1, 1 do + if math.abs(dx) + math.abs(dz) == 1 then + for dy = -1, 1 do + tnt.burn({ + x = pos.x + dx, + y = pos.y + dy, + z = pos.z + dz, + }) + end + end + end + end + minetest.remove_node(pos) + end, + -- unaffected by explosions + on_blast = function() end, + on_construct = function(pos) + minetest.sound_play("tnt_gunpowder_burning", {pos = pos, + gain = 1.0}, true) + minetest.get_node_timer(pos):start(1) + end, +}) + +minetest.register_craft({ + output = "tnt:gunpowder 5", + type = "shapeless", + recipe = {"default:coal_lump", "default:gravel"} +}) + +minetest.register_craftitem("tnt:tnt_stick", { + description = S("TNT Stick"), + inventory_image = "tnt_tnt_stick.png", + groups = {flammable = 5}, +}) + +if enable_tnt then + minetest.register_craft({ + output = "tnt:tnt_stick 2", + recipe = { + {"tnt:gunpowder", "", "tnt:gunpowder"}, + {"tnt:gunpowder", "default:paper", "tnt:gunpowder"}, + {"tnt:gunpowder", "", "tnt:gunpowder"}, + } + }) + + minetest.register_craft({ + output = "tnt:tnt", + recipe = { + {"tnt:tnt_stick", "tnt:tnt_stick", "tnt:tnt_stick"}, + {"tnt:tnt_stick", "tnt:tnt_stick", "tnt:tnt_stick"}, + {"tnt:tnt_stick", "tnt:tnt_stick", "tnt:tnt_stick"} + } + }) + + minetest.register_abm({ + label = "TNT ignition", + nodenames = {"group:tnt", "tnt:gunpowder"}, + neighbors = {"fire:basic_flame", "default:lava_source", "default:lava_flowing"}, + interval = 4, + chance = 1, + action = function(pos, node) + tnt.burn(pos, node.name) + end, + }) +end + +function tnt.register_tnt(def) + local name + if not def.name:find(':') then + name = "tnt:" .. def.name + else + name = def.name + def.name = def.name:match(":([%w_]+)") + end + if not def.tiles then def.tiles = {} end + local tnt_top = def.tiles.top or def.name .. "_top.png" + local tnt_bottom = def.tiles.bottom or def.name .. "_bottom.png" + local tnt_side = def.tiles.side or def.name .. "_side.png" + local tnt_burning = def.tiles.burning or def.name .. "_top_burning_animated.png" + if not def.damage_radius then def.damage_radius = def.radius * 2 end + + if enable_tnt then + minetest.register_node(":" .. name, { + description = def.description, + tiles = {tnt_top, tnt_bottom, tnt_side}, + is_ground_content = false, + groups = {dig_immediate = 2, mesecon = 2, tnt = 1, flammable = 5}, + sounds = default.node_sound_wood_defaults(), + after_place_node = function(pos, placer) + if placer:is_player() then + local meta = minetest.get_meta(pos) + meta:set_string("owner", placer:get_player_name()) + end + end, + on_punch = function(pos, node, puncher) + if puncher:get_wielded_item():get_name() == "default:torch" then + minetest.swap_node(pos, {name = name .. "_burning"}) + minetest.registered_nodes[name .. "_burning"].on_construct(pos) + default.log_player_action(puncher, "ignites", node.name, "at", pos) + end + end, + on_blast = function(pos, intensity) + minetest.after(0.1, function() + tnt.boom(pos, def) + end) + end, + mesecons = {effector = + {action_on = + function(pos) + tnt.boom(pos, def) + end + } + }, + on_burn = function(pos) + minetest.swap_node(pos, {name = name .. "_burning"}) + minetest.registered_nodes[name .. "_burning"].on_construct(pos) + end, + on_ignite = function(pos, igniter) + minetest.swap_node(pos, {name = name .. "_burning"}) + minetest.registered_nodes[name .. "_burning"].on_construct(pos) + end, + }) + end + + minetest.register_node(":" .. name .. "_burning", { + tiles = { + { + name = tnt_burning, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1, + } + }, + tnt_bottom, tnt_side + }, + light_source = 5, + drop = "", + sounds = default.node_sound_wood_defaults(), + groups = {falling_node = 1, not_in_creative_inventory = 1}, + on_timer = function(pos, elapsed) + tnt.boom(pos, def) + end, + -- unaffected by explosions + on_blast = function() end, + on_construct = function(pos) + minetest.sound_play("tnt_ignite", {pos = pos}, true) + minetest.get_node_timer(pos):start(4) + minetest.check_for_falling(pos) + end, + }) +end + +tnt.register_tnt({ + name = "tnt:tnt", + description = S("TNT"), + radius = tnt_radius, +}) diff --git a/mods/tnt/license.txt b/mods/tnt/license.txt new file mode 100644 index 00000000..e59ec6ef --- /dev/null +++ b/mods/tnt/license.txt @@ -0,0 +1,100 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2014-2016 PilzAdam +Copyright (C) 2014-2016 ShadowNinja +Copyright (C) 2016 sofar (sofar@foo-projects.org) +Copyright (C) 2014-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + +=================================== + +Licenses of media +----------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2014-2016 BlockMen +Copyright (C) 2014-2016 ShadowNinja +Copyright (C) 2015-2016 Wuzzy +Copyright (C) 2016 sofar (sofar@foo-projects.org) +Copyright (C) 2018 paramat + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ + +==================================================== + +CC0 1.0 Universal (CC0 1.0) Public Domain Dedication +for audio files (found in sounds folder) +TumeniNodes +steveygos93 +theneedle.tv +frankelmedico + +No Copyright + +The person who associated a work with this deed has dedicated the work to the public domain +by waiving all of his or her rights to the work worldwide under copyright law, including all +related and neighboring rights, to the extent allowed by law. + +You can copy, modify, distribute and perform the work, even for commercial purposes, all +without asking permission. See Other Information below. + +In no way are the patent or trademark rights of any person affected by CC0, nor are the +rights that other persons may have in the work or in how the work is used, such as publicity +or privacy rights. + +Unless expressly stated otherwise, the person who associated a work with this deed makes no +warranties about the work, and disclaims liability for all uses of the work, to the fullest +extent permitted by applicable law. + +When using or citing the work, you should not imply endorsement by the author or the affirmer. + +This license is acceptable for Free Cultural Works. +For more Information: +https://creativecommons.org/publicdomain/zero/1.0/ + diff --git a/mods/tnt/locale/template.txt b/mods/tnt/locale/template.txt new file mode 100644 index 00000000..62bcb150 --- /dev/null +++ b/mods/tnt/locale/template.txt @@ -0,0 +1,4 @@ +# textdomain: tnt +Gun Powder= +TNT Stick= +TNT= diff --git a/mods/tnt/locale/tnt.de.tr b/mods/tnt/locale/tnt.de.tr new file mode 100644 index 00000000..09d2ac26 --- /dev/null +++ b/mods/tnt/locale/tnt.de.tr @@ -0,0 +1,4 @@ +# textdomain: tnt +Gun Powder=Schießpulver +TNT Stick=TNT-Stange +TNT=TNT diff --git a/mods/tnt/locale/tnt.eo.tr b/mods/tnt/locale/tnt.eo.tr new file mode 100644 index 00000000..86240914 --- /dev/null +++ b/mods/tnt/locale/tnt.eo.tr @@ -0,0 +1,4 @@ +# textdomain: tnt +Gun Powder=Pulvo +TNT Stick=Dinamita Bastono +TNT=Dinamito diff --git a/mods/tnt/locale/tnt.es.tr b/mods/tnt/locale/tnt.es.tr new file mode 100644 index 00000000..d9f3f205 --- /dev/null +++ b/mods/tnt/locale/tnt.es.tr @@ -0,0 +1,4 @@ +# textdomain: tnt +Gun Powder=Pólvora +TNT Stick=Cartucho de TNT +TNT=TNT diff --git a/mods/tnt/locale/tnt.fr.tr b/mods/tnt/locale/tnt.fr.tr new file mode 100644 index 00000000..3fe48fb0 --- /dev/null +++ b/mods/tnt/locale/tnt.fr.tr @@ -0,0 +1,4 @@ +# textdomain: tnt +Gun Powder=Poudre à canon +TNT Stick=Bâton de TNT +TNT=TNT diff --git a/mods/tnt/locale/tnt.id.tr b/mods/tnt/locale/tnt.id.tr new file mode 100644 index 00000000..2652ae0c --- /dev/null +++ b/mods/tnt/locale/tnt.id.tr @@ -0,0 +1,4 @@ +# textdomain: tnt +Gun Powder=Bubuk Mesiu +TNT Stick=Tongkat TNT +TNT=TNT diff --git a/mods/tnt/locale/tnt.it.tr b/mods/tnt/locale/tnt.it.tr new file mode 100644 index 00000000..6437c003 --- /dev/null +++ b/mods/tnt/locale/tnt.it.tr @@ -0,0 +1,4 @@ +# textdomain: tnt +Gun Powder=Polvere da sparo +TNT Stick=Candelotto di TNT +TNT=TNT diff --git a/mods/tnt/locale/tnt.ja.tr b/mods/tnt/locale/tnt.ja.tr new file mode 100644 index 00000000..d7af9f58 --- /dev/null +++ b/mods/tnt/locale/tnt.ja.tr @@ -0,0 +1,4 @@ +# textdomain: tnt +Gun Powder=火薬 +TNT Stick=ダイナマイト +TNT=TNT diff --git a/mods/tnt/locale/tnt.jbo.tr b/mods/tnt/locale/tnt.jbo.tr new file mode 100644 index 00000000..b1b425ac --- /dev/null +++ b/mods/tnt/locale/tnt.jbo.tr @@ -0,0 +1,4 @@ +# textdomain: tnt +Gun Powder=lo tercelpu'o +TNT Stick=lo granrti'enti +TNT=lo bamrti'enti diff --git a/mods/tnt/locale/tnt.ms.tr b/mods/tnt/locale/tnt.ms.tr new file mode 100644 index 00000000..c4c5fddc --- /dev/null +++ b/mods/tnt/locale/tnt.ms.tr @@ -0,0 +1,4 @@ +# textdomain: tnt +Gun Powder=Serbuk Senjata Api +TNT Stick=Batang TNT +TNT=TNT diff --git a/mods/tnt/locale/tnt.pl.tr b/mods/tnt/locale/tnt.pl.tr new file mode 100644 index 00000000..1ede267d --- /dev/null +++ b/mods/tnt/locale/tnt.pl.tr @@ -0,0 +1,4 @@ +# textdomain: tnt +Gun Powder=Proch strzelniczy +TNT Stick=Dynamit +TNT=TNT diff --git a/mods/tnt/locale/tnt.pt_BR.tr b/mods/tnt/locale/tnt.pt_BR.tr new file mode 100644 index 00000000..d4fc1742 --- /dev/null +++ b/mods/tnt/locale/tnt.pt_BR.tr @@ -0,0 +1,4 @@ +# textdomain: tnt +Gun Powder=Pólvora +TNT Stick=Banana de Dinamite +TNT=Dinamite diff --git a/mods/tnt/locale/tnt.ru.tr b/mods/tnt/locale/tnt.ru.tr new file mode 100644 index 00000000..a8cee43b --- /dev/null +++ b/mods/tnt/locale/tnt.ru.tr @@ -0,0 +1,4 @@ +# textdomain: tnt +Gun Powder=Порох +TNT Stick=Тротиловая Палка +TNT=Тротил diff --git a/mods/tnt/locale/tnt.sk.tr b/mods/tnt/locale/tnt.sk.tr new file mode 100644 index 00000000..639b8c87 --- /dev/null +++ b/mods/tnt/locale/tnt.sk.tr @@ -0,0 +1,4 @@ +# textdomain: tnt +Gun Powder=Pušný prach +TNT Stick=Časť TNT +TNT=TNT diff --git a/mods/tnt/locale/tnt.sv.tr b/mods/tnt/locale/tnt.sv.tr new file mode 100644 index 00000000..fd08913f --- /dev/null +++ b/mods/tnt/locale/tnt.sv.tr @@ -0,0 +1,4 @@ +# textdomain: tnt +Gun Powder=Krut +TNT Stick=Dynamitpinne +TNT=Dynamit diff --git a/mods/tnt/locale/tnt.uk.tr b/mods/tnt/locale/tnt.uk.tr new file mode 100644 index 00000000..684466d5 --- /dev/null +++ b/mods/tnt/locale/tnt.uk.tr @@ -0,0 +1,4 @@ +# textdomain: tnt +Gun Powder=Порох +TNT Stick=Тротилова Паличка +TNT=Тротил diff --git a/mods/tnt/locale/tnt.zh_CN.tr b/mods/tnt/locale/tnt.zh_CN.tr new file mode 100644 index 00000000..4cb2e949 --- /dev/null +++ b/mods/tnt/locale/tnt.zh_CN.tr @@ -0,0 +1,4 @@ +# textdomain: tnt +Gun Powder=火药粉 +TNT Stick=三硝基甲苯棒 +TNT=三硝基甲苯 diff --git a/mods/tnt/locale/tnt.zh_TW.tr b/mods/tnt/locale/tnt.zh_TW.tr new file mode 100644 index 00000000..c1b3caf3 --- /dev/null +++ b/mods/tnt/locale/tnt.zh_TW.tr @@ -0,0 +1,4 @@ +# textdomain: tnt +Gun Powder=火藥粉 +TNT Stick=炸藥棒 +TNT=炸藥包 diff --git a/mods/tnt/mod.conf b/mods/tnt/mod.conf new file mode 100644 index 00000000..9385e825 --- /dev/null +++ b/mods/tnt/mod.conf @@ -0,0 +1,3 @@ +name = tnt +description = Minetest Game mod: tnt +depends = default, fire diff --git a/mods/tnt/sounds/tnt_explode.ogg b/mods/tnt/sounds/tnt_explode.ogg new file mode 100644 index 00000000..e00a16c1 Binary files /dev/null and b/mods/tnt/sounds/tnt_explode.ogg differ diff --git a/mods/tnt/sounds/tnt_gunpowder_burning.ogg b/mods/tnt/sounds/tnt_gunpowder_burning.ogg new file mode 100644 index 00000000..8581c2d6 Binary files /dev/null and b/mods/tnt/sounds/tnt_gunpowder_burning.ogg differ diff --git a/mods/tnt/sounds/tnt_ignite.ogg b/mods/tnt/sounds/tnt_ignite.ogg new file mode 100644 index 00000000..1a7062e9 Binary files /dev/null and b/mods/tnt/sounds/tnt_ignite.ogg differ diff --git a/mods/tnt/textures/tnt_blast.png b/mods/tnt/textures/tnt_blast.png new file mode 100644 index 00000000..92be28ba Binary files /dev/null and b/mods/tnt/textures/tnt_blast.png differ diff --git a/mods/tnt/textures/tnt_boom.png b/mods/tnt/textures/tnt_boom.png new file mode 100644 index 00000000..c848bfcd Binary files /dev/null and b/mods/tnt/textures/tnt_boom.png differ diff --git a/mods/tnt/textures/tnt_bottom.png b/mods/tnt/textures/tnt_bottom.png new file mode 100644 index 00000000..95f66cb9 Binary files /dev/null and b/mods/tnt/textures/tnt_bottom.png differ diff --git a/mods/tnt/textures/tnt_gunpowder_burning_crossing_animated.png b/mods/tnt/textures/tnt_gunpowder_burning_crossing_animated.png new file mode 100644 index 00000000..efab2a9e Binary files /dev/null and b/mods/tnt/textures/tnt_gunpowder_burning_crossing_animated.png differ diff --git a/mods/tnt/textures/tnt_gunpowder_burning_curved_animated.png b/mods/tnt/textures/tnt_gunpowder_burning_curved_animated.png new file mode 100644 index 00000000..bd1437fe Binary files /dev/null and b/mods/tnt/textures/tnt_gunpowder_burning_curved_animated.png differ diff --git a/mods/tnt/textures/tnt_gunpowder_burning_straight_animated.png b/mods/tnt/textures/tnt_gunpowder_burning_straight_animated.png new file mode 100644 index 00000000..654e5396 Binary files /dev/null and b/mods/tnt/textures/tnt_gunpowder_burning_straight_animated.png differ diff --git a/mods/tnt/textures/tnt_gunpowder_burning_t_junction_animated.png b/mods/tnt/textures/tnt_gunpowder_burning_t_junction_animated.png new file mode 100644 index 00000000..5b567e38 Binary files /dev/null and b/mods/tnt/textures/tnt_gunpowder_burning_t_junction_animated.png differ diff --git a/mods/tnt/textures/tnt_gunpowder_crossing.png b/mods/tnt/textures/tnt_gunpowder_crossing.png new file mode 100644 index 00000000..c0487a09 Binary files /dev/null and b/mods/tnt/textures/tnt_gunpowder_crossing.png differ diff --git a/mods/tnt/textures/tnt_gunpowder_curved.png b/mods/tnt/textures/tnt_gunpowder_curved.png new file mode 100644 index 00000000..8ed01db8 Binary files /dev/null and b/mods/tnt/textures/tnt_gunpowder_curved.png differ diff --git a/mods/tnt/textures/tnt_gunpowder_inventory.png b/mods/tnt/textures/tnt_gunpowder_inventory.png new file mode 100644 index 00000000..105a2d25 Binary files /dev/null and b/mods/tnt/textures/tnt_gunpowder_inventory.png differ diff --git a/mods/tnt/textures/tnt_gunpowder_straight.png b/mods/tnt/textures/tnt_gunpowder_straight.png new file mode 100644 index 00000000..427feb90 Binary files /dev/null and b/mods/tnt/textures/tnt_gunpowder_straight.png differ diff --git a/mods/tnt/textures/tnt_gunpowder_t_junction.png b/mods/tnt/textures/tnt_gunpowder_t_junction.png new file mode 100644 index 00000000..b30c2b46 Binary files /dev/null and b/mods/tnt/textures/tnt_gunpowder_t_junction.png differ diff --git a/mods/tnt/textures/tnt_side.png b/mods/tnt/textures/tnt_side.png new file mode 100644 index 00000000..d3034732 Binary files /dev/null and b/mods/tnt/textures/tnt_side.png differ diff --git a/mods/tnt/textures/tnt_smoke.png b/mods/tnt/textures/tnt_smoke.png new file mode 100644 index 00000000..6788974a Binary files /dev/null and b/mods/tnt/textures/tnt_smoke.png differ diff --git a/mods/tnt/textures/tnt_tnt_stick.png b/mods/tnt/textures/tnt_tnt_stick.png new file mode 100644 index 00000000..bc47a291 Binary files /dev/null and b/mods/tnt/textures/tnt_tnt_stick.png differ diff --git a/mods/tnt/textures/tnt_top.png b/mods/tnt/textures/tnt_top.png new file mode 100644 index 00000000..31b807cb Binary files /dev/null and b/mods/tnt/textures/tnt_top.png differ diff --git a/mods/tnt/textures/tnt_top_burning.png b/mods/tnt/textures/tnt_top_burning.png new file mode 100644 index 00000000..fc0d4905 Binary files /dev/null and b/mods/tnt/textures/tnt_top_burning.png differ diff --git a/mods/tnt/textures/tnt_top_burning_animated.png b/mods/tnt/textures/tnt_top_burning_animated.png new file mode 100644 index 00000000..18a270fb Binary files /dev/null and b/mods/tnt/textures/tnt_top_burning_animated.png differ diff --git a/mods/torches b/mods/torches new file mode 160000 index 00000000..e4c57c28 --- /dev/null +++ b/mods/torches @@ -0,0 +1 @@ +Subproject commit e4c57c28414de13bfd36970e6f1d0df223ce57f1 diff --git a/mods/travelnet b/mods/travelnet new file mode 160000 index 00000000..9f2bbc61 --- /dev/null +++ b/mods/travelnet @@ -0,0 +1 @@ +Subproject commit 9f2bbc617ec5b9569eccad3f49d701a9bd204456 diff --git a/mods/turtle b/mods/turtle new file mode 160000 index 00000000..bd7d49f1 --- /dev/null +++ b/mods/turtle @@ -0,0 +1 @@ +Subproject commit bd7d49f1843c7e35a0e6647ef19bb6b7cae61f3c diff --git a/mods/under_sky b/mods/under_sky new file mode 160000 index 00000000..5f8d5701 --- /dev/null +++ b/mods/under_sky @@ -0,0 +1 @@ +Subproject commit 5f8d5701ce30774038e2bdf8eaba0f2b0f22cc38 diff --git a/mods/underworlds b/mods/underworlds new file mode 160000 index 00000000..9c6d9184 --- /dev/null +++ b/mods/underworlds @@ -0,0 +1 @@ +Subproject commit 9c6d9184e290359465458709c947ee381b7c6907 diff --git a/mods/unified_inventory b/mods/unified_inventory new file mode 160000 index 00000000..c1551b3f --- /dev/null +++ b/mods/unified_inventory @@ -0,0 +1 @@ +Subproject commit c1551b3fe40d70c66adf15cb2be4e764bc4e3b70 diff --git a/mods/unifieddyes b/mods/unifieddyes new file mode 160000 index 00000000..87837730 --- /dev/null +++ b/mods/unifieddyes @@ -0,0 +1 @@ +Subproject commit 878377301f376b21d4d4529da2a5c082f49792fe diff --git a/mods/vessels/README.txt b/mods/vessels/README.txt new file mode 100644 index 00000000..a54e330f --- /dev/null +++ b/mods/vessels/README.txt @@ -0,0 +1,22 @@ +Minetest Game mod: vessels +========================== +See license.txt for license information. + +Authors of source code +---------------------- +Originally by Vanessa Ezekowitz (LGPLv2.1+) +Modified by Perttu Ahola (LGPLv2.1+) +Various Minetest developers and contributors (LGPLv2.1+) + +Authors of media (textures) +--------------------------- +All not listed below, Vanessa Ezekowitz (CC BY-SA 3.0) + +The following textures were modified by Thomas-S (CC BY-SA 3.0): + vessels_drinking_glass.png + vessels_drinking_glass_inv.png + vessels_glass_bottle.png + vessels_steel_bottle.png + +The following texture was created by Wuzzy (CC BY-SA 3.0): + vessels_shelf_slot.png (based on vessels_glass_bottle.png) diff --git a/mods/vessels/init.lua b/mods/vessels/init.lua new file mode 100644 index 00000000..4bd0fb4d --- /dev/null +++ b/mods/vessels/init.lua @@ -0,0 +1,224 @@ +-- vessels/init.lua + +-- Minetest 0.4 mod: vessels +-- See README.txt for licensing and other information. + +-- Load support for MT game translation. +local S = minetest.get_translator("vessels") + + +local vessels_shelf_formspec = + "size[8,7;]" .. + "list[context;vessels;0,0.3;8,2;]" .. + "list[current_player;main;0,2.85;8,1;]" .. + "list[current_player;main;0,4.08;8,3;8]" .. + "listring[context;vessels]" .. + "listring[current_player;main]" .. + default.get_hotbar_bg(0, 2.85) + +local function update_vessels_shelf(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local invlist = inv:get_list("vessels") + + local formspec = vessels_shelf_formspec + -- Inventory slots overlay + local vx, vy = 0, 0.3 + local n_items = 0 + for i = 1, 16 do + if i == 9 then + vx = 0 + vy = vy + 1 + end + if not invlist or invlist[i]:is_empty() then + formspec = formspec .. + "image[" .. vx .. "," .. vy .. ";1,1;vessels_shelf_slot.png]" + else + local stack = invlist[i] + if not stack:is_empty() then + n_items = n_items + stack:get_count() + end + end + vx = vx + 1 + end + meta:set_string("formspec", formspec) + if n_items == 0 then + meta:set_string("infotext", S("Empty Vessels Shelf")) + else + meta:set_string("infotext", S("Vessels Shelf (@1 items)", n_items)) + end +end + +local vessels_shelf_def = { + description = S("Vessels Shelf"), + tiles = {"default_wood.png", "default_wood.png", "default_wood.png", + "default_wood.png", "vessels_shelf.png", "vessels_shelf.png"}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}, + sounds = default.node_sound_wood_defaults(), + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + update_vessels_shelf(pos) + local inv = meta:get_inventory() + inv:set_size("vessels", 8 * 2) + end, + can_dig = function(pos,player) + local inv = minetest.get_meta(pos):get_inventory() + return inv:is_empty("vessels") + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + if minetest.get_item_group(stack:get_name(), "vessel") ~= 0 then + return stack:get_count() + end + return 0 + end, + on_blast = function(pos) + local drops = {} + default.get_inventory_drops(pos, "vessels", drops) + drops[#drops + 1] = "vessels:shelf" + minetest.remove_node(pos) + return drops + end, +} +default.set_inventory_action_loggers(vessels_shelf_def, "vessels shelf") +minetest.register_node("vessels:shelf", vessels_shelf_def) + +minetest.register_craft({ + output = "vessels:shelf", + recipe = { + {"group:wood", "group:wood", "group:wood"}, + {"group:vessel", "group:vessel", "group:vessel"}, + {"group:wood", "group:wood", "group:wood"}, + } +}) + +minetest.register_node("vessels:glass_bottle", { + description = S("Empty Glass Bottle"), + drawtype = "plantlike", + tiles = {"vessels_glass_bottle.png"}, + inventory_image = "vessels_glass_bottle.png", + wield_image = "vessels_glass_bottle.png", + paramtype = "light", + is_ground_content = false, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + }, + groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_craft( { + output = "vessels:glass_bottle 10", + recipe = { + {"default:glass", "", "default:glass"}, + {"default:glass", "", "default:glass"}, + {"", "default:glass", ""} + } +}) + +minetest.register_node("vessels:drinking_glass", { + description = S("Empty Drinking Glass"), + drawtype = "plantlike", + tiles = {"vessels_drinking_glass.png"}, + inventory_image = "vessels_drinking_glass_inv.png", + wield_image = "vessels_drinking_glass.png", + paramtype = "light", + is_ground_content = false, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + }, + groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_craft( { + output = "vessels:drinking_glass 14", + recipe = { + {"default:glass", "", "default:glass"}, + {"default:glass", "", "default:glass"}, + {"default:glass", "default:glass", "default:glass"} + } +}) + +minetest.register_node("vessels:steel_bottle", { + description = S("Empty Heavy Steel Bottle"), + drawtype = "plantlike", + tiles = {"vessels_steel_bottle.png"}, + inventory_image = "vessels_steel_bottle.png", + wield_image = "vessels_steel_bottle.png", + paramtype = "light", + is_ground_content = false, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + }, + groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, + sounds = default.node_sound_defaults(), +}) + +minetest.register_craft( { + output = "vessels:steel_bottle 5", + recipe = { + {"default:steel_ingot", "", "default:steel_ingot"}, + {"default:steel_ingot", "", "default:steel_ingot"}, + {"", "default:steel_ingot", ""} + } +}) + + +-- Glass and steel recycling + +minetest.register_craftitem("vessels:glass_fragments", { + description = S("Glass Fragments"), + inventory_image = "vessels_glass_fragments.png", +}) + +minetest.register_craft( { + type = "shapeless", + output = "vessels:glass_fragments", + recipe = { + "vessels:glass_bottle", + "vessels:glass_bottle", + }, +}) + +minetest.register_craft( { + type = "shapeless", + output = "vessels:glass_fragments", + recipe = { + "vessels:drinking_glass", + "vessels:drinking_glass", + }, +}) + +minetest.register_craft({ + type = "cooking", + output = "default:glass", + recipe = "vessels:glass_fragments", +}) + +minetest.register_craft( { + type = "cooking", + output = "default:steel_ingot", + recipe = "vessels:steel_bottle", +}) + +minetest.register_craft({ + type = "fuel", + recipe = "vessels:shelf", + burntime = 30, +}) + +-- Register glass fragments as dungeon loot +if minetest.global_exists("dungeon_loot") then + dungeon_loot.register({ + name = "vessels:glass_fragments", chance = 0.35, count = {1, 4} + }) +end diff --git a/mods/vessels/license.txt b/mods/vessels/license.txt new file mode 100644 index 00000000..de16a3b0 --- /dev/null +++ b/mods/vessels/license.txt @@ -0,0 +1,52 @@ +License of source code +---------------------- + +GNU Lesser General Public License, version 2.1 +Copyright (C) 2012-2016 Vanessa Ezekowitz +Copyright (C) 2012-2016 celeron55, Perttu Ahola +Copyright (C) 2012-2016 Various Minetest developers and contributors + +This program is free software; you can redistribute it and/or modify it under the terms +of the GNU Lesser General Public License as published by the Free Software Foundation; +either version 2.1 of the License, or (at your option) any later version. + +This program 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 Lesser General Public License for more details: +https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2012-2016 Vanessa Ezekowitz +Copyright (C) 2016 Thomas-S + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/vessels/locale/template.txt b/mods/vessels/locale/template.txt new file mode 100644 index 00000000..e6e5f69a --- /dev/null +++ b/mods/vessels/locale/template.txt @@ -0,0 +1,8 @@ +# textdomain: vessels +Empty Vessels Shelf= +Vessels Shelf (@1 items)= +Vessels Shelf= +Empty Glass Bottle= +Empty Drinking Glass= +Empty Heavy Steel Bottle= +Glass Fragments= diff --git a/mods/vessels/locale/vessels.de.tr b/mods/vessels/locale/vessels.de.tr new file mode 100644 index 00000000..162e3595 --- /dev/null +++ b/mods/vessels/locale/vessels.de.tr @@ -0,0 +1,8 @@ +# textdomain: vessels +Empty Vessels Shelf=Leeres Gefäßregal +Vessels Shelf (@1 items)=Gefäßregal (@1 Gegenstände) +Vessels Shelf=Gefäßregal +Empty Glass Bottle=Leere Glasflasche +Empty Drinking Glass=Leeres Trinkglas +Empty Heavy Steel Bottle=Leere schwere Stahlflasche +Glass Fragments=Glasfragmente diff --git a/mods/vessels/locale/vessels.eo.tr b/mods/vessels/locale/vessels.eo.tr new file mode 100644 index 00000000..c4a84ce5 --- /dev/null +++ b/mods/vessels/locale/vessels.eo.tr @@ -0,0 +1,8 @@ +# textdomain: vessels +Empty Vessels Shelf=Malplena Vaza Plataĵo +Vessels Shelf (@1 items)=Vaza Plataĵo (@1 objektoj) +Vessels Shelf=Vaza Plataĵo +Empty Glass Bottle=Malplena Vitra Botelo +Empty Drinking Glass=Malplena Glaso +Empty Heavy Steel Bottle=Malplena Peza Ŝtala Botelo +Glass Fragments=Vitraj Eroj diff --git a/mods/vessels/locale/vessels.es.tr b/mods/vessels/locale/vessels.es.tr new file mode 100644 index 00000000..d6131d89 --- /dev/null +++ b/mods/vessels/locale/vessels.es.tr @@ -0,0 +1,8 @@ +# textdomain: vessels +Empty Vessels Shelf=Estante de vasijas vacío +Vessels Shelf (@1 items)=Estante de vasijas (@1 objetos) +Vessels Shelf=Estante de vasijas +Empty Glass Bottle=Botella de vidrio vacía +Empty Drinking Glass=Vaso para beber vacío +Empty Heavy Steel Bottle=Botella de acero vacía +Glass Fragments=Fragmentos de vidrio diff --git a/mods/vessels/locale/vessels.fr.tr b/mods/vessels/locale/vessels.fr.tr new file mode 100644 index 00000000..f099c197 --- /dev/null +++ b/mods/vessels/locale/vessels.fr.tr @@ -0,0 +1,8 @@ +# textdomain: vessels +Empty Vessels Shelf=Etagère à récipient vide +Vessels Shelf (@1 items)=Etagère à récipient (@1 articles) +Vessels Shelf=Etagère à récipient +Empty Glass Bottle=Bouteille de verre vide +Empty Drinking Glass=Verre vide +Empty Heavy Steel Bottle=Bouteille d'acier lourde vide +Glass Fragments=Fragments de verre diff --git a/mods/vessels/locale/vessels.id.tr b/mods/vessels/locale/vessels.id.tr new file mode 100644 index 00000000..f80fbc3d --- /dev/null +++ b/mods/vessels/locale/vessels.id.tr @@ -0,0 +1,8 @@ +# textdomain: vessels +Empty Vessels Shelf=Rak Bejana Kosong +Vessels Shelf (@1 items)=Rak Bejana (@1 barang) +Vessels Shelf=Rak Bejana +Empty Glass Bottle=Botol Kaca Kosong +Empty Drinking Glass=Gelas Minum Kosong +Empty Heavy Steel Bottle=Botol Baja Berat Kosong +Glass Fragments=Pecahan Kaca diff --git a/mods/vessels/locale/vessels.it.tr b/mods/vessels/locale/vessels.it.tr new file mode 100644 index 00000000..70ea5759 --- /dev/null +++ b/mods/vessels/locale/vessels.it.tr @@ -0,0 +1,8 @@ +# textdomain: vessels +Empty Vessels Shelf=Scaffale per contenitori vuoto +Vessels Shelf (@1 items)=Scaffale per contenitori (@1 oggetti) +Vessels Shelf=Scaffale per contenitori +Empty Glass Bottle=Bottiglia di vetro vuota +Empty Drinking Glass=Bicchiere di vetro vuoto +Empty Heavy Steel Bottle=Bottigia di metallo pesante vuota +Glass Fragments=Frammenti di vetro diff --git a/mods/vessels/locale/vessels.ja.tr b/mods/vessels/locale/vessels.ja.tr new file mode 100644 index 00000000..451489a5 --- /dev/null +++ b/mods/vessels/locale/vessels.ja.tr @@ -0,0 +1,8 @@ +# textdomain: vessels +Empty Vessels Shelf=空の瓶の棚 +Vessels Shelf (@1 items)=瓶の棚(@1 本) +Vessels Shelf=瓶の棚 +Empty Glass Bottle=空のガラス瓶 +Empty Drinking Glass=空のガラスコップ +Empty Heavy Steel Bottle=空の重い鉄瓶 +Glass Fragments=ガラスの破片 diff --git a/mods/vessels/locale/vessels.jbo.tr b/mods/vessels/locale/vessels.jbo.tr new file mode 100644 index 00000000..6e1145e6 --- /dev/null +++ b/mods/vessels/locale/vessels.jbo.tr @@ -0,0 +1,8 @@ +# textdomain: vessels +Empty Vessels Shelf=.i ti kunti ke vasru kajna +Vessels Shelf (@1 items)=.i lo ti vasru kajna cu vasru lo @1 dacti +Vessels Shelf=lo vasru kajna +Empty Glass Bottle=lo blacybo'i be no da +Empty Drinking Glass=lo blacykabri be no da +Empty Heavy Steel Bottle=lo tilju ke gasta botpi be no da +Glass Fragments=lo derxi be lo blaci spisa diff --git a/mods/vessels/locale/vessels.ms.tr b/mods/vessels/locale/vessels.ms.tr new file mode 100644 index 00000000..da7a0f06 --- /dev/null +++ b/mods/vessels/locale/vessels.ms.tr @@ -0,0 +1,8 @@ +# textdomain: vessels +Empty Vessels Shelf=Rak Bekas Kaca Kosong +Vessels Shelf (@1 items)=Rak Bekas Kaca (@1 barang) +Vessels Shelf=Rak Bekas Kaca +Empty Glass Bottle=Botol Kaca Kosong +Empty Drinking Glass=Gelas Minuman Kosong +Empty Heavy Steel Bottle=Botol Keluli Berat Kosong +Glass Fragments=Serpihan Kaca diff --git a/mods/vessels/locale/vessels.pl.tr b/mods/vessels/locale/vessels.pl.tr new file mode 100644 index 00000000..5e91da9f --- /dev/null +++ b/mods/vessels/locale/vessels.pl.tr @@ -0,0 +1,8 @@ +# textdomain: vessels +Empty Vessels Shelf=Pusta półka na naczynia +Vessels Shelf (@1 items)=Półka na naczynia (@1 przedmiotów) +Vessels Shelf=Półka na naczynia +Empty Glass Bottle=Pusta szklana butelka +Empty Drinking Glass=Pusta butelka do picia +Empty Heavy Steel Bottle=Pusta stalowa butelka +Glass Fragments=Odłamki szkła diff --git a/mods/vessels/locale/vessels.pt_BR.tr b/mods/vessels/locale/vessels.pt_BR.tr new file mode 100644 index 00000000..c22cb062 --- /dev/null +++ b/mods/vessels/locale/vessels.pt_BR.tr @@ -0,0 +1,8 @@ +# textdomain: vessels +Empty Vessels Shelf=Prateleira de Vasos Vazia +Vessels Shelf (@1 items)=Prateleira de Vasos (@1 itens) +Vessels Shelf=Prateleira de Vasos +Empty Glass Bottle=Garrafa de Vidro Vazia +Empty Drinking Glass=Copo Vazio +Empty Heavy Steel Bottle=Garrafa de Aço Pesada Vazia +Glass Fragments=Cacos de Vidro diff --git a/mods/vessels/locale/vessels.ru.tr b/mods/vessels/locale/vessels.ru.tr new file mode 100644 index 00000000..196d842d --- /dev/null +++ b/mods/vessels/locale/vessels.ru.tr @@ -0,0 +1,8 @@ +# textdomain: vessels +Empty Vessels Shelf=Полка с Пустыми Сосудами +Vessels Shelf (@1 items)=Полка с Сосудами (@1 предметы) +Vessels Shelf=Полка с Сосудами +Empty Glass Bottle=Пустая Стеклянная Бутылка +Empty Drinking Glass=Пустой Стакан +Empty Heavy Steel Bottle=Пустая Стальная Бутылка +Glass Fragments=Стеклянные Осколки diff --git a/mods/vessels/locale/vessels.sk.tr b/mods/vessels/locale/vessels.sk.tr new file mode 100644 index 00000000..6ec640b1 --- /dev/null +++ b/mods/vessels/locale/vessels.sk.tr @@ -0,0 +1,8 @@ +# textdomain: vessels +Empty Vessels Shelf=Prázdna polica na fľašky +Vessels Shelf (@1 items)=Polica na fľašky (@1 položka/y) +Vessels Shelf=Polica na fľašky +Empty Glass Bottle=Prázdna sklenená fľaša +Empty Drinking Glass=Prázdny pohár na pitie +Empty Heavy Steel Bottle=Prázdna oceľová fľaša +Glass Fragments=Časti skla diff --git a/mods/vessels/locale/vessels.sv.tr b/mods/vessels/locale/vessels.sv.tr new file mode 100644 index 00000000..48e76e29 --- /dev/null +++ b/mods/vessels/locale/vessels.sv.tr @@ -0,0 +1,8 @@ +# textdomain: vessels +Empty Vessels Shelf=Tom kärlhylla +Vessels Shelf (@1 items)=Kärlhylla (@1 saker) +Vessels Shelf=Kärlhylla +Empty Glass Bottle=Tom glasflaska +Empty Drinking Glass=Tom drycksflaska +Empty Heavy Steel Bottle=Tom tungstålsflaska +Glass Fragments=Glasbitar diff --git a/mods/vessels/locale/vessels.uk.tr b/mods/vessels/locale/vessels.uk.tr new file mode 100644 index 00000000..50258358 --- /dev/null +++ b/mods/vessels/locale/vessels.uk.tr @@ -0,0 +1,8 @@ +# textdomain: vessels +Empty Vessels Shelf=Полиця з Пустим Посудом +Vessels Shelf (@1 items)=Полиця з Посудом (@1 предмета) +Vessels Shelf=Полиця з Посудом +Empty Glass Bottle=Порожня Скляна Пляшка +Empty Drinking Glass=Порожня Склянка +Empty Heavy Steel Bottle=Порожня Сталева Пляшка +Glass Fragments=Скляні Уламки diff --git a/mods/vessels/locale/vessels.zh_CN.tr b/mods/vessels/locale/vessels.zh_CN.tr new file mode 100644 index 00000000..e303e24f --- /dev/null +++ b/mods/vessels/locale/vessels.zh_CN.tr @@ -0,0 +1,8 @@ +# textdomain: vessels +Empty Vessels Shelf=空容器架 +Vessels Shelf (@1 items)=容器架(@1项) +Vessels Shelf=容器架 +Empty Glass Bottle=空玻璃瓶 +Empty Drinking Glass=空水杯 +Empty Heavy Steel Bottle=空重型钢瓶 +Glass Fragments=玻璃碎片 diff --git a/mods/vessels/locale/vessels.zh_TW.tr b/mods/vessels/locale/vessels.zh_TW.tr new file mode 100644 index 00000000..6aecb357 --- /dev/null +++ b/mods/vessels/locale/vessels.zh_TW.tr @@ -0,0 +1,8 @@ +# textdomain: vessels +Empty Vessels Shelf=空容器架 +Vessels Shelf (@1 items)=容器架(@1項) +Vessels Shelf=容器架 +Empty Glass Bottle=空玻璃瓶 +Empty Drinking Glass=空水杯 +Empty Heavy Steel Bottle=空重型鋼瓶 +Glass Fragments=玻璃碎片 diff --git a/mods/vessels/mod.conf b/mods/vessels/mod.conf new file mode 100644 index 00000000..eba9076f --- /dev/null +++ b/mods/vessels/mod.conf @@ -0,0 +1,4 @@ +name = vessels +description = Minetest Game mod: vessels +depends = default +optional_depends = dungeon_loot diff --git a/mods/vessels/textures/vessels_drinking_glass.png b/mods/vessels/textures/vessels_drinking_glass.png new file mode 100644 index 00000000..aef73296 Binary files /dev/null and b/mods/vessels/textures/vessels_drinking_glass.png differ diff --git a/mods/vessels/textures/vessels_drinking_glass_inv.png b/mods/vessels/textures/vessels_drinking_glass_inv.png new file mode 100644 index 00000000..e50c8c72 Binary files /dev/null and b/mods/vessels/textures/vessels_drinking_glass_inv.png differ diff --git a/mods/vessels/textures/vessels_glass_bottle.png b/mods/vessels/textures/vessels_glass_bottle.png new file mode 100644 index 00000000..2a46aafd Binary files /dev/null and b/mods/vessels/textures/vessels_glass_bottle.png differ diff --git a/mods/vessels/textures/vessels_glass_fragments.png b/mods/vessels/textures/vessels_glass_fragments.png new file mode 100644 index 00000000..acf2d380 Binary files /dev/null and b/mods/vessels/textures/vessels_glass_fragments.png differ diff --git a/mods/vessels/textures/vessels_shelf.png b/mods/vessels/textures/vessels_shelf.png new file mode 100644 index 00000000..87c69b28 Binary files /dev/null and b/mods/vessels/textures/vessels_shelf.png differ diff --git a/mods/vessels/textures/vessels_shelf_slot.png b/mods/vessels/textures/vessels_shelf_slot.png new file mode 100644 index 00000000..93a729e5 Binary files /dev/null and b/mods/vessels/textures/vessels_shelf_slot.png differ diff --git a/mods/vessels/textures/vessels_steel_bottle.png b/mods/vessels/textures/vessels_steel_bottle.png new file mode 100644 index 00000000..169930a3 Binary files /dev/null and b/mods/vessels/textures/vessels_steel_bottle.png differ diff --git a/mods/vipworld/bushes/depends.txt b/mods/vipworld/bushes/depends.txt new file mode 100644 index 00000000..17c1df49 --- /dev/null +++ b/mods/vipworld/bushes/depends.txt @@ -0,0 +1,3 @@ +default +stonage? +sumpf? diff --git a/mods/vipworld/bushes/init.lua b/mods/vipworld/bushes/init.lua new file mode 100644 index 00000000..0079d42f --- /dev/null +++ b/mods/vipworld/bushes/init.lua @@ -0,0 +1,128 @@ +-- Bushes Mod by Mossmanikin, Evergreen, & Neuromancer +-- The initial code for this was taken from Mossmanikin's Grasses Mod, +-- then heavilly modified by Neuromancer for this mod. +-- Mossmanikin also greatly helped with providing samples for coding. +-- bush leaf textures are from VannessaE's moretrees mod. +-- (Leaf texture created by RealBadAngel or VanessaE) +-- Branch textures created by Neuromancer. + +-- support for i18n + abstract_bushes = {} + + minetest.register_node("bushes:youngtree2_bottom", { + description = "Young Tree 2 (bottom)", + drawtype="nodebox", + tiles = {"bushes_youngtree2trunk.png"}, + inventory_image = "bushes_youngtree2trunk_inv.png", + wield_image = "bushes_youngtree2trunk_inv.png", +paramtype = "light", + walkable = false, + is_ground_content = true, +node_box = { + type = "fixed", + fixed = { + --{0.375000,-0.500000,-0.500000,0.500000,0.500000,-0.375000}, --NodeBox 1 + {-0.0612,-0.500000,-0.500000,0.0612,0.500000,-0.375000}, --NodeBox 1 + } +}, + groups = {snappy=3,flammable=2}, + sounds = default.node_sound_leaves_defaults(), + drop = 'default:stick' +}) + + local BushBranchCenter = { {1,1}, {3,2} } +for i in pairs(BushBranchCenter) do + local Num = BushBranchCenter[i][1] + local TexNum = BushBranchCenter[i][2] + minetest.register_node("bushes:bushbranches"..Num, { + description = "Bush Branches @1", Num, + drawtype = "nodebox", + tiles = { + "bushes_leaves_"..TexNum..".png", + "bushes_branches_center_"..TexNum..".png" + }, + node_box = { + type = "fixed", + fixed = { + {0, -1/2, -1/2, -1/4, 1/2, 1/2}, + {0, -1/2, -1/2, 1/4, 1/2, 1/2} + }, + }, + selection_box = { + type = "fixed", + fixed = {-1/2, -1/2, -1/2, 1/2, 1/2, 1/2}, + }, + inventory_image = "bushes_branches_center_"..TexNum..".png", + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + groups = { + -- tree=1, -- MM: disabled because some recipes use group:tree for trunks + snappy=3, + flammable=2, + leaves=1 + }, + sounds = default.node_sound_leaves_defaults(), + drop = 'default:stick 4' + }) +end + +local BushBranchSide = { {2,1}, {4,2} } +for i in pairs(BushBranchSide) do + local Num = BushBranchSide[i][1] + local TexNum = BushBranchSide[i][2] + minetest.register_node("bushes:bushbranches"..Num, { + description = "Bush Branches @1", Num, + drawtype = "nodebox", + tiles = { +--[[top]] "bushes_leaves_"..TexNum..".png", +--[[bottom]]"bushes_branches_center_"..TexNum..".png", +--[[right]] "bushes_branches_left_"..TexNum..".png", +--[[left]] "bushes_branches_right_"..TexNum..".png", -- MM: We could also mirror the previous here, +--[[back]] "bushes_branches_center_"..TexNum..".png",-- unless U really want 'em 2 B different +--[[front]] "bushes_branches_right_"..TexNum..".png" + }, + node_box = { + type = "fixed", + fixed = { +-- { left , bottom , front, right , top , back } + {0.137748,-0.491944, 0.5 ,-0.125000,-0.179444,-0.007790}, --NodeBox 1 + {0.262748,-0.185995, 0.5 ,-0.237252, 0.126505,-0.260269}, --NodeBox 2 + {0.500000, 0.125000, 0.5 ,-0.500000, 0.500000,-0.500000}, --NodeBox 3 + }, + }, + selection_box = { + type = "fixed", + fixed = {-1/2, -1/2, -1/2, 1/2, 1/2, 1/2}, + }, + inventory_image = "bushes_branches_right_"..TexNum..".png", + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + groups = { + -- tree=1, -- MM: disabled because some recipes use group:tree for trunks + snappy=3, + flammable=2, + leaves=1 + }, + sounds = default.node_sound_leaves_defaults(), + drop = 'default:stick 3' + }) +end + +local BushLeafNode = { {1}, {2}} +for i in pairs(BushLeafNode) do + local Num = BushLeafNode[i][1] + minetest.register_node("bushes:BushLeaves"..Num, { + description = "Bush Leaves @1", Num, + drawtype = "allfaces_optional", + tiles = {"bushes_leaves_"..Num..".png"}, + paramtype = "light", + groups = { -- MM: Should we add leafdecay? + snappy=3, + flammable=2, + attached_node=1 + }, + sounds = default.node_sound_leaves_defaults(), + }) +end diff --git a/mods/vipworld/bushes/textures/bushes_branches_center_1.png b/mods/vipworld/bushes/textures/bushes_branches_center_1.png new file mode 100644 index 00000000..bac3ee45 Binary files /dev/null and b/mods/vipworld/bushes/textures/bushes_branches_center_1.png differ diff --git a/mods/vipworld/bushes/textures/bushes_branches_center_2.png b/mods/vipworld/bushes/textures/bushes_branches_center_2.png new file mode 100644 index 00000000..c21edf6a Binary files /dev/null and b/mods/vipworld/bushes/textures/bushes_branches_center_2.png differ diff --git a/mods/vipworld/bushes/textures/bushes_branches_left_1.png b/mods/vipworld/bushes/textures/bushes_branches_left_1.png new file mode 100644 index 00000000..120f100f Binary files /dev/null and b/mods/vipworld/bushes/textures/bushes_branches_left_1.png differ diff --git a/mods/vipworld/bushes/textures/bushes_branches_left_2.png b/mods/vipworld/bushes/textures/bushes_branches_left_2.png new file mode 100644 index 00000000..1c17bac3 Binary files /dev/null and b/mods/vipworld/bushes/textures/bushes_branches_left_2.png differ diff --git a/mods/vipworld/bushes/textures/bushes_branches_right_1.png b/mods/vipworld/bushes/textures/bushes_branches_right_1.png new file mode 100644 index 00000000..af5de67c Binary files /dev/null and b/mods/vipworld/bushes/textures/bushes_branches_right_1.png differ diff --git a/mods/vipworld/bushes/textures/bushes_branches_right_2.png b/mods/vipworld/bushes/textures/bushes_branches_right_2.png new file mode 100644 index 00000000..8fb83323 Binary files /dev/null and b/mods/vipworld/bushes/textures/bushes_branches_right_2.png differ diff --git a/mods/vipworld/bushes/textures/bushes_leaves_1.png b/mods/vipworld/bushes/textures/bushes_leaves_1.png new file mode 100644 index 00000000..594c9583 Binary files /dev/null and b/mods/vipworld/bushes/textures/bushes_leaves_1.png differ diff --git a/mods/vipworld/bushes/textures/bushes_leaves_2.png b/mods/vipworld/bushes/textures/bushes_leaves_2.png new file mode 100644 index 00000000..e6de4829 Binary files /dev/null and b/mods/vipworld/bushes/textures/bushes_leaves_2.png differ diff --git a/mods/vipworld/bushes/textures/bushes_youngtree2trunk.png b/mods/vipworld/bushes/textures/bushes_youngtree2trunk.png new file mode 100644 index 00000000..ea685e3a Binary files /dev/null and b/mods/vipworld/bushes/textures/bushes_youngtree2trunk.png differ diff --git a/mods/vipworld/bushes/textures/bushes_youngtree2trunk_inv.png b/mods/vipworld/bushes/textures/bushes_youngtree2trunk_inv.png new file mode 100644 index 00000000..7d6728f2 Binary files /dev/null and b/mods/vipworld/bushes/textures/bushes_youngtree2trunk_inv.png differ diff --git a/mods/vipworld/bushes/textures/old & unused/BlockBranch1.png b/mods/vipworld/bushes/textures/old & unused/BlockBranch1.png new file mode 100644 index 00000000..28fe91fe Binary files /dev/null and b/mods/vipworld/bushes/textures/old & unused/BlockBranch1.png differ diff --git a/mods/vipworld/bushes/textures/old & unused/BlockBranch1L.png b/mods/vipworld/bushes/textures/old & unused/BlockBranch1L.png new file mode 100644 index 00000000..1d8a8e2c Binary files /dev/null and b/mods/vipworld/bushes/textures/old & unused/BlockBranch1L.png differ diff --git a/mods/vipworld/bushes/textures/old & unused/BlockBranch1R.png b/mods/vipworld/bushes/textures/old & unused/BlockBranch1R.png new file mode 100644 index 00000000..514b888b Binary files /dev/null and b/mods/vipworld/bushes/textures/old & unused/BlockBranch1R.png differ diff --git a/mods/vipworld/bushes/textures/old & unused/BushBranches1.png b/mods/vipworld/bushes/textures/old & unused/BushBranches1.png new file mode 100644 index 00000000..5bb2b46f Binary files /dev/null and b/mods/vipworld/bushes/textures/old & unused/BushBranches1.png differ diff --git a/mods/vipworld/bushes/textures/old & unused/BushBranches1sm.png b/mods/vipworld/bushes/textures/old & unused/BushBranches1sm.png new file mode 100644 index 00000000..5574f38f Binary files /dev/null and b/mods/vipworld/bushes/textures/old & unused/BushBranches1sm.png differ diff --git a/mods/vipworld/bushes/textures/old & unused/BushBranches1sm2.png b/mods/vipworld/bushes/textures/old & unused/BushBranches1sm2.png new file mode 100644 index 00000000..6ffd2f36 Binary files /dev/null and b/mods/vipworld/bushes/textures/old & unused/BushBranches1sm2.png differ diff --git a/mods/vipworld/bushes/textures/old & unused/BushBranches1sm3.png b/mods/vipworld/bushes/textures/old & unused/BushBranches1sm3.png new file mode 100644 index 00000000..5bb9bf5b Binary files /dev/null and b/mods/vipworld/bushes/textures/old & unused/BushBranches1sm3.png differ diff --git a/mods/vipworld/bushes/textures/old & unused/BushBranches1sm4.png b/mods/vipworld/bushes/textures/old & unused/BushBranches1sm4.png new file mode 100644 index 00000000..b204feff Binary files /dev/null and b/mods/vipworld/bushes/textures/old & unused/BushBranches1sm4.png differ diff --git a/mods/vipworld/bushes/textures/old & unused/BushBranchesCenter.png b/mods/vipworld/bushes/textures/old & unused/BushBranchesCenter.png new file mode 100644 index 00000000..0c9b5af1 Binary files /dev/null and b/mods/vipworld/bushes/textures/old & unused/BushBranchesCenter.png differ diff --git a/mods/vipworld/bushes/textures/old & unused/BushBranchesSide1.png b/mods/vipworld/bushes/textures/old & unused/BushBranchesSide1.png new file mode 100644 index 00000000..ca95dd3c Binary files /dev/null and b/mods/vipworld/bushes/textures/old & unused/BushBranchesSide1.png differ diff --git a/mods/vipworld/bushes/textures/old & unused/BushBranchesSide2.png b/mods/vipworld/bushes/textures/old & unused/BushBranchesSide2.png new file mode 100644 index 00000000..d62499e8 Binary files /dev/null and b/mods/vipworld/bushes/textures/old & unused/BushBranchesSide2.png differ diff --git a/mods/vipworld/bushes/textures/old & unused/blank.png b/mods/vipworld/bushes/textures/old & unused/blank.png new file mode 100644 index 00000000..ed495a82 Binary files /dev/null and b/mods/vipworld/bushes/textures/old & unused/blank.png differ diff --git a/mods/vipworld/bushes/textures/old & unused/moretrees_pine_leaves3.png b/mods/vipworld/bushes/textures/old & unused/moretrees_pine_leaves3.png new file mode 100644 index 00000000..57d077d0 Binary files /dev/null and b/mods/vipworld/bushes/textures/old & unused/moretrees_pine_leaves3.png differ diff --git a/mods/vipworld/bushes_classic/cooking.lua b/mods/vipworld/bushes_classic/cooking.lua new file mode 100644 index 00000000..71cae915 --- /dev/null +++ b/mods/vipworld/bushes_classic/cooking.lua @@ -0,0 +1,102 @@ +-- support for i18n + +-- Basket + +minetest.register_craft({ + output = "bushes:basket_empty", + recipe = { + { "default:stick", "default:stick", "default:stick" }, + { "", "default:stick", "" }, + }, +}) + +-- override farming_plus strawberry and add food_ group +if minetest.get_modpath("farming_plus") then + + minetest.override_item("farming_plus:strawberry_item", { + groups = {food_strawberry = 1, food_berry = 1, flammable = 2}, + }) +end + + +for i, berry in ipairs(bushes_classic.bushes) do + + local groups = {food_berry = 1, flammable = 2} + + if berry ~= "mixed_berry" then + + groups["food_" .. berry] = 1 + + -- Berry + minetest.register_craftitem(":bushes:"..berry, { + description = bushes_classic.bushes_descriptions[i][1], + inventory_image = "bushes_"..berry..".png", + groups = groups, + on_use = minetest.item_eat(1), + }) + end + + -- Raw pie + minetest.register_craftitem(":bushes:"..berry.."_pie_raw", { + description = bushes_classic.bushes_descriptions[i][2], + inventory_image = "bushes_"..berry.."_pie_raw.png", + on_use = minetest.item_eat(4), + }) + + if berry ~= "mixed_berry" then + + minetest.register_craft({ + output = "bushes:"..berry.."_pie_raw 1", + recipe = { + { "group:food_sugar", "farming:flour", "group:food_sugar" }, + { "group:food_"..berry, "group:food_"..berry, "group:food_"..berry }, + }, + }) + else + minetest.register_craft({ + output = "bushes:mixed_berry_pie_raw 2", + recipe = { + { "group:food_sugar", "farming:flour", "group:food_sugar" }, + { "group:food_berry", "group:food_berry", "group:food_berry" }, + { "group:food_berry", "group:food_berry", "group:food_berry" }, + }, + }) + end + + -- Cooked pie + minetest.register_craftitem(":bushes:"..berry.."_pie_cooked", { + description = bushes_classic.bushes_descriptions[i][3], + inventory_image = "bushes_"..berry.."_pie_cooked.png", + on_use = minetest.item_eat(6), + }) + + minetest.register_craft({ + type = "cooking", + output = "bushes:"..berry.."_pie_cooked", + recipe = "bushes:"..berry.."_pie_raw", + cooktime = 30, + }) + + -- Slice of pie + minetest.register_craftitem(":bushes:"..berry.."_pie_slice", { + description = bushes_classic.bushes_descriptions[i][4], + inventory_image = "bushes_"..berry.."_pie_slice.png", + on_use = minetest.item_eat(1), + }) + + minetest.register_craft({ + output = "bushes:"..berry.."_pie_slice 6", + recipe = { + { "bushes:"..berry.."_pie_cooked" }, + }, + }) + + -- Basket with pies + minetest.register_craft({ + output = "bushes:basket_"..berry.." 1", + recipe = { + { "bushes:"..berry.."_pie_cooked", "bushes:"..berry.."_pie_cooked", "bushes:"..berry.."_pie_cooked" }, + { "", "bushes:basket_empty", "" }, + }, + }) +end diff --git a/mods/vipworld/bushes_classic/image_credits.txt b/mods/vipworld/bushes_classic/image_credits.txt new file mode 100644 index 00000000..a4ddc519 --- /dev/null +++ b/mods/vipworld/bushes_classic/image_credits.txt @@ -0,0 +1,5 @@ +strawberry: http://www.clker.com/clipart-4060.html +blueberry: http://www.clker.com/clipart-cerezafiro12.html +blackberry: http://www.clker.com/clipart-blackberry-2.html +raspberry: http://www.clker.com/clipart-simple-raspberry.html +gooseberry: http://www.clker.com/clipart-26281.html diff --git a/mods/vipworld/bushes_classic/init.lua b/mods/vipworld/bushes_classic/init.lua new file mode 100644 index 00000000..3cbc7191 --- /dev/null +++ b/mods/vipworld/bushes_classic/init.lua @@ -0,0 +1,31 @@ +-- Bushes classic mod originally by unknown +-- now maintained by VanessaE + +bushes_classic = {} + +-- support for i18n + +bushes_classic.bushes = { + "strawberry", + "blackberry", + "blueberry", + "raspberry", + "gooseberry", + "mixed_berry" +} + +bushes_classic.bushes_descriptions = { + {"Strawberry", "Raw Strawberry pie", "Cooked Strawberry pie", "Slice of Strawberry pie", "Basket with Strawberry pies", "Strawberry Bush"}, + {"Blackberry", "Raw Blackberry pie", "Cooked Blackberry pie", "Slice of Blackberry pie", "Basket with Blackberry pies", "Blackberry Bush"}, + {"Blueberry", "Raw Blueberry pie", "Cooked Blueberry pie", "Slice of Blueberry pie", "Basket with Blueberry pies", "Blueberry Bush"}, + {"Raspberry", "Raw Raspberry pie", "Cooked Raspberry pie", "Slice of Raspberry pie", "Basket with Raspberry pies", "Raspberry Bush"}, + {"Gooseberry", "Raw Gooseberry pie", "Cooked Gooseberry pie", "Slice of Gooseberry pie", "Basket with Gooseberry pies", "Gooseberry Bush"}, + {"Mixed Berry", "Raw Mixed Berry pie", "Cooked Mixed Berry pie", "Slice of Mixed Berry pie", "Basket with Mixed Berry pies", "Currently fruitless Bush"} +} + +local modpath = minetest.get_modpath('bushes_classic') +dofile(modpath..'/cooking.lua') +dofile(modpath..'/nodes.lua') + +minetest.register_alias("bushes:basket_pies", "bushes:basket_strawberry") + diff --git a/mods/vipworld/bushes_classic/models/bushes_basket_empty.obj b/mods/vipworld/bushes_classic/models/bushes_basket_empty.obj new file mode 100644 index 00000000..0179c318 --- /dev/null +++ b/mods/vipworld/bushes_classic/models/bushes_basket_empty.obj @@ -0,0 +1,46 @@ +# Blender v2.73 (sub 0) OBJ File: 'basket-of-pies.blend' +# www.blender.org +o basket_Cube.001 +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.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.437500 0.500000 0.437500 +v -0.437500 0.500000 -0.437500 +v 0.437500 0.500000 -0.437500 +v 0.437500 0.500000 0.437500 +v -0.437500 -0.437500 0.437500 +v -0.437500 -0.437500 -0.437500 +v 0.437500 -0.437500 -0.437500 +v 0.437500 -0.437500 0.437500 +vt 0.484848 0.984848 +vt 0.015152 0.984848 +vt 0.015152 0.515152 +vt 0.484848 0.515152 +vt 0.515152 0.984848 +vt 0.515152 0.515152 +vt 0.984848 0.515152 +vt 0.984848 0.984848 +vt 0.954545 0.545455 +vt 0.545455 0.545455 +vt 0.954545 0.954545 +vt 0.545455 0.954545 +s off +f 5/1 6/2 2/3 1/4 +f 6/1 7/2 3/3 2/4 +f 7/1 8/2 4/3 3/4 +f 8/1 5/2 1/3 4/4 +f 1/5 2/6 3/7 4/8 +f 5/6 8/7 12/9 9/10 +f 8/7 7/8 11/11 12/9 +f 7/8 6/5 10/12 11/11 +f 6/5 5/6 9/10 10/12 +f 9/1 12/2 16/3 13/4 +f 12/1 11/2 15/3 16/4 +f 11/1 10/2 14/3 15/4 +f 10/1 9/2 13/3 14/4 +f 13/10 16/9 15/11 14/12 diff --git a/mods/vipworld/bushes_classic/models/bushes_basket_full.obj b/mods/vipworld/bushes_classic/models/bushes_basket_full.obj new file mode 100644 index 00000000..5a3e1a81 --- /dev/null +++ b/mods/vipworld/bushes_classic/models/bushes_basket_full.obj @@ -0,0 +1,330 @@ +# Blender v2.73 (sub 0) OBJ File: 'basket-of-pies.blend' +# www.blender.org +o pies_Cylinder +v -0.089468 -0.116804 -0.438000 +v -0.116691 -0.091480 -0.438000 +v 0.024696 0.005921 -0.404659 +v -0.002527 0.031245 -0.404659 +v 0.121480 0.109962 -0.309713 +v 0.094258 0.135286 -0.309713 +v 0.186149 0.179480 -0.167615 +v 0.158927 0.204804 -0.167615 +v 0.208858 0.203891 0.000000 +v 0.181635 0.229215 0.000000 +v 0.186149 0.179480 0.167615 +v 0.158927 0.204804 0.167615 +v 0.121480 0.109962 0.309713 +v 0.094258 0.135286 0.309713 +v 0.024696 0.005921 0.404659 +v -0.002527 0.031245 0.404659 +v -0.089468 -0.116804 0.438000 +v -0.116691 -0.091480 0.438000 +v -0.230856 -0.214204 0.404659 +v -0.327640 -0.318245 0.309713 +v -0.392309 -0.387763 0.167615 +v -0.415018 -0.412175 -0.000000 +v -0.392309 -0.387763 -0.167615 +v -0.327640 -0.318245 -0.309713 +v -0.230856 -0.214204 -0.404659 +v -0.135230 -0.074234 -0.383250 +v -0.035336 0.033150 -0.354077 +v 0.049350 0.124186 -0.270999 +v 0.105936 0.185014 -0.146663 +v 0.125806 0.206374 0.000000 +v 0.105936 0.185014 0.146663 +v 0.049350 0.124186 0.270999 +v -0.035336 0.033150 0.354077 +v -0.135230 -0.074234 0.383250 +v -0.235124 -0.181618 0.354077 +v -0.319810 -0.272654 0.270999 +v -0.376395 -0.333482 0.146663 +v -0.396266 -0.354842 -0.000000 +v -0.376395 -0.333482 -0.146664 +v -0.319810 -0.272654 -0.270999 +v -0.235124 -0.181618 -0.354077 +v 0.071215 -0.085999 -0.438000 +v 0.041377 -0.063816 -0.438000 +v 0.171221 0.048513 -0.404659 +v 0.141384 0.070697 -0.404659 +v 0.256002 0.162547 -0.309713 +v 0.226165 0.184731 -0.309713 +v 0.312652 0.238743 -0.167615 +v 0.282814 0.260926 -0.167615 +v 0.332544 0.265499 0.000000 +v 0.302707 0.287682 0.000000 +v 0.312652 0.238743 0.167615 +v 0.282814 0.260926 0.167615 +v 0.256002 0.162547 0.309713 +v 0.226165 0.184731 0.309713 +v 0.171221 0.048513 0.404659 +v 0.141383 0.070697 0.404659 +v 0.071215 -0.085999 0.438000 +v 0.041377 -0.063816 0.438000 +v -0.058629 -0.198328 0.404659 +v -0.058629 -0.198328 -0.404659 +v 0.021058 -0.048709 -0.383250 +v 0.108564 0.068989 -0.354077 +v 0.182747 0.168769 -0.270999 +v 0.232315 0.235440 -0.146663 +v 0.249721 0.258852 0.000000 +v 0.232315 0.235440 0.146663 +v 0.182747 0.168769 0.270999 +v 0.108564 0.068989 0.354077 +v 0.021058 -0.048709 0.383250 +v -0.066448 -0.166408 0.354077 +v -0.140632 -0.266188 0.270999 +v -0.190200 -0.332858 0.146663 +v -0.207605 -0.356270 -0.000000 +v -0.190199 -0.332858 -0.146664 +v -0.140631 -0.266188 -0.270999 +v -0.066448 -0.166408 -0.354077 +v 0.220377 -0.057101 -0.438000 +v 0.188086 -0.038671 -0.438000 +v 0.303465 0.088470 -0.404659 +v 0.271175 0.106901 -0.404659 +v 0.373905 0.211880 -0.309713 +v 0.341614 0.230311 -0.309713 +v 0.420971 0.294340 -0.167615 +v 0.388680 0.312771 -0.167615 +v 0.437498 0.323296 0.000000 +v 0.405208 0.341727 0.000000 +v 0.420971 0.294340 0.167615 +v 0.388680 0.312771 0.167615 +v 0.373905 0.211880 0.309713 +v 0.341614 0.230311 0.309713 +v 0.303465 0.088470 0.404659 +v 0.271175 0.106901 0.404659 +v 0.220377 -0.057101 0.438000 +v 0.188086 -0.038671 0.438000 +v 0.104997 -0.184242 0.404659 +v 0.104997 -0.184242 -0.404659 +v 0.166096 -0.026119 -0.383250 +v 0.238799 0.101256 -0.354077 +v 0.300433 0.209240 -0.270999 +v 0.341616 0.281392 -0.146663 +v 0.356078 0.306728 0.000000 +v 0.341616 0.281392 0.146664 +v 0.300433 0.209240 0.270999 +v 0.238799 0.101256 0.354077 +v 0.166096 -0.026119 0.383250 +v 0.093393 -0.153495 0.354077 +v 0.031759 -0.261478 0.270999 +v -0.009424 -0.333631 0.146663 +v -0.023885 -0.358967 -0.000000 +v -0.009424 -0.333631 -0.146664 +v 0.031759 -0.261478 -0.270999 +v 0.093394 -0.153495 -0.354077 +vt 0.000000 0.054054 +vt 0.000000 0.000000 +vt 0.062500 0.000000 +vt 0.062500 0.054054 +vt 0.125000 0.000000 +vt 0.125000 0.054054 +vt 0.187500 0.000000 +vt 0.187500 0.054054 +vt 0.250000 0.000000 +vt 0.250000 0.054054 +vt 0.312500 0.000000 +vt 0.312500 0.054054 +vt 0.375000 0.000000 +vt 0.375000 0.054054 +vt 0.437500 0.000000 +vt 0.437500 0.054054 +vt 0.500000 0.000000 +vt 0.500000 0.054054 +vt 0.055610 0.293778 +vt 0.110171 0.184656 +vt 0.123905 0.225763 +vt 0.076165 0.321244 +vt 0.316174 0.801264 +vt 0.253798 0.852938 +vt 0.186282 0.852938 +vt 0.123905 0.801264 +vt 0.076165 0.705782 +vt 0.050327 0.581029 +vt 0.050327 0.445997 +vt 0.186282 0.174088 +vt 0.253798 0.174089 +vt 0.316174 0.225763 +vt 0.363915 0.321245 +vt 0.389752 0.445997 +vt 0.389752 0.581029 +vt 0.363915 0.705782 +vt 0.384468 0.733249 +vt 0.329907 0.842371 +vt 0.055610 0.733249 +vt 0.026082 0.590674 +vt 0.384468 0.293778 +vt 0.413996 0.436353 +vt 0.258619 0.901428 +vt 0.181458 0.901428 +vt 0.181458 0.125599 +vt 0.258619 0.125599 +vt 0.026082 0.436353 +vt 0.413996 0.590674 +vt 0.110171 0.842371 +vt 0.329907 0.184656 +vt 0.076566 0.705251 +vt 0.050729 0.580498 +vt 0.050729 0.445466 +vt 0.076566 0.320713 +vt 0.124307 0.225232 +vt 0.186684 0.173557 +vt 0.254199 0.173557 +vt 0.316576 0.225232 +vt 0.364317 0.320713 +vt 0.390154 0.445466 +vt 0.390154 0.580498 +vt 0.364317 0.705251 +vt 0.316576 0.800732 +vt 0.254199 0.852407 +vt 0.186684 0.852407 +vt 0.124307 0.800732 +vt 0.110573 0.841838 +vt 0.056012 0.732716 +vt 0.330309 0.841838 +vt 0.259022 0.900894 +vt 0.026484 0.590141 +vt 0.026484 0.435819 +vt 0.414398 0.435819 +vt 0.414398 0.590141 +vt 0.181861 0.900894 +vt 0.384870 0.732716 +vt 0.384870 0.293245 +vt 0.389637 0.582094 +vt 0.363799 0.706847 +vt 0.316059 0.802329 +vt 0.253682 0.854003 +vt 0.186166 0.854003 +vt 0.123790 0.802329 +vt 0.076049 0.706847 +vt 0.050212 0.582094 +vt 0.050212 0.447062 +vt 0.076049 0.322309 +vt 0.123790 0.226828 +vt 0.186166 0.175153 +vt 0.253682 0.175153 +vt 0.316058 0.226828 +vt 0.363799 0.322310 +vt 0.389637 0.447062 +vt 0.413881 0.437419 +vt 0.413881 0.591741 +vt 0.258504 0.126666 +vt 0.329792 0.185722 +vt 0.384353 0.734315 +vt 0.329792 0.843437 +vt 0.055495 0.294844 +vt 0.110056 0.185722 +vt 0.384353 0.294844 +vt 0.181343 0.126666 +vt 0.025967 0.437419 +g pies_Cylinder_pie +s off +f 1/1 2/2 4/3 3/4 +f 3/4 4/3 6/5 5/6 +f 5/6 6/5 8/7 7/8 +f 7/8 8/7 10/9 9/10 +f 9/10 10/9 12/11 11/12 +f 11/12 12/11 14/13 13/14 +f 13/14 14/13 16/15 15/16 +f 15/16 16/15 18/17 17/18 +f 20/19 19/20 35/21 36/22 +f 27/23 26/24 41/25 40/26 39/27 38/28 37/29 36/22 35/21 34/30 33/31 32/32 31/33 30/34 29/35 28/36 +f 6/37 4/38 27/23 28/36 +f 23/39 22/40 38/28 39/27 +f 12/41 10/42 30/34 31/33 +f 2/43 25/44 41/25 26/24 +f 4/38 2/43 26/24 27/23 +f 18/45 16/46 33/31 34/30 +f 21/47 20/19 36/22 37/29 +f 8/48 6/37 28/36 29/35 +f 24/49 23/39 39/27 40/26 +f 14/50 12/41 31/33 32/32 +f 19/20 18/45 34/30 35/21 +f 22/40 21/47 37/29 38/28 +f 10/42 8/48 29/35 30/34 +f 25/44 24/49 40/26 41/25 +f 16/46 14/50 32/32 33/31 +f 42/1 43/2 45/3 44/4 +f 44/4 45/3 47/5 46/6 +f 46/6 47/5 49/7 48/8 +f 48/8 49/7 51/9 50/10 +f 50/10 51/9 53/11 52/12 +f 52/12 53/11 55/13 54/14 +f 54/14 55/13 57/15 56/16 +f 56/16 57/15 59/17 58/18 +f 63/51 62/52 77/53 76/54 75/55 74/56 73/57 72/58 71/59 70/60 69/61 68/62 67/63 66/64 65/65 64/66 +f 47/67 45/68 63/51 64/66 +f 53/69 51/70 66/64 67/63 +f 43/71 61/72 77/53 62/52 +f 45/68 43/71 62/52 63/51 +f 59/73 57/74 69/61 70/60 +f 49/75 47/67 64/66 65/65 +f 55/76 53/69 67/63 68/62 +f 60/77 59/73 70/60 71/59 +f 51/70 49/75 65/65 66/64 +f 57/74 55/76 68/62 69/61 +f 78/1 79/2 81/3 80/4 +f 80/4 81/3 83/5 82/6 +f 82/6 83/5 85/7 84/8 +f 84/8 85/7 87/9 86/10 +f 86/10 87/9 89/11 88/12 +f 88/12 89/11 91/13 90/14 +f 90/14 91/13 93/15 92/16 +f 92/16 93/15 95/17 94/18 +f 99/78 98/79 113/80 112/81 111/82 110/83 109/84 108/85 107/86 106/87 105/88 104/89 103/90 102/91 101/92 100/93 +f 83/94 81/95 99/78 100/93 +f 89/96 87/97 102/91 103/90 +f 79/98 97/99 113/80 98/79 +f 81/95 79/98 98/79 99/78 +f 95/100 93/101 105/88 106/87 +f 85/102 83/94 100/93 101/92 +f 91/103 89/96 103/90 104/89 +f 96/104 95/100 106/87 107/86 +f 87/97 85/102 101/92 102/91 +f 93/101 91/103 104/89 105/88 +o basket_Cube.001 +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.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.437500 0.500000 0.437500 +v -0.437500 0.500000 -0.437500 +v 0.437500 0.500000 -0.437500 +v 0.437500 0.500000 0.437500 +v -0.437500 -0.437500 0.437500 +v -0.437500 -0.437500 -0.437500 +v 0.437500 -0.437500 -0.437500 +v 0.437500 -0.437500 0.437500 +vt 0.484848 0.984848 +vt 0.015152 0.984848 +vt 0.015152 0.515152 +vt 0.484848 0.515152 +vt 0.515152 0.984848 +vt 0.515152 0.515152 +vt 0.984848 0.515152 +vt 0.984848 0.984848 +vt 0.954545 0.545455 +vt 0.545455 0.545455 +vt 0.954545 0.954545 +vt 0.545455 0.954545 +g basket_Cube.001_basket +s off +f 118/105 119/106 115/107 114/108 +f 119/105 120/106 116/107 115/108 +f 120/105 121/106 117/107 116/108 +f 121/105 118/106 114/107 117/108 +f 114/109 115/110 116/111 117/112 +f 118/110 121/111 125/113 122/114 +f 121/111 120/112 124/115 125/113 +f 120/112 119/109 123/116 124/115 +f 119/109 118/110 122/114 123/116 +f 122/105 125/106 129/107 126/108 +f 125/105 124/106 128/107 129/108 +f 124/105 123/106 127/107 128/108 +f 123/105 122/106 126/107 127/108 +f 126/114 129/113 128/115 127/116 diff --git a/mods/vipworld/bushes_classic/models/bushes_bush.obj b/mods/vipworld/bushes_classic/models/bushes_bush.obj new file mode 100644 index 00000000..a69bfce4 --- /dev/null +++ b/mods/vipworld/bushes_classic/models/bushes_bush.obj @@ -0,0 +1,329 @@ +# Blender v2.73 (sub 0) OBJ File: 'bush.blend' +# www.blender.org +o nodebox-4 +v 0.467076 -0.122686 -0.190481 +v -0.453590 -0.119789 -0.192145 +v 0.420865 -0.181680 -0.171396 +v -0.429008 -0.188000 -0.182314 +v -0.450977 0.041977 -0.191409 +v -0.271687 -0.294075 -0.114977 +v -0.096925 -0.495759 -0.044091 +v -0.070286 -0.344209 -0.030750 +v -0.163971 -0.173437 -0.403793 +v -0.188139 -0.116431 0.446425 +v 0.069865 0.462329 0.170043 +v -0.175980 -0.180649 0.417932 +v -0.184276 0.039248 0.437271 +v -0.121692 -0.319322 0.290049 +v -0.039557 -0.495759 0.097032 +v -0.029307 -0.346230 0.070496 +v -0.440307 0.205163 -0.203598 +v -0.440281 0.206327 0.191785 +v -0.339366 0.327086 -0.144329 +v -0.267923 0.418413 0.108270 +v -0.264994 0.405691 -0.113216 +v 0.173823 0.186657 0.424935 +v -0.172109 0.470396 -0.073638 +v -0.090743 0.491063 -0.039539 +v -0.173625 0.180559 0.412022 +v 0.108534 0.404586 0.263698 +v -0.137870 0.317286 0.327397 +v 0.149454 0.342906 0.361857 +v -0.115069 0.426252 0.274637 +v 0.116858 -0.311812 0.284557 +v -0.074459 0.465500 0.178311 +v -0.036397 0.486640 0.094150 +v 0.044199 -0.495759 -0.101459 +v 0.034559 -0.377127 -0.079219 +v 0.116886 -0.299764 -0.276145 +v -0.172864 0.462259 0.069984 +v 0.173974 -0.178414 -0.411782 +v 0.191827 0.042411 -0.453422 +v 0.190055 -0.117435 -0.449613 +v -0.136929 0.321997 -0.339476 +v 0.101567 -0.495759 0.039664 +v 0.076778 -0.365788 0.030191 +v 0.292232 -0.320027 0.121743 +v -0.067752 0.451498 -0.167691 +v 0.433751 -0.189348 0.181586 +v 0.457624 0.044950 0.184732 +v 0.473778 -0.128221 0.198329 +v -0.113891 -0.307852 -0.282552 +v 0.081961 0.458662 -0.191580 +v 0.042947 0.491063 -0.093885 +v 0.109202 0.397842 -0.257691 +v 0.145450 0.328672 -0.343352 +v 0.191241 0.038411 0.444768 +v -0.184306 0.045052 -0.456452 +v -0.289997 -0.318897 0.117161 +v 0.182461 0.185982 -0.431178 +v 0.180190 0.469152 0.074510 +v 0.097292 0.491063 0.039804 +v 0.264954 0.412421 0.110505 +v 0.355939 0.336100 0.148277 +v -0.474575 0.042725 0.191924 +v -0.169486 0.185035 -0.418844 +v -0.445009 -0.118527 0.180804 +v 0.427054 0.187979 0.172057 +v 0.350926 0.339079 -0.143384 +v 0.189060 -0.125023 0.462241 +v 0.269270 -0.290650 -0.109472 +v 0.175816 -0.186803 0.429367 +v 0.259570 0.406980 -0.105942 +v -0.103158 0.398344 -0.255462 +v -0.339105 0.330270 0.137302 +v -0.186029 -0.123369 -0.460126 +v -0.418539 -0.180131 0.169838 +v 0.041492 0.491063 0.094145 +v 0.487251 0.041118 -0.191308 +v 0.173059 0.459504 -0.070716 +v 0.460259 0.206607 -0.196213 +v 0.108065 0.487446 -0.045199 +v -0.103423 0.491173 0.040772 +v -0.040665 0.496765 -0.107957 +v -0.070153 -0.343292 0.028053 +v -0.028215 -0.347521 -0.072596 +v 0.028031 -0.329368 0.067986 +v 0.075170 -0.358957 -0.031186 +v -0.037332 -0.495759 -0.099759 +v 0.099867 -0.495759 -0.041867 +v -0.095225 -0.495759 0.037440 +v 0.041974 -0.495759 0.095332 +v 0.001777 0.503796 -0.003546 +v 0.002321 -0.495758 -0.002214 +vt 0.875000 0.281250 +vt 1.000000 0.281250 +vt 1.000000 0.421875 +vt 0.875000 0.421875 +vt 0.375000 0.125000 +vt 0.500000 0.125000 +vt 0.500000 0.234375 +vt 0.375000 0.234375 +vt 0.625000 0.234375 +vt 0.625000 0.281250 +vt 0.500000 0.281250 +vt 0.500000 0.609375 +vt 0.500000 0.656250 +vt 0.375000 0.656250 +vt 0.375000 0.609375 +vt 0.625000 0.421875 +vt 0.500000 0.421875 +vt 0.375000 0.281250 +vt 0.375000 0.421875 +vt 0.125000 0.609375 +vt 0.125000 0.656250 +vt 0.000000 0.656250 +vt 0.000000 0.609375 +vt 0.846670 0.983596 +vt 0.823789 0.862038 +vt 0.861831 0.862038 +vt 0.500000 0.531250 +vt 0.375000 0.531250 +vt 0.234375 0.609375 +vt 0.234375 0.531250 +vt 0.875000 0.234375 +vt 0.750000 0.234375 +vt 0.750000 0.125000 +vt 0.875000 0.125000 +vt 0.125000 0.234375 +vt 0.125000 0.125000 +vt 0.234375 0.125000 +vt 0.234375 0.234375 +vt 0.125000 0.281250 +vt 0.234375 0.281250 +vt 0.234375 0.421875 +vt 0.125000 0.421875 +vt 0.125000 0.703125 +vt 0.000000 0.703125 +vt 0.875000 0.656250 +vt 0.750000 0.656250 +vt 0.750000 0.609375 +vt 0.875000 0.609375 +vt 0.625000 0.656250 +vt 0.625000 0.609375 +vt 0.234375 0.656250 +vt 0.375000 0.703125 +vt 0.234375 0.703125 +vt 0.125000 0.531250 +vt 0.875000 0.531250 +vt 1.000000 0.531250 +vt 1.000000 0.609375 +vt 0.500000 0.703125 +vt 0.000000 0.421875 +vt 0.000000 0.531250 +vt 0.875000 0.703125 +vt 0.750000 0.703125 +vt 0.328125 0.812500 +vt 0.328125 0.875000 +vt 0.265625 0.890625 +vt 0.265625 0.781250 +vt 0.750000 0.531250 +vt 1.000000 0.234375 +vt -0.000000 0.281250 +vt 0.000000 0.234375 +vt 0.375000 0.921875 +vt 0.328125 0.984375 +vt 0.562500 0.812500 +vt 0.500000 0.828125 +vt 0.625000 0.125000 +vt 0.625000 0.531250 +vt 0.970570 0.983596 +vt 0.918853 0.862038 +vt 0.983390 0.862038 +vt 1.000000 0.703125 +vt 1.000000 0.656250 +vt 0.694849 0.983596 +vt 0.653099 0.862038 +vt 0.703461 0.862038 +vt 0.453125 1.000000 +vt 0.437500 0.937500 +vt 0.546875 0.937500 +vt 0.375000 0.765625 +vt 0.625000 0.703125 +vt 0.750000 0.281250 +vt 0.000000 0.125000 +vt 0.781059 0.974219 +vt 0.740272 0.862038 +vt 0.773590 0.862038 +vt 0.823762 0.862067 +vt 0.773656 0.862066 +vt 0.800723 0.801332 +vt 0.750000 0.421875 +vt 1.000000 0.125000 +vt 0.881508 0.980225 +vt 0.923791 0.982865 +vt 0.819499 0.959318 +vt 0.634200 0.973424 +vt 0.659430 0.971277 +vt 0.724959 0.956989 +vt 0.755822 0.968617 +vt 0.125000 0.000000 +vt 0.234375 0.000000 +vt 0.375000 0.000000 +vt 0.500000 0.000000 +vt 0.750000 0.000000 +vt 0.875000 0.000000 +vt 1.000000 0.000000 +vt 0.625000 0.000000 +vt 0.000000 0.000000 +vt 0.618713 0.862038 +vt 0.453125 0.781250 +vt 0.484375 0.890625 +vt 0.406250 0.859375 +vt 0.738525 0.828462 +vt 0.741806 0.778103 +vt 0.777683 0.740596 +vt 0.827789 0.740597 +vt 0.862920 0.774201 +vt 0.859639 0.824560 +s off +f 63/1 10/2 13/3 61/4 +f 67/5 35/6 37/7 3/8 +f 9/9 72/10 39/11 37/7 +f 52/12 51/13 69/14 65/15 +f 72/10 54/16 38/17 39/11 +f 1/18 39/11 38/17 75/19 +f 28/20 26/21 29/22 27/23 +f 82/24 33/25 85/26 +f 75/19 38/17 56/27 77/28 +f 77/28 65/15 60/29 64/30 +f 73/31 4/32 6/33 55/34 +f 68/35 30/36 43/37 45/38 +f 66/39 47/40 46/41 53/42 +f 11/43 31/44 29/22 26/21 +f 20/45 21/46 19/47 71/48 +f 70/49 40/50 19/47 21/46 +f 59/51 69/14 76/52 57/53 +f 3/8 37/7 39/11 1/18 +f 28/20 22/54 64/30 60/29 +f 71/48 18/55 25/56 27/57 +f 69/14 51/13 49/58 76/52 +f 13/59 53/42 22/54 25/60 +f 36/61 23/62 21/46 20/45 +f 58/63 74/64 11/65 57/66 +f 57/53 11/43 26/21 59/51 +f 19/47 17/67 18/55 71/48 +f 73/31 12/68 10/2 63/1 +f 68/35 66/39 10/69 12/70 +f 74/64 32/71 31/72 11/65 +f 53/42 46/41 64/30 22/54 +f 25/56 18/55 61/4 13/3 +f 49/58 44/73 80/74 +f 45/38 3/8 1/18 47/40 +f 9/9 48/75 6/33 4/32 +f 62/76 40/50 52/12 56/27 +f 81/77 7/78 87/79 +f 31/80 36/61 20/45 29/81 +f 83/82 15/83 88/84 +f 36/85 79/86 23/87 +f 78/88 58/63 57/66 +f 17/67 19/47 40/50 62/76 +f 45/38 47/40 66/39 68/35 +f 51/13 70/49 44/89 49/58 +f 4/32 73/31 63/1 2/90 +f 12/70 14/91 30/36 68/35 +f 84/92 41/93 86/94 +f 33/95 86/96 90/97 +f 70/49 21/46 23/62 44/89 +f 54/16 62/76 56/27 38/17 +f 29/81 20/45 71/48 27/57 +f 37/7 35/6 48/75 9/9 +f 5/98 17/67 62/76 54/16 +f 18/55 17/67 5/98 61/4 +f 10/69 66/39 53/42 13/59 +f 12/68 73/31 55/34 14/99 +f 51/13 52/12 40/50 70/49 +f 27/23 25/60 22/54 28/20 +f 65/15 69/14 59/51 60/29 +f 56/27 52/12 65/15 77/28 +f 46/41 75/19 77/28 64/30 +f 60/29 59/51 26/21 28/20 +f 47/40 1/18 75/19 46/41 +f 2/90 5/98 54/16 72/10 +f 4/32 2/90 72/10 9/9 +f 43/37 67/5 3/8 45/38 +f 2/90 63/1 61/4 5/98 +f 82/100 7/78 8/101 +f 82/24 34/102 33/25 +f 81/103 15/83 16/104 +f 81/77 8/101 7/78 +f 83/82 41/93 42/105 +f 83/82 16/104 15/83 +f 84/92 33/25 34/102 +f 84/92 42/106 41/93 +f 30/36 83/107 42/108 43/37 +f 42/108 84/109 67/5 43/37 +f 67/5 84/109 34/110 35/6 +f 55/34 6/33 8/111 81/112 +f 55/34 81/112 16/113 14/99 +f 34/110 82/114 48/75 35/6 +f 48/75 82/114 8/111 6/33 +f 30/36 14/91 16/115 83/107 +f 7/78 82/100 85/26 +f 15/83 81/103 87/116 +f 41/93 83/82 88/84 +f 33/25 84/92 86/94 +f 80/74 50/117 49/58 +f 23/87 24/118 80/74 +f 80/74 44/73 23/87 +f 79/86 36/85 31/72 +f 79/86 24/118 23/87 +f 31/72 32/71 79/86 +f 78/88 49/58 50/117 +f 78/88 57/66 76/52 +f 76/52 49/58 78/88 +f 24/118 79/86 89/119 +f 79/86 32/71 89/119 +f 32/71 74/64 89/119 +f 74/64 58/63 89/119 +f 58/63 78/88 89/119 +f 78/88 50/117 89/119 +f 50/117 80/74 89/119 +f 80/74 24/118 89/119 +f 86/96 41/120 90/97 +f 41/120 88/121 90/97 +f 88/121 15/122 90/97 +f 15/122 87/123 90/97 +f 87/123 7/124 90/97 +f 7/124 85/125 90/97 +f 85/125 33/95 90/97 diff --git a/mods/vipworld/bushes_classic/nodes.lua b/mods/vipworld/bushes_classic/nodes.lua new file mode 100644 index 00000000..cd60a55f --- /dev/null +++ b/mods/vipworld/bushes_classic/nodes.lua @@ -0,0 +1,205 @@ +-- support for i18n + +plantlife_bushes = {} + +-- TODO: add support for nodebreakers? those dig like mese picks +plantlife_bushes.after_dig_node = function(pos, oldnode, oldmetadata, digger) + if not (digger and pos and oldnode) then + return + end + + -- find out which bush type we are dealing with + local bush_name = "" + local can_harvest = false + + if oldnode.name == "bushes:fruitless_bush" then + -- this bush has not grown fruits yet (but will eventually) + bush_name = oldmetadata.fields.bush_type + -- no fruits to be found, so can_harvest stays false + else + local name_parts = oldnode.name:split(":") + if #name_parts >= 2 and name_parts[2] ~= nil then + + name_parts = name_parts[2]:split("_") + + if #name_parts >= 2 and name_parts[1] ~= nil then + bush_name = name_parts[1] + -- this bush really carries fruits + can_harvest = true + end + end + end + + -- find out which tool the digger was wielding (if any) + local toolstack = digger:get_wielded_item() + local capabilities = toolstack:get_tool_capabilities() + + -- what the player will get + local harvested + + -- failure to find out what the tool can do: destroy the bush and return nothing + local groupcaps = capabilities.groupcaps + if not groupcaps then + return + + -- digging with the hand or something like that + elseif groupcaps.snappy then + + -- plant a new bush without fruits + minetest.swap_node(pos, {type = "node", name = "bushes:fruitless_bush"}) + local meta = minetest.get_meta(pos) + meta:set_string('bush_type', bush_name) + + -- construct the stack of fruits the player will get + -- only bushes that have grown fruits can actually give fruits + if can_harvest then + local amount = "4" + harvested = "bushes:" .. bush_name .. " " .. amount + end + + -- something like a shovel + elseif groupcaps.crumbly then + + -- with a chance of 1/3, return 2 bushes + local amount + if math.random(1,3) == 1 then + amount = "2" + else + amount = "1" + end + -- return the bush itself + harvested = "bushes:" .. bush_name .. "_bush "..amount + + -- something like an axe + elseif groupcaps.choppy then + + -- the amount of sticks may vary + local amount = math.random(4, 20) + -- return some sticks + harvested = "default:stick " .. amount + + -- nothing known - destroy the plant + else + return + end + + -- give the harvested result to the player + if harvested then + --minetest.chat_send_player("singleplayer","you would now get "..tostring( harvested ) ); + local itemstack = ItemStack(harvested) + local inventory = digger:get_inventory() + if inventory:room_for_item("main", itemstack) then + inventory:add_item("main", itemstack) + else + minetest.item_drop(itemstack, digger, pos) + end + end +end + +plantlife_bushes.after_place_node = function(pos, placer, itemstack) + + if not (itemstack and pos) then + return + end + + local name_parts = itemstack:get_name():split(":") + if #name_parts < 2 or name_parts[2] == nil then + return + end + + name_parts = name_parts[2]:split("_") + + if #name_parts < 2 or name_parts[1] == nil then + return + end + + minetest.swap_node(pos, {name = "bushes:fruitless_bush"}) + local meta = minetest.get_meta(pos) + meta:set_string("bush_type", name_parts[1]) +end + +-- regrow berries (uses a base abm instead of biome_lib because of the use of metadata). + +minetest.register_abm({ + nodenames = {"bushes:fruitless_bush"}, + neighbors = {"group:soil", "group:potting_soil"}, + interval = 500, + chance = 5, + action = function(pos, node, active_object_count, active_object_count_wider) + + local meta = minetest.get_meta(pos) + local bush_name = meta:get_string("bush_type") + + if bush_name and bush_name ~= "" then + local dirtpos = {x = pos.x, y = pos.y-1, z = pos.z} + local dirt = minetest.get_node(dirtpos) + local is_soil = minetest.get_item_group(dirt.name, "soil") or minetest.get_item_group(dirt.name, "potting_soil") + + if is_soil and (dirt.name == "farming:soil_wet" or math.random(1,3) == 1) then + minetest.swap_node( pos, {name = "bushes:" .. bush_name .. "_bush"}) + end + end + end +}) + +-- Define the basket and bush nodes + +for i, bush_name in ipairs(bushes_classic.bushes) do + + minetest.register_node(":bushes:basket_"..bush_name, { + description = bushes_classic.bushes_descriptions[i][5], + drawtype = "mesh", + mesh = "bushes_basket_full.obj", + tiles = { + "bushes_basket_pie_"..bush_name..".png", + "bushes_basket.png" + }, + paramtype = "light", + paramtype2 = "facedir", + on_use = minetest.item_eat(18), + groups = { dig_immediate = 3 }, + }) + + local texture_top, texture_bottom + + local groups = {snappy = 3, bush = 1, flammable = 2, attached_node=1} + if bush_name == "mixed_berry" then + bush_name = "fruitless"; + texture_top = "bushes_fruitless_bush_top.png" + texture_bottom = "bushes_fruitless_bush_bottom.png" + groups.not_in_creative_inventory = 1 + else + texture_top = "bushes_bush_top.png" + texture_bottom = "bushes_bush_bottom.png" + end + + minetest.register_node(":bushes:" .. bush_name .. "_bush", { + description = bushes_classic.bushes_descriptions[i][6], + drawtype = "mesh", + mesh = "bushes_bush.obj", + tiles = {"bushes_bush_"..bush_name..".png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + groups = groups, + sounds = default.node_sound_leaves_defaults(), + drop = "", + after_dig_node = function( pos, oldnode, oldmetadata, digger ) + return plantlife_bushes.after_dig_node(pos, oldnode, oldmetadata, digger); + end, + after_place_node = function( pos, placer, itemstack ) + return plantlife_bushes.after_place_node(pos, placer, itemstack); + end, + }) + +end + +minetest.register_node(":bushes:basket_empty", { + description = "Basket", + drawtype = "mesh", + mesh = "bushes_basket_empty.obj", + tiles = { "bushes_basket.png" }, + paramtype = "light", + paramtype2 = "facedir", + groups = { dig_immediate = 3 }, +}) diff --git a/mods/vipworld/bushes_classic/textures/bushes_basket.png b/mods/vipworld/bushes_classic/textures/bushes_basket.png new file mode 100644 index 00000000..4384fba1 Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_basket.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_basket_pie_blackberry.png b/mods/vipworld/bushes_classic/textures/bushes_basket_pie_blackberry.png new file mode 100644 index 00000000..83ee63c0 Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_basket_pie_blackberry.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_basket_pie_blueberry.png b/mods/vipworld/bushes_classic/textures/bushes_basket_pie_blueberry.png new file mode 100644 index 00000000..9f9b2c6b Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_basket_pie_blueberry.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_basket_pie_gooseberry.png b/mods/vipworld/bushes_classic/textures/bushes_basket_pie_gooseberry.png new file mode 100644 index 00000000..d6bdff4f Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_basket_pie_gooseberry.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_basket_pie_mixed_berry.png b/mods/vipworld/bushes_classic/textures/bushes_basket_pie_mixed_berry.png new file mode 100644 index 00000000..ff271ff9 Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_basket_pie_mixed_berry.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_basket_pie_raspberry.png b/mods/vipworld/bushes_classic/textures/bushes_basket_pie_raspberry.png new file mode 100644 index 00000000..3bfd42ff Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_basket_pie_raspberry.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_basket_pie_strawberry.png b/mods/vipworld/bushes_classic/textures/bushes_basket_pie_strawberry.png new file mode 100644 index 00000000..c27b0b3a Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_basket_pie_strawberry.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_blackberry.png b/mods/vipworld/bushes_classic/textures/bushes_blackberry.png new file mode 100644 index 00000000..76b742bc Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_blackberry.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_blackberry_pie_cooked.png b/mods/vipworld/bushes_classic/textures/bushes_blackberry_pie_cooked.png new file mode 100644 index 00000000..a6af5ca8 Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_blackberry_pie_cooked.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_blackberry_pie_raw.png b/mods/vipworld/bushes_classic/textures/bushes_blackberry_pie_raw.png new file mode 100644 index 00000000..c37f9872 Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_blackberry_pie_raw.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_blackberry_pie_slice.png b/mods/vipworld/bushes_classic/textures/bushes_blackberry_pie_slice.png new file mode 100644 index 00000000..90be80e1 Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_blackberry_pie_slice.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_blueberry.png b/mods/vipworld/bushes_classic/textures/bushes_blueberry.png new file mode 100644 index 00000000..e15047fb Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_blueberry.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_blueberry_pie_cooked.png b/mods/vipworld/bushes_classic/textures/bushes_blueberry_pie_cooked.png new file mode 100644 index 00000000..11ce60fa Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_blueberry_pie_cooked.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_blueberry_pie_raw.png b/mods/vipworld/bushes_classic/textures/bushes_blueberry_pie_raw.png new file mode 100644 index 00000000..6e8dd9e7 Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_blueberry_pie_raw.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_blueberry_pie_slice.png b/mods/vipworld/bushes_classic/textures/bushes_blueberry_pie_slice.png new file mode 100644 index 00000000..eb6bf5a6 Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_blueberry_pie_slice.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_bush_blackberry.png b/mods/vipworld/bushes_classic/textures/bushes_bush_blackberry.png new file mode 100644 index 00000000..fa76c616 Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_bush_blackberry.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_bush_blueberry.png b/mods/vipworld/bushes_classic/textures/bushes_bush_blueberry.png new file mode 100644 index 00000000..3a305ca8 Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_bush_blueberry.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_bush_fruitless.png b/mods/vipworld/bushes_classic/textures/bushes_bush_fruitless.png new file mode 100644 index 00000000..ffa2e0a7 Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_bush_fruitless.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_bush_gooseberry.png b/mods/vipworld/bushes_classic/textures/bushes_bush_gooseberry.png new file mode 100644 index 00000000..52eca60f Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_bush_gooseberry.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_bush_raspberry.png b/mods/vipworld/bushes_classic/textures/bushes_bush_raspberry.png new file mode 100644 index 00000000..01809def Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_bush_raspberry.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_bush_strawberry.png b/mods/vipworld/bushes_classic/textures/bushes_bush_strawberry.png new file mode 100644 index 00000000..a5060e2f Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_bush_strawberry.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_gooseberry.png b/mods/vipworld/bushes_classic/textures/bushes_gooseberry.png new file mode 100644 index 00000000..e712cad9 Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_gooseberry.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_gooseberry_pie_cooked.png b/mods/vipworld/bushes_classic/textures/bushes_gooseberry_pie_cooked.png new file mode 100644 index 00000000..caa4e926 Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_gooseberry_pie_cooked.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_gooseberry_pie_raw.png b/mods/vipworld/bushes_classic/textures/bushes_gooseberry_pie_raw.png new file mode 100644 index 00000000..baf5af78 Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_gooseberry_pie_raw.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_gooseberry_pie_slice.png b/mods/vipworld/bushes_classic/textures/bushes_gooseberry_pie_slice.png new file mode 100644 index 00000000..5cf2844e Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_gooseberry_pie_slice.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_mixed_berry_pie_cooked.png b/mods/vipworld/bushes_classic/textures/bushes_mixed_berry_pie_cooked.png new file mode 100644 index 00000000..351a2697 Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_mixed_berry_pie_cooked.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_mixed_berry_pie_raw.png b/mods/vipworld/bushes_classic/textures/bushes_mixed_berry_pie_raw.png new file mode 100644 index 00000000..64869891 Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_mixed_berry_pie_raw.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_mixed_berry_pie_slice.png b/mods/vipworld/bushes_classic/textures/bushes_mixed_berry_pie_slice.png new file mode 100644 index 00000000..8844c3d7 Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_mixed_berry_pie_slice.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_raspberry.png b/mods/vipworld/bushes_classic/textures/bushes_raspberry.png new file mode 100644 index 00000000..034fd484 Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_raspberry.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_raspberry_pie_cooked.png b/mods/vipworld/bushes_classic/textures/bushes_raspberry_pie_cooked.png new file mode 100644 index 00000000..afeb7d87 Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_raspberry_pie_cooked.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_raspberry_pie_raw.png b/mods/vipworld/bushes_classic/textures/bushes_raspberry_pie_raw.png new file mode 100644 index 00000000..bb76a1d8 Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_raspberry_pie_raw.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_raspberry_pie_slice.png b/mods/vipworld/bushes_classic/textures/bushes_raspberry_pie_slice.png new file mode 100644 index 00000000..a0944882 Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_raspberry_pie_slice.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_strawberry.png b/mods/vipworld/bushes_classic/textures/bushes_strawberry.png new file mode 100644 index 00000000..b6a74b63 Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_strawberry.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_strawberry_pie_cooked.png b/mods/vipworld/bushes_classic/textures/bushes_strawberry_pie_cooked.png new file mode 100644 index 00000000..3d034ea1 Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_strawberry_pie_cooked.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_strawberry_pie_raw.png b/mods/vipworld/bushes_classic/textures/bushes_strawberry_pie_raw.png new file mode 100644 index 00000000..932c0735 Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_strawberry_pie_raw.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_strawberry_pie_slice.png b/mods/vipworld/bushes_classic/textures/bushes_strawberry_pie_slice.png new file mode 100644 index 00000000..f8d1d36c Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_strawberry_pie_slice.png differ diff --git a/mods/vipworld/bushes_classic/textures/bushes_sugar.png b/mods/vipworld/bushes_classic/textures/bushes_sugar.png new file mode 100644 index 00000000..726196b4 Binary files /dev/null and b/mods/vipworld/bushes_classic/textures/bushes_sugar.png differ diff --git a/mods/vipworld/darkage/README.md b/mods/vipworld/darkage/README.md new file mode 100644 index 00000000..59fc033d --- /dev/null +++ b/mods/vipworld/darkage/README.md @@ -0,0 +1,417 @@ +# DarkAge Mod for Minetest +Original mod by Master Gollum +Modified by addi. + +Contains code from CragiDavi and HybridDog + +## Introduction: + This mod adds a few new blocks that allows to create new buildings in a + pre industrial landscape. Of course, feel free to use them in any other + construction :P + + It also provides more layers of stones. I tried not to turn mining in + a rainbow, so don't expect to find them easily. There are two kinds of + materials, stones, that spawns in layers at different deep and clay + like materials (silt and mud) that you will find in water places. + Silt and Mud are more easy to find than stone layers, but if you find + one it will be a real mine, with all probability with hundreds of blocks. + + I used mainly 4 square recipes to avoid collisions with other MODs, + anyway I have not checked all them, so it is possible that another + person is already using one or more of this combinations. + + I also used Desert Sand and Desert Stone, because they almost are not + used in the default version. Probably I will change this recipes in + next releases. + + + +## Release Notes +Version 1.2 + +* corrected Sounds of Stairs +* updated to new Moreblocks api +* added Serpentine Stairs + +Version 1.1 + +* Fix spelling mistakes in README file +* Bug fix +* Rename slate_tale to slate_tile +* Remove unneeded code +* Add marble tile +* Remove unneeded code +* Capitalise a couple of descriptions +* Add marble tile texture +* Rename alias.lua to aliases.lua + +Version 1.0.1 + + * fixed init.lua which get broken by upload on github + + +Version 1.0 + +* compatibility with stairsplus added +* added new item iron_stick +* added craft reziep for iron stick +* changed reziep of iron_bars to avoid conflicts with iron bars mod +* changed reziep of chain to avoid conflicts with 3d furniture mod +* changed reziep of darkage:stonebrick to avoid conflicts with moreblocks +* disabled marble_tile to avoid the message "texture not found" +* added compatibility with stairsplus (now its moreblocks) +* added darkage:glass a nice looking glass that must be in this mod +* changed the sound_node_leaves_default to wood_default from box and wooden shelves +* added craft reziep for darkage:chalk +* improved the textures of reinforced wood and chalk to save a bit more loadtime on servers +* added another reziep for darkage straw (this can be crafted now, if farming is installed, with farming:harvested_weed + +Version 0.3 + +* 29 Nodes + 3 Craft Items +* Furniture and building decoration +* Stone layers + + + +Version 0.2 + +* 13 Nodes +* Sedimentary stones + + +Version 0.1 + +* 6 Nodes + +PS: This document has been structured as the README.txt of PilzAdam in + his Bed MOD. + +### How to install: + Unzip the archive an place it in minetest-base-directory/mods/ + if you have a windows client or a linux run-in-place client. If you + have a linux system-wide installation place it in + ~/.minetest/mods/. + If you want to install this mod only in one world create the folder + worldmods/ in your worlddirectory. Remember to activate it for your world by pressing the 'configure' button and doubleclick darkage in the right list. + For further information or help see: + http://wiki.minetest.net/Installing_Mods + +## BUILDING NODES + +### Adobe: +Sand and Clay mixture with Straw to build houses or walls. +Used from historical times, one of the first bricks +invented. I have to improve this texture, it is ugly :P + + CRAFT -> 4 + [Sand] [Sand] + [Clay Lump] [Straw] + + +### Basalt: +A darken version of the default Stone + + COOKING + [Basalt Cobble] + + +### Basalt Cobble: +A darken version of the default Cobble. + + CRAFT -> 4 + [Cobble] [Cobble] + [Coal Lump] [Coal Lump] + + +### Chalk: +A soft, white and porous sedimentary rock. It becomes +Chalk Powder when dug. Can't be craft, only found as stratum. + + +### Chalk Powder: +Pile of chalk from digging Chalk stones. Can +be used to prepare plaster. See Cobblestone with Plaster. + + +### Cobblestone with Plaster: +Cobbles where has been applied a +layer of white plaster. +When dug it lost the plaster layer! + + CRAFT -> 2 + [Cobblestone] [Chalk Powder] + [Cobblestone] [Chalk Powder] + + +### Dark Dirt: +A darken version of the Dirt where the grass doesn't +grown, perfect for create a path in a forest. I was using +Gravel, but the noise walking was annoying to me (like +walking over iron coal with the nude feet :P), for this I +created this node. + + CRAFT -> 4 + [Dirt] [Dirt] + [Gravel] [Gravel] + + +### Desert Iron Ore: +I know that others MODs add ores to the +Desert Stones, mine also does it, but just Iron, I supposed +the red color is because of the iron, so it goes with more +high probability than regular Stones and it doesn't add +Coal to them. It will not be a lot so you can keep it with +another MOD that does the same or just comment the lines that +does it. + + +### Dry Leaves: +Just a cube of Leaves toasted :P Well I found the +Leaves are not useful so I thought to turn them into Straw, ok +it is not the same, but well, why not? Just dry them in a +Furnace and then put together to create the Straw + + COOKING + [Leaves] + + +### Gneiss: +High grade metamorphic rock formed from Schist, very +common, and used in construction. It sometimes brakes in +Gneiss Cobble when being dug. + + COOKING + [Schist] + + +### Gneiss Cobble: +Brick version of the gneiss. + + From dig gneiss + + +### Mud: +Mixture of water and some combination of soil, silt, and +clay. Used for build houses, specially in desert regions. +It brakes in 4 Mud Lumps when dug. + + CRAFT -> 3 + [Dirt] [Dirt] + [Clay Lump] [Silt Lump] + + CRAFT -> 1 + [Mud Lump] [Mud Lump] + [Mud Lump] [Mud Lump] + + +### Old Red Sandstone: +A light red sandstone, in fact it's +sandstone with iron that gives it this color. + + CRAFT -> 4 + [Sandstone] [Sandstone] + [Iron Lump] [Sandstone] + + COOKING + [Old Red Sandstone Cobble] + + +### Old Red Sandstone Cobble: +Cobbles of Old Red Sandstone. + + CRAFT -> 4 + [Sandstone Cobble] [Sandstone Cobble] + [Iron Lump] [Sandstone Cobble] + + +### Reinforced Cobble: +Brick with crossed wooden. + + CRAFT -> 1 + [Stick] [] [Stick] + [] [Cobble] [] + [Stick] [] [Stick] + + +### Sandstone Cobble: +Brick version of the Sandstone, good for +buildings with a pale color. + + COOKING + [Sandstone] + + +### Schist: +Medium grade metamorphic rock from Slate. + + COOKING + [Slate] + + +### Silt: +Granular material of a size somewhere between sand and clay. +It brakes in 4 Silt Lumps. + + CRAFT -> 1 + [Silt Lump] [Silt Lump] + [Silt Lump] [Silt Lump] + + +### Slate: +Fine-grained, foliated, homogeneous metamorphic rock +derived from an original shale-type sedimentary rock through +low-grade regional metamorphism. It is used to build roof. + + COOKING + [Shale] + + COOKING + [Slate Cobble] + + +### Slate Cobble: +Cobble obtained from Slate + + From dig Slate + + +### Slate Tile: +Nice blue slate tiles for roofs. They has been used +as building traditional building material in zones where +slate is easy to find. +Note: It has stairs and slabs. + + CRAFT -> 2 + [Slate Cobble] [Slate Cobble] + [Slate Cobble] [Slate Cobble] + + +### Straw Bale: + A decoration item, looks great for a farm or a + country side house. + + CRAFT -> 1 + [Straw] [Straw] + [Straw] [Straw] + + +### Desert Stone: + Just the default block, it can be obtained now + from Desert Sand. The idea is that Desert Sand is stonier + than regular Sand, so it takes less to create a Desert + Stone than a Sandstone. + + CRAFT -> 2 + [Sandstone] [Sandstone] + [Sandstone] [Sandstone] + + +##FURNITURE NODES +Just started so they are few ones + +### Box: +A more smaller container than the Chest, but it requires +less wood. As cheep as 4 woods and have 16 slots. The craft +is a little weird but I think it makes sense and avoids +collision with the recipe of Hardwood of the MOD +building_blocks. + + CRAFT -> 2 + [Wood] [] [Wood] + [] [] [] + [Wood] [] [Wood] + +### Chain: +Climbable chain. + + CRAFT -> 2 + [Steel Ingot] + [Steel Ingot] + [Steel Ingot] + + +### Iron Bars: + Alternative window for the Glass. + + CRAFT -> 3 + [Iron Stick] [] [Iron Stick] + [Iron Stick] [] [Iron Stick] + [Iron Stick] [] [Iron Stick] + + +###Iron Grille: + Alternative window for the Glass. + + CRAFT -> 3 + [] [Iron Bars] [] + [Iron Bars] [] [Iron Bars] + [] [Iron Bars] [] + + +###Wood Bars: +Alternative window for the Glass. + + CRAFT -> 3 + [Stick] [] [Stick] + [Stick] [] [Stick] + [Stick] [] [Stick] + + +###Wood Frame: +Alternative window for the Glass. + + CRAFT -> 1 + [Stick] [Stick] [Stick] + [Stick] [Glass] [Stick] + [Stick] [Stick] [Stick] + + +### Medieval Glass: +A good looking glass, with small tiles + + CRAFT -> 8 + [Glass] [steel_ingot] [Glass] + [steel_ingot] [Glass] [steel_ingot] + [Glass] [steel_ingot] [Glass] + + or: + CRAFT -> 1 + [Medieval Glow Glass] + + +### Medieval Glow Glass: +A good looking glass, with small tiles which are glowing by itself + + CRAFT -> 8 + [Medieval Glass] + [torch] + + +##License: +Sourcecode: WTFPL (see below) +Graphics: WTFPL (see below) + +#See also: +http://minetest.net/ + +--- + + +``` +#! + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2004 Sam Hocevar + + 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. +``` \ No newline at end of file diff --git a/mods/vipworld/darkage/building.lua b/mods/vipworld/darkage/building.lua new file mode 100644 index 00000000..14ac7ec2 --- /dev/null +++ b/mods/vipworld/darkage/building.lua @@ -0,0 +1,117 @@ +--[[ + This function registers the nodes and craft rezieps for the reinforce stuff + * name: String which is used in description and as technical name (lower letters) + * craftItem: the Item where the reinforce is crafted out of + * nodedef: Nodedefinition table as used as in minetest.register_node() + + The Nodes are caled + :reinforced_ + :reinforced__slope + :reinforced__arrow + :reinforced__bars + + The modname is automatically the mod that currently calls this function. + e.g. if you call darkage.register_reinforce from the mod medieval modname will be medieval +]] +function darkage.register_reinforce(name, craftItem, nodedef) + assert(type(nodedef.tiles)=="table","ERRROR: nodedef.tiles have to be a table") + assert(nodedef.tiles[1], "ERROR: "..dump(nodedef.tiles).." requires at least 1 entry") + local modname = minetest.get_current_modname(); + local tname = string.gsub(name:lower()," ", "_"); -- Technical name + +-- Reinforced X + local reinforced = table.copy(nodedef); + local reinforced_tname = modname..":reinforced_"..tname + reinforced.description = "Reinforced "..name + for i,tile in ipairs(reinforced.tiles) do + reinforced.tiles[i] = tile .."^darkage_reinforce.png" + end + + minetest.register_node(reinforced_tname, reinforced) + +-- Reinforced Slope + local slope = table.copy(nodedef); + local slope_tname = modname..":reinforced_"..tname.."_slope" + slope.description = "Reinforced "..name.." Slope\nHint: use the screwdriver to rotate." + slope.paramtype2 = "facedir"; + local slope_tile_extend = {"^darkage_reinforce_right.png" , "^darkage_reinforce_right.png" , --top ,down + "^darkage_reinforce_right.png" , "^darkage_reinforce_right.png" , --right, left + "^darkage_reinforce_left.png" , "^darkage_reinforce_left.png"} -- front, back + for i=1,6 do + local tile = slope.tiles[i] or nodedef.tiles[1]; -- There have to be at least one tile. + slope.tiles[i] = tile ..slope_tile_extend[i] + end + + minetest.register_node(slope_tname, slope) + + -- Alias to convert old nodes + minetest.register_alias(modname..":reinforced_"..tname.."_right", slope_tname) + minetest.register_alias(modname..":reinforced_"..tname.."_left", slope_tname) + +-- Arrow bar + local arrow = table.copy(nodedef) + local arrow_tname = modname..":reinforced_"..tname.."_arrow" + arrow.paramtype2 = "facedir"; + arrow.description = "Reinforced "..name.." Arrow \nHint: use the screwdriver to rotate." + local arrow_tile_extend = {"" , "" , --top ,down + "^(darkage_reinforce_arrow.png^[transformR90)" , "^(darkage_reinforce_arrow.png^[transformR270)" , --right, left + "^(darkage_reinforce_arrow.png^[transformR180)" , "^darkage_reinforce_arrow.png"} -- front, back + for i=1,6 do + local tile = arrow.tiles[i] or arrow.tiles[1]; -- There have to be at least one tile. + arrow.tiles[i] = tile .. arrow_tile_extend[i] + end + minetest.register_node(arrow_tname, arrow) + + +-- Reinforced Bars + local bars = table.copy(nodedef) + local bars_tname = modname..":reinforced_"..tname.."_bars" + bars.description = name.." Bars" + for i,tile in ipairs(bars.tiles) do + bars.tiles[i] = tile .."^darkage_reinforce_bars.png" + end + minetest.register_node(bars_tname, bars) + +end + +darkage.register_reinforce("Chalk", "darkage:chalk_powder", { + tiles = {"darkage_chalk.png"}, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults() +}) + +darkage.register_reinforce("Wood", "default:wood", { + tiles = {"default_wood.png"}, + groups = {snappy=2, choppy=3, flammable=3}, + sounds = default.node_sound_wood_defaults() +}) + +darkage.register_reinforce("Chalked Bricks", "darkage:chalked_bricks", { + tiles = {"darkage_chalked_bricks.png"}, + groups = {cracky = 2, stone = 1}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("darkage:glass", { + description = "Medieval Glass", + drawtype = "glasslike", + tiles = {"darkage_glass.png"}, + use_texture_alpha=true, + paramtype = "light", + sunlight_propagates = true, + groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_node("darkage:glow_glass", { + description = "Medieval Glow Glass", + drawtype = "glasslike", + tiles = {"darkage_glass.png"}, + use_texture_alpha=true, + paramtype = "light", + sunlight_propagates = true, + light_source = default.LIGHT_MAX-1, + groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3}, + sounds = default.node_sound_glass_defaults(), +}) + diff --git a/mods/vipworld/darkage/depends.txt b/mods/vipworld/darkage/depends.txt new file mode 100644 index 00000000..2e813653 --- /dev/null +++ b/mods/vipworld/darkage/depends.txt @@ -0,0 +1,4 @@ +default +farming? +moreblocks? +stairs? diff --git a/mods/vipworld/darkage/description.txt b/mods/vipworld/darkage/description.txt new file mode 100644 index 00000000..95702452 --- /dev/null +++ b/mods/vipworld/darkage/description.txt @@ -0,0 +1,2 @@ +DarkAge adds several new nodes and crafts to create a pre industrial landscape. +It also extends the stones and provides new construction materials. diff --git a/mods/vipworld/darkage/furniture.lua b/mods/vipworld/darkage/furniture.lua new file mode 100644 index 00000000..f965c851 --- /dev/null +++ b/mods/vipworld/darkage/furniture.lua @@ -0,0 +1,279 @@ +minetest.register_node("darkage:chain", { + description = "Chain", + drawtype = "signlike", + tiles = {"darkage_chain.png"}, + inventory_image = "darkage_chain.png", + wield_image = "darkage_chain.png", + paramtype = "light", + paramtype2 = "wallmounted", + is_ground_content = false, + walkable = false, + climbable = true, + selection_box = { + type = "wallmounted", + --wall_top = = + --wall_bottom = = + --wall_side = = + }, + groups = {snappy=1,cracky=2,oddly_breakable_by_hand=2}, + legacy_wallmounted = true +}) +local box_formspec = [[ + size[8,9] + list[context;main;0,0.3;8,4;] + list[current_player;main;0,4.85;8,1;] + list[current_player;main;0,6.08;8,3;8] + listring[context;main] + listring[current_player;main] +]].. darkage.formbg + + + +minetest.register_node("darkage:box", { + description = "Box", + tiles = { "darkage_box_top.png","darkage_box_top.png","darkage_box.png"}, + groups = { snappy = 3 }, + sounds = default.node_sound_wood_defaults(), + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", box_formspec ) + meta:set_string("infotext", "Box") + local inv = meta:get_inventory() + inv:set_size("main", 16) + 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 box 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 box 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 box at "..minetest.pos_to_string(pos)) + end, +}) + +local shelves_formspec = [[ + size[8,9] + list[context;up;0,0;8,2;] + list[context;down;0,2.3;8,2;] + + list[current_player;main;0,4.85;8,1;] + list[current_player;main;0,6.08;8,3;8] + listring[context;up] + listring[context;down] + listring[current_player;main] +]].. darkage.formbg + +minetest.register_node("darkage:wood_shelves", { + description = "Wooden Shelves", + tiles = { "darkage_shelves.png","darkage_shelves.png","darkage_shelves.png", + "darkage_shelves.png","darkage_shelves.png","darkage_shelves_front.png"}, + paramtype2 = "facedir", + groups = { snappy = 3 }, + sounds = default.node_sound_wood_defaults(), + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", shelves_formspec) + meta:set_string("infotext", "Wooden Shelves") + local inv = meta:get_inventory() + inv:set_size("up", 16) + inv:set_size("down", 16) + end, + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("up") and inv:is_empty("down") + 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 shelves 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 shelves 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 shelves at "..minetest.pos_to_string(pos)) + end, +}) + +--minetest.register_node("darkage:rosace", { +-- description = "Rose Window", +-- tiles = {"darkage_rosace.png"}, +-- is_ground_content = false, +-- groups = {cracky=3}, +-- sounds = default.node_sound_stone_defaults() +--}) + +minetest.register_node("darkage:iron_bars", { + description = "Iron Bars", + drawtype = "glasslike", + tiles = {"darkage_iron_bars.png"}, + inventory_image = "darkage_iron_bars.png", + wield_image = "darkage_iron_bars.png", + is_ground_content = false, + paramtype = "light", + sunlight_propagates = true, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("darkage:iron_grille", { + description = "Iron Grille", + drawtype = "glasslike", + tiles = {"darkage_iron_grille.png"}, + inventory_image = "darkage_iron_grille.png", + wield_image = "darkage_iron_grille.png", + is_ground_content = false, + paramtype = "light", + sunlight_propagates = true, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("darkage:wood_bars", { + description = "Wooden Bars", + drawtype = "glasslike", + tiles = {"darkage_wood_bars.png"}, + inventory_image = "darkage_wood_bars.png", + wield_image = "darkage_wood_bars.png", + is_ground_content = false, + paramtype = "light", + sunlight_propagates = true, + groups = {snappy=1,choppy=2}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("darkage:wood_grille", { + description = "Wooden Grille", + drawtype = "glasslike", + tiles = {"darkage_wood_grille.png"}, + inventory_image = "darkage_wood_grille.png", + wield_image = "darkage_wood_grille.png", + is_ground_content = false, + paramtype = "light", + sunlight_propagates = true, + groups = {snappy=1,choppy=2}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("darkage:wood_frame", { + description = "Wooden Frame", + drawtype = "glasslike", + tiles = {"darkage_wood_frame.png"}, + inventory_image = "darkage_wood_frame.png", + wield_image = "darkage_wood_frame.png", + is_ground_content = false, + paramtype = "light", + sunlight_propagates = true, + groups = {snappy=1,choppy=2}, + sounds = default.node_sound_stone_defaults() +}) + +--------------- +-- Crafts Item +--------------- + + +---------- +-- Crafts +---------- +--[[ +minetest.register_craft({ + output = "darkage:box", + recipe = { + {"default:wood", "", "default:wood"}, + {"", "", ""}, + {"default:wood", "", "default:wood"}, + } +}) + +minetest.register_craft({ + output = "darkage:chain 2", + recipe = { + {"darkage:iron_stick"}, + {"darkage:iron_stick"}, + {"darkage:iron_stick"}, + } +}) + +minetest.register_craft({ + output = "darkage:iron_bars 2", + recipe = { + {"darkage:iron_stick", "", "darkage:iron_stick"}, + {"darkage:iron_stick", "", "darkage:iron_stick"}, + {"darkage:iron_stick", "", "darkage:iron_stick"}, + } +}) + +minetest.register_craft({ + output = "darkage:iron_grille 3", + recipe = { + {"", "darkage:iron_bars", ""}, + {"darkage:iron_bars", "", "darkage:iron_bars"}, + {"", "darkage:iron_bars", ""}, + } +}) + +minetest.register_craft({ + output = "darkage:lamp", + recipe = { + {"group:stick", "", "group:stick"}, + {"", "default:torch", ""}, + {"group:stick", "", "group:stick"}, + } +}) + +minetest.register_craft({ + output = "darkage:wood_bars 2", + recipe = { + {"group:stick", "", "group:stick"}, + {"group:stick", "", "group:stick"}, + {"group:stick", "", "group:stick"}, + } +}) + +minetest.register_craft({ + output = "darkage:wood_grille 3", + recipe = { + {"", "darkage:wood_bars", ""}, + {"darkage:wood_bars", "", "darkage:wood_bars"}, + {"", "darkage:wood_bars", ""}, + } +}) + +minetest.register_craft({ + output = "darkage:wood_shelves", + recipe = { + {"darkage:box"}, + {"darkage:box"}, + } +}) + +minetest.register_craft({ + output = "darkage:wood_frame", + recipe = { + {"group:stick", "", "group:stick"}, + {"", "default:glass", ""}, + {"group:stick", "", "group:stick"}, + } +}) + + +-- Cookings +minetest.register_craft({ + type = "cooking", + output = "default:glass", + recipe = "darkage:wood_frame", +}) + +]] diff --git a/mods/vipworld/darkage/init.lua b/mods/vipworld/darkage/init.lua new file mode 100644 index 00000000..230a3f90 --- /dev/null +++ b/mods/vipworld/darkage/init.lua @@ -0,0 +1,23 @@ +minetest.log("action"," ---- Dark Age Version 1.3 is Loading! ---- ") + +darkage = {}; -- Create darkage namespace + +darkage.formbg = (default.gui_bg or "").. + (default.gui_bg_img or "").. + (default.gui_slots or "") + +local MODPATH = minetest.get_modpath("darkage") + +dofile(MODPATH.."/nodes.lua") +--dofile(MODPATH.."/mapgen.lua") +dofile(MODPATH.."/building.lua") +dofile(MODPATH.."/furniture.lua") +dofile(MODPATH.."/walls.lua") + +dofile(MODPATH.."/stairs_functions.lua") +dofile(MODPATH.."/stairs.lua") + +if minetest.get_modpath("moreblocks") then + dofile(minetest.get_modpath("darkage").."/moreblocks.lua") +end + diff --git a/mods/vipworld/darkage/moreblocks.lua b/mods/vipworld/darkage/moreblocks.lua new file mode 100644 index 00000000..0a48876b --- /dev/null +++ b/mods/vipworld/darkage/moreblocks.lua @@ -0,0 +1,250 @@ +stairsplus:register_all("darkage", "slate", "darkage:slate", { + description = "Slate", + tiles = {"darkage_slate.png"}, + groups = {cracky=3}, + sounds = default.node_sound_wood_defaults(), +}) + +stairsplus:register_all("darkage", "slate_tile", "darkage:slate_tile", { + description = "Slate Tile", + tiles = {"darkage_slate_tile.png"}, + groups = {cracky=3}, + sounds = default.node_sound_wood_defaults(), +}) + +stairsplus:register_all("darkage", "adobe", "darkage:adobe", { + description = "Adobe", + tiles = {"darkage_adobe.png"}, + groups = {cracky=3}, + sounds = default.node_sound_wood_defaults(), +}) + +stairsplus:register_all("darkage", "basalt", "darkage:basalt", { + description = "Basalt", + tiles = {"darkage_basalt.png"}, + groups = {cracky=3}, + sounds = default.node_sound_wood_defaults(), +}) + +stairsplus:register_all("darkage", "basalt_cobble", "darkage:basalt_cobble", { + description = "Basalt Cobble", + tiles = {"darkage_basalt_cobble.png"}, + groups = {cracky=3}, + sounds = default.node_sound_wood_defaults(), +}) + +stairsplus:register_all("darkage", "chalk", "darkage:chalk", { + description = "Chalk Cobble", + tiles = {"darkage_chalk.png"}, + groups = {cracky=3}, + sounds = default.node_sound_wood_defaults(), +}) + +stairsplus:register_all("darkage", "cobble_with_plaster", "darkage:cobble_with_plaster", { + description = "Chalk with Plaster", + tiles = {"darkage_cobble_with_plaster.png"}, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults(), +}) + +stairsplus:register_all("darkage", "gneiss", "darkage:gneiss", { + description = "Gneiss", + tiles = {"darkage_gneiss.png"}, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults(), +}) + +stairsplus:register_all("darkage", "gneiss_cobble", "darkage:gneiss_cobble", { + description = "Gneiss Cobble", + tiles = {"darkage_gneiss_cobble.png"}, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults(), +}) + +stairsplus:register_all("darkage", "schist", "darkage:schist", { + description = "Schist", + tiles = {"darkage_schist.png"}, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults(), +}) + +stairsplus:register_all("darkage", "serpentine", "darkage:serpentine", { + description = "Serpentine", + tiles = {"darkage_serpentine.png"}, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults(), +}) + +stairsplus:register_all("darkage", "shale", "darkage:shale", { + description = "Shale", + tiles = {"darkage_shale.png"}, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults(), +}) + +stairsplus:register_all("darkage", "slate_cobble", "darkage:slate_cobble", { + description = "Slate Cobble", + tiles = {"darkage_slate_cobble.png"}, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults(), +}) + +stairsplus:register_all("darkage", "slate_tale", "darkage:slate_tale", { + description = "Slate Tale", + tiles = {"darkage_slate_tale.png"}, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults(), +}) + +stairsplus:register_all("darkage", "stone_brick", "darkage:stone_brick", { + description = "Stone Brick", + tiles = {"darkage_stone_brick.png"}, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults(), +}) + +stairsplus:register_all("darkage", "ors", "darkage:ors", { + description = "Old Red Sandstone", + tiles = {"darkage_ors.png"}, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults(), +}) + +stairsplus:register_all("darkage", "ors_brick", "darkage:ors_brick", { + description = "Old Red Sandstone Brick", + tiles = {"darkage_ors_brick.png"}, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults(), +}) + +stairsplus:register_all("darkage", "chalked_bricks", "darkage:chalked_bricks", { + description = "Chalked Bricks", + tiles = {"darkage_chalked_bricks.png"}, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults(), +}) + +stairsplus:register_all("darkage", "marble", "darkage:marble", { + description = "Marble", + tiles = {"darkage_marble.png"}, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults(), +}) + + table.insert(circular_saw.known_stairs, "darkage:slate") + table.insert(circular_saw.known_stairs, "darkage:slate_tale") + table.insert(circular_saw.known_stairs, "darkage:adobe") + table.insert(circular_saw.known_stairs, "darkage:basalt") + table.insert(circular_saw.known_stairs, "darkage:basalt_cobble") + table.insert(circular_saw.known_stairs, "darkage:chalk") + table.insert(circular_saw.known_stairs, "darkage:cobble_with_plaster") + table.insert(circular_saw.known_stairs, "darkage:gneiss") + table.insert(circular_saw.known_stairs, "darkage:gneiss_cobble") + table.insert(circular_saw.known_stairs, "darkage:schist") + table.insert(circular_saw.known_stairs, "darkage:serpentine") + table.insert(circular_saw.known_stairs, "darkage:slate") + table.insert(circular_saw.known_stairs, "darkage:slate_cobble") + table.insert(circular_saw.known_stairs, "darkage:slate_tale") + table.insert(circular_saw.known_stairs, "darkage:stone_brick") + table.insert(circular_saw.known_stairs, "darkage:shale") + table.insert(circular_saw.known_stairs, "darkage:ors") + table.insert(circular_saw.known_stairs, "darkage:ors_brick") + table.insert(circular_saw.known_stairs, "darkage:chalked_bricks") + table.insert(circular_saw.known_stairs, "darkage:marble") + +-- and now for the aliases + +local saw_names = { + {"micro", "_1"}, + {"panel", "_1"}, + {"micro", "_2"}, + {"panel", "_2"}, + {"micro", "_4"}, + {"panel", "_4"}, + {"micro", ""}, + {"panel", ""}, + + {"micro", "_12"}, + {"panel", "_12"}, + {"micro", "_14"}, + {"panel", "_14"}, + {"micro", "_15"}, + {"panel", "_15"}, + {"stair", "_outer"}, + {"stair", ""}, + + {"stair", "_inner"}, + {"slab", "_1"}, + {"slab", "_2"}, + {"slab", "_quarter"}, + {"slab", ""}, + {"slab", "_three_quarter"}, + {"slab", "_14"}, + {"slab", "_15"}, + + {"slab", "_two_sides"}, + {"slab", "_three_sides"}, + {"slab", "_three_sides_u"}, + {"stair", "_half"}, + {"stair", "_alt_1"}, + {"stair", "_alt_2"}, + {"stair", "_alt_4"}, + {"stair", "_alt"}, + + {"slope", ""}, + {"slope", "_half"}, + {"slope", "_half_raised"}, + {"slope", "_inner"}, + {"slope", "_inner_half"}, + {"slope", "_inner_half_raised"}, + {"slope", "_inner_cut"}, + {"slope", "_inner_cut_half"}, + + {"slope", "_inner_cut_half_raised"}, + {"slope", "_outer"}, + {"slope", "_outer_half"}, + {"slope", "_outer_half_raised"}, + {"slope", "_outer_cut"}, + {"slope", "_outer_cut_half"}, + {"slope", "_outer_cut_half_raised"}, + {"slope", "_cut"}, +} + +for i = 1, #saw_names do + local t = saw_names[i] + minetest.register_alias("slate" .. ":" .. t[1] .. "_block" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "slate" .. t[2]) + minetest.register_alias("slate_tale" .. ":" .. t[1] .. "_block" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "slate_tale" .. t[2]) + minetest.register_alias("adobe" .. ":" .. t[1] .. "_block" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "adobe" .. t[2]) + minetest.register_alias("basalt" .. ":" .. t[1] .. "_block" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "basalt" .. t[2]) + minetest.register_alias("basalt_cobble" .. ":" .. t[1] .. "_block" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "basalt_cobble" .. t[2]) + minetest.register_alias("chalk" .. ":" .. t[1] .. "_block" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "chalk" .. t[2]) + minetest.register_alias("cobble_with_plaster" .. ":" .. t[1] .. "_block" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "cobble_with_plaster" .. t[2]) + minetest.register_alias("gneiss" .. ":" .. t[1] .. "_block" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "gneiss" .. t[2]) + minetest.register_alias("gneiss_cobble" .. ":" .. t[1] .. "_block" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "gneiss_cobble" .. t[2]) + minetest.register_alias("schist" .. ":" .. t[1] .. "_block" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "schist" .. t[2]) + minetest.register_alias("serpentine" .. ":" .. t[1] .. "_block" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "serpentine" .. t[2]) + minetest.register_alias("shale" .. ":" .. t[1] .. "_block" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "shale" .. t[2]) + minetest.register_alias("slate_cobble" .. ":" .. t[1] .. "_block" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "slate_cobble" .. t[2]) + minetest.register_alias("stone_brick" .. ":" .. t[1] .. "_block" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "stone_brick" .. t[2]) + minetest.register_alias("ors" .. ":" .. t[1] .. "_block" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "ors" .. t[2]) + minetest.register_alias("ors_brick" .. ":" .. t[1] .. "_block" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "ors_brick" .. t[2]) + minetest.register_alias("chalked_bricks" .. ":" .. t[1] .. "_block" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "chalked_bricks" .. t[2]) + minetest.register_alias("marble" .. ":" .. t[1] .. "_block" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "marble" .. t[2]) + minetest.register_alias("stairs" .. ":" .. t[1] .. "_" .. "ors" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "ors" .. t[2]) + minetest.register_alias("stairs" .. ":" .. t[1] .. "_" .. "ors_brick" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "ors_brick" .. t[2]) + minetest.register_alias("stairs" .. ":" .. t[1] .. "_" .. "slate" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "slate" .. t[2]) + minetest.register_alias("stairs" .. ":" .. t[1] .. "_" .. "slate_tale" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "slate_tale" .. t[2]) + minetest.register_alias("stairs" .. ":" .. t[1] .. "_" .. "adobe" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "adobe" .. t[2]) + minetest.register_alias("stairs" .. ":" .. t[1] .. "_" .. "basalt" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "basalt" .. t[2]) + minetest.register_alias("stairs" .. ":" .. t[1] .. "_" .. "basalt_cobble" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "basalt_cobble" .. t[2]) + minetest.register_alias("stairs" .. ":" .. t[1] .. "_" .. "chalk" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "chalk" .. t[2]) + minetest.register_alias("stairs" .. ":" .. t[1] .. "_" .. "chalked_bricks" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "chalked_bricks" .. t[2]) + minetest.register_alias("stairs" .. ":" .. t[1] .. "_" .. "cobble_with_plaster" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "cobble_with_plaster" .. t[2]) + minetest.register_alias("stairs" .. ":" .. t[1] .. "_" .. "gneiss" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "gneiss" .. t[2]) + minetest.register_alias("stairs" .. ":" .. t[1] .. "_" .. "gneiss_cobble" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "gneiss_cobble" .. t[2]) + minetest.register_alias("stairs" .. ":" .. t[1] .. "_" .. "schist" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "schist" .. t[2]) + minetest.register_alias("stairs" .. ":" .. t[1] .. "_" .. "serpentine" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "serpentine" .. t[2]) + minetest.register_alias("stairs" .. ":" .. t[1] .. "_" .. "shale" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "shale" .. t[2]) + minetest.register_alias("stairs" .. ":" .. t[1] .. "_" .. "slate_cobble" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "slate_cobble" .. t[2]) + minetest.register_alias("stairs" .. ":" .. t[1] .. "_" .. "stone_brick" .. t[2], "darkage" .. ":" .. t[1] .. "_" .. "stone_brick" .. t[2]) +end diff --git a/mods/vipworld/darkage/nodes.lua b/mods/vipworld/darkage/nodes.lua new file mode 100644 index 00000000..be61bd28 --- /dev/null +++ b/mods/vipworld/darkage/nodes.lua @@ -0,0 +1,366 @@ +---------- +-- Nodes +---------- + +minetest.register_node("darkage:adobe", { + description = "Adobe", + tiles = {"darkage_adobe.png"}, + is_ground_content = true, + groups = {crumbly=3}, + sounds = default.node_sound_sand_defaults(), +}) + +minetest.register_node("darkage:basalt", { + description = "Basalt", + tiles = {"darkage_basalt.png"}, + is_ground_content = true, + drop = 'darkage:basalt_cobble', + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("darkage:basalt_cobble", { + description = "Basalt Cobble", + tiles = {"darkage_basalt_cobble.png"}, + is_ground_content = true, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("darkage:chalk", { + description = "Chalk", + tiles = {"darkage_chalk.png"}, + is_ground_content = true, + drop = 'darkage:chalk_powder 4', + groups = {crumbly=2,cracky=2}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("darkage:cobble_with_plaster", { + description = "Cobblestone with Plaster", + tiles = {"darkage_chalk.png^(default_cobble.png^[mask:darkage_plaster_mask_D.png)", "darkage_chalk.png^(default_cobble.png^[mask:darkage_plaster_mask_B.png)", + "darkage_chalk.png^(default_cobble.png^[mask:darkage_plaster_mask_C.png)", "darkage_chalk.png^(default_cobble.png^[mask:darkage_plaster_mask_A.png)", + "default_cobble.png", "darkage_chalk.png"}, + is_ground_content = false, + paramtype2 = "facedir", + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("darkage:chalked_bricks_with_plaster", { + description = "Chalked Bricks with Plaster", + tiles = {"darkage_chalk.png", "darkage_chalk.png", "darkage_chalk.png", "darkage_chalk.png", "darkage_chalk.png", "darkage_chalked_bricks.png"}, + is_ground_content = false, + paramtype2 = "facedir", + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults(), +}) + +--lbm to convert the old cobble_with_plaster to the new chalked_bricks to keep texture consistent +minetest.register_lbm({ + name="darkage:convert_cobble_with_plaster", + nodenames= "darkage:cobble_with_plaster", + run_at_every_load = false, + action = function(pos,node) + node.name = "darkage:chalked_bricks_with_plaster" + minetest.swap_node(pos, node) + end +}) + +minetest.register_node("darkage:desert_stone_with_iron", { + description = "Desert Iron Ore", + tiles = {"default_desert_stone.png^default_mineral_iron.png"}, + is_ground_content = true, + groups = {cracky=3}, + drop = 'default:iron_lump', + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("darkage:darkdirt", { + description = "Dark Dirt", + tiles = {"darkage_darkdirt.png"}, + is_ground_content = false, + groups = {crumbly=2}, + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_node("darkage:dry_leaves", { + description = "Dry Leaves", + tiles = {"darkage_dry_leaves.png"}, + is_ground_content = false, + paramtype = "light", + groups = {snappy=3, flammable=2}, + sounds = default.node_sound_leaves_defaults() +}) + +minetest.register_node("darkage:gneiss", { + description = "Gneiss", + tiles = {"darkage_gneiss.png"}, + is_ground_content = true, + groups = {cracky=3}, + drop = 'darkage:gneiss_cobble', + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("darkage:gneiss_cobble", { + description = "Gneiss Cobble", + tiles = {"darkage_gneiss_cobble.png"}, + is_ground_content = false, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("darkage:marble", { + description = "Marble", + tiles = {"darkage_marble.png"}, + is_ground_content = true, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("darkage:mud", { + description = "Mud", + tiles = {"darkage_mud_up.png","darkage_mud.png"}, + is_ground_content = true, + groups = {crumbly=3}, + drop = 'darkage:mud_lump 4', + sounds = default.node_sound_dirt_defaults({ + footstep = "", + }), +}) + +minetest.register_node("darkage:ors", { + description = "Old Red Sandstone", + tiles = {"darkage_ors.png"}, + is_ground_content = true, + drop = "darkage:ors_brick", + groups = {crumbly=1,cracky=3}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("darkage:ors_brick", { + description = "Old Red Sandstone Brick", + tiles = {"darkage_ors_brick.png"}, + is_ground_content = false, + groups = {crumbly=1,cracky=3}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("darkage:serpentine", { + description = "Serpentine", + tiles = {"darkage_serpentine.png"}, + is_ground_content = true, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("darkage:shale", { + description = "Shale", + tiles = {"darkage_shale.png","darkage_shale.png","darkage_shale_side.png"}, + is_ground_content = true, + groups = {crumbly=2,cracky=2}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("darkage:schist", { + description = "Schist", + tiles = {"darkage_schist.png"}, + is_ground_content = true, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("darkage:silt", { + description = "Silt", + tiles = {"darkage_silt.png"}, + is_ground_content = true, + groups = {crumbly=3}, + drop = 'darkage:silt_lump 4', + sounds = default.node_sound_dirt_defaults({ + footstep = "", + }), +}) + +minetest.register_node("darkage:slate", { + description = "Slate", + tiles = {"darkage_slate.png","darkage_slate.png","darkage_slate_side.png"}, + is_ground_content = true, + drop = 'darkage:slate_cobble', + groups = {cracky=2}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("darkage:slate_cobble", { + description = "Slate Cobble", + tiles = {"darkage_slate_cobble.png"}, + is_ground_content = false, + groups = {cracky=2}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("darkage:slate_tile", { + description = "Slate Tile", + tiles = {"darkage_slate_tile.png"}, + is_ground_content = false, + groups = {cracky=2}, + sounds = default.node_sound_stone_defaults() +}) + +-- Removed straw, because its in minetst game. Registering alias for compatibility reasons +minetest.register_alias("darkage:straw", "farming:straw") + +minetest.register_node("darkage:stone_brick", { + description = "Stone Brick", + tiles = {"darkage_stone_brick.png"}, + is_ground_content = false, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("darkage:straw_bale", { + description = "Straw Bale", + tiles = {"darkage_straw_bale.png"}, + is_ground_content = false, + drop = 'farming:straw 4', + groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_node("darkage:marble", { + description = "Marble", + tiles = {"darkage_marble.png"}, + is_ground_content = true, + groups = {cracky=2}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("darkage:marble_tile", { + description = "Marble Tile", + tiles = {"darkage_marble_tile.png"}, + is_ground_content = false, + groups = {cracky=2}, + sounds = default.node_sound_stone_defaults() +}) + +--[[ + Tuff +]] +minetest.register_node("darkage:tuff", { + description = "Tuff", + tiles = {"darkage_tuff.png"}, + is_ground_content = true, + legacy_mineral = true, + groups = {cracky = 3, stone = 1}, + drop = { + max_items = 1, + items = { + { + -- player get tuff node if he is lucky :) + items = {'darkage:tuff'}, + rarity = 3, + }, + { + -- player will get rubble with 2/3 chance + items = {'darkage:tuff_rubble'}, + } + + } + }, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("darkage:tuff_bricks", { + description = "Tuff Bricks", + tiles = {"darkage_tuff_bricks.png"}, + is_ground_content = false, + groups = {cracky=2}, + sounds = default.node_sound_stone_defaults() +}) + +-- abm to turn Tuff bricks to old Tuff bricks if water is nearby +minetest.register_abm({ + nodenames = {"darkage:tuff_bricks"}, + neighbors = {"group:water"}, + interval = 16, + chance = 200, + catch_up = false, + action = function(pos, node) + minetest.set_node(pos, {name = "darkage:old_tuff_bricks"}) + end +}) + +minetest.register_node("darkage:tuff_rubble", { + description = "Tuff Rubble", + tiles = {"darkage_tuff_rubble.png"}, + groups = {crumbly = 2, falling_node = 1}, + sounds = default.node_sound_gravel_defaults(), +}) +--[[ + Rhyolitic Tuff +]] +minetest.register_node("darkage:rhyolitic_tuff", { + description = "Rhyolitic Tuff", + tiles = {"darkage_rhyolitic_tuff.png"}, + is_ground_content = true, + legacy_mineral = true, + groups = {cracky = 3, stone = 1}, + drop = { + max_items = 1, + items = { + { + -- player get tuff node if he is lucky :) + items = {'darkage:rhyolitic_tuff'}, + rarity = 3, + }, + { + -- player will get rubble with 2/3 chance + items = {'darkage:rhyolitic_tuff_rubble'}, + } + + } + }, + sounds = default.node_sound_stone_defaults() +}) + + + +minetest.register_node("darkage:rhyolitic_tuff_bricks", { + description = "Rhyolitic Tuff Bricks", + tiles = {"darkage_rhyolitic_tuff_bricks.png"}, + is_ground_content = false, + groups = {cracky=2}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("darkage:old_tuff_bricks", { + description = "Old Tuff Bricks", + tiles = {"darkage_old_tuff_bricks.png"}, + is_ground_content = false, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults() +}) + + + + + +minetest.register_node("darkage:rhyolitic_tuff_rubble", { + description = "Rhyolitic Tuff Rubble", + tiles = {"darkage_rhyolitic_tuff_rubble.png"}, + groups = {crumbly = 2, falling_node = 1}, + sounds = default.node_sound_gravel_defaults(), +}) + + +--[[ + add a node using the cobble texture that was introduced in minetest 0.4.dev-20120408 and got removed in 0.4.7 + It has a nice contrast together the stone bricks, so I think it could get usefull. +]] +minetest.register_node("darkage:chalked_bricks", { + description = "Chalked Brick", + tiles = {"darkage_chalked_bricks.png"}, + is_ground_content = false, + groups = {cracky = 2, stone = 1}, + sounds = default.node_sound_stone_defaults(), +}) + diff --git a/mods/vipworld/darkage/stairs.lua b/mods/vipworld/darkage/stairs.lua new file mode 100644 index 00000000..111d2810 --- /dev/null +++ b/mods/vipworld/darkage/stairs.lua @@ -0,0 +1,17 @@ +for _,name in ipairs({"basalt_cobble", "slate_tale", "straw", "stone_brick", "ors_cobble", "gneiss_cobble", "slate_cobble"}) do + local nodename = "darkage:"..name + local tmp = minetest.registered_nodes[nodename] + if not tmp then + print("[darkage] "..nodename.." not yet defined") + return + end + local desc = tmp.description + stairs.register_stair_and_slab("darkage_"..name, nodename, + tmp.groups, + {"darkage_"..name..".png"}, + desc.." Stair", + desc.." Slab", + tmp.sounds + ) +end +--"desert_stone_cobble" "sandstone_cobble" diff --git a/mods/vipworld/darkage/stairs_functions.lua b/mods/vipworld/darkage/stairs_functions.lua new file mode 100644 index 00000000..c832b70f --- /dev/null +++ b/mods/vipworld/darkage/stairs_functions.lua @@ -0,0 +1,39 @@ + + +if minetest.get_modpath("moreblocks") then + function darkage.register_stairs(nodeName) + local ndef = assert(minetest.registered_nodes[nodeName], "Error: "..nodeName.." is not registered") + + local mod = "darkage" + local node = nodeName:split(":")[2] + + stairsplus:register_all(mod, node, nodeName, ndef) + end +elseif minetest.get_modpath("stairs") then + function darkage.register_stairs(nodeName) + local ndef = assert(minetest.registered_nodes[nodeName], "Error: "..nodeName.." is not registered") + + local node = nodeName:split(":")[2] + + -- The stairs api does not allow to use the darkage modname, so we have to call the nodes stairs:stair_darkage_ + -- and creating an alias + local subname = "darkage_".. node; + stairs.register_stair_and_slab(subname, nodeName, + ndef.groups, ndef.tiles, + ndef.description.." Stair", ndef.description.." Slab", + ndef.sounds) + + --stairs.register_stair_and_slab(subname, recipeitem, + -- groups, images, + -- desc_stair, desc_slab, sounds) + minetest.register_alias("darkage:stair_"..node, "stairs:stair_darkage_"..node) + minetest.register_alias("darkage:slab_"..node, "stairs:slab_darkage_"..node) + end +else + -- No compatible stairs mod found. + minetest.log("error", "[darkage] Darkage requires at least moreblocks or stairs to be installed. Its not possible to register stairs.") + function darkage.register_stairs(nodeName) + minetest.log("warning", "could not create stair of type "..nodeName .." because no compatible stairs mod is installed.") + end +end + diff --git a/mods/vipworld/darkage/textures/darkage_adobe.png b/mods/vipworld/darkage/textures/darkage_adobe.png new file mode 100644 index 00000000..1efccc6f Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_adobe.png differ diff --git a/mods/vipworld/darkage/textures/darkage_basalt.png b/mods/vipworld/darkage/textures/darkage_basalt.png new file mode 100644 index 00000000..3b55fee5 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_basalt.png differ diff --git a/mods/vipworld/darkage/textures/darkage_basalt_cobble.png b/mods/vipworld/darkage/textures/darkage_basalt_cobble.png new file mode 100644 index 00000000..60575505 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_basalt_cobble.png differ diff --git a/mods/vipworld/darkage/textures/darkage_box.png b/mods/vipworld/darkage/textures/darkage_box.png new file mode 100644 index 00000000..fd9550eb Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_box.png differ diff --git a/mods/vipworld/darkage/textures/darkage_box_top.png b/mods/vipworld/darkage/textures/darkage_box_top.png new file mode 100644 index 00000000..5c93d968 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_box_top.png differ diff --git a/mods/vipworld/darkage/textures/darkage_chain.png b/mods/vipworld/darkage/textures/darkage_chain.png new file mode 100644 index 00000000..4df06651 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_chain.png differ diff --git a/mods/vipworld/darkage/textures/darkage_chalk.png b/mods/vipworld/darkage/textures/darkage_chalk.png new file mode 100644 index 00000000..004305ed Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_chalk.png differ diff --git a/mods/vipworld/darkage/textures/darkage_chalk_powder.png b/mods/vipworld/darkage/textures/darkage_chalk_powder.png new file mode 100644 index 00000000..86ef2578 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_chalk_powder.png differ diff --git a/mods/vipworld/darkage/textures/darkage_chalked_bricks.png b/mods/vipworld/darkage/textures/darkage_chalked_bricks.png new file mode 100644 index 00000000..adc0ff31 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_chalked_bricks.png differ diff --git a/mods/vipworld/darkage/textures/darkage_cob.png b/mods/vipworld/darkage/textures/darkage_cob.png new file mode 100644 index 00000000..6380763b Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_cob.png differ diff --git a/mods/vipworld/darkage/textures/darkage_cobble_with_plaster_A.png b/mods/vipworld/darkage/textures/darkage_cobble_with_plaster_A.png new file mode 100644 index 00000000..f59fd6bf Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_cobble_with_plaster_A.png differ diff --git a/mods/vipworld/darkage/textures/darkage_cobble_with_plaster_B.png b/mods/vipworld/darkage/textures/darkage_cobble_with_plaster_B.png new file mode 100644 index 00000000..d61f8805 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_cobble_with_plaster_B.png differ diff --git a/mods/vipworld/darkage/textures/darkage_cobble_with_plaster_C.png b/mods/vipworld/darkage/textures/darkage_cobble_with_plaster_C.png new file mode 100644 index 00000000..87aebd43 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_cobble_with_plaster_C.png differ diff --git a/mods/vipworld/darkage/textures/darkage_cobble_with_plaster_D.png b/mods/vipworld/darkage/textures/darkage_cobble_with_plaster_D.png new file mode 100644 index 00000000..363dd1b3 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_cobble_with_plaster_D.png differ diff --git a/mods/vipworld/darkage/textures/darkage_darkdirt.png b/mods/vipworld/darkage/textures/darkage_darkdirt.png new file mode 100644 index 00000000..54fbfa11 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_darkdirt.png differ diff --git a/mods/vipworld/darkage/textures/darkage_desert_stone_cobble.png b/mods/vipworld/darkage/textures/darkage_desert_stone_cobble.png new file mode 100644 index 00000000..e243d8b8 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_desert_stone_cobble.png differ diff --git a/mods/vipworld/darkage/textures/darkage_dry_leaves.png b/mods/vipworld/darkage/textures/darkage_dry_leaves.png new file mode 100644 index 00000000..98e91a79 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_dry_leaves.png differ diff --git a/mods/vipworld/darkage/textures/darkage_glass.png b/mods/vipworld/darkage/textures/darkage_glass.png new file mode 100644 index 00000000..aa2c143f Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_glass.png differ diff --git a/mods/vipworld/darkage/textures/darkage_glow_stone_lamp.png b/mods/vipworld/darkage/textures/darkage_glow_stone_lamp.png new file mode 100644 index 00000000..7df1b97c Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_glow_stone_lamp.png differ diff --git a/mods/vipworld/darkage/textures/darkage_gneiss.png b/mods/vipworld/darkage/textures/darkage_gneiss.png new file mode 100644 index 00000000..26809463 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_gneiss.png differ diff --git a/mods/vipworld/darkage/textures/darkage_gneiss_cobble.png b/mods/vipworld/darkage/textures/darkage_gneiss_cobble.png new file mode 100644 index 00000000..2426321a Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_gneiss_cobble.png differ diff --git a/mods/vipworld/darkage/textures/darkage_iron_bars.png b/mods/vipworld/darkage/textures/darkage_iron_bars.png new file mode 100644 index 00000000..75d5438a Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_iron_bars.png differ diff --git a/mods/vipworld/darkage/textures/darkage_iron_grille.png b/mods/vipworld/darkage/textures/darkage_iron_grille.png new file mode 100644 index 00000000..f627d6fb Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_iron_grille.png differ diff --git a/mods/vipworld/darkage/textures/darkage_iron_stick.png b/mods/vipworld/darkage/textures/darkage_iron_stick.png new file mode 100644 index 00000000..cd8388f7 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_iron_stick.png differ diff --git a/mods/vipworld/darkage/textures/darkage_lamp.png b/mods/vipworld/darkage/textures/darkage_lamp.png new file mode 100644 index 00000000..09cb64c8 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_lamp.png differ diff --git a/mods/vipworld/darkage/textures/darkage_limestone_sand.png b/mods/vipworld/darkage/textures/darkage_limestone_sand.png new file mode 100644 index 00000000..c65b9ba3 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_limestone_sand.png differ diff --git a/mods/vipworld/darkage/textures/darkage_marble.png b/mods/vipworld/darkage/textures/darkage_marble.png new file mode 100644 index 00000000..dd2eef75 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_marble.png differ diff --git a/mods/vipworld/darkage/textures/darkage_marble_tile.png b/mods/vipworld/darkage/textures/darkage_marble_tile.png new file mode 100644 index 00000000..b7de2e75 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_marble_tile.png differ diff --git a/mods/vipworld/darkage/textures/darkage_mineral_iron.png b/mods/vipworld/darkage/textures/darkage_mineral_iron.png new file mode 100644 index 00000000..c8d68f28 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_mineral_iron.png differ diff --git a/mods/vipworld/darkage/textures/darkage_mud.png b/mods/vipworld/darkage/textures/darkage_mud.png new file mode 100644 index 00000000..524f3685 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_mud.png differ diff --git a/mods/vipworld/darkage/textures/darkage_mud_lump.png b/mods/vipworld/darkage/textures/darkage_mud_lump.png new file mode 100644 index 00000000..da425c23 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_mud_lump.png differ diff --git a/mods/vipworld/darkage/textures/darkage_mud_up.png b/mods/vipworld/darkage/textures/darkage_mud_up.png new file mode 100644 index 00000000..c31a2347 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_mud_up.png differ diff --git a/mods/vipworld/darkage/textures/darkage_old_tuff_bricks.png b/mods/vipworld/darkage/textures/darkage_old_tuff_bricks.png new file mode 100644 index 00000000..1cbc994b Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_old_tuff_bricks.png differ diff --git a/mods/vipworld/darkage/textures/darkage_ors.png b/mods/vipworld/darkage/textures/darkage_ors.png new file mode 100644 index 00000000..3e65c8ab Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_ors.png differ diff --git a/mods/vipworld/darkage/textures/darkage_ors_brick.png b/mods/vipworld/darkage/textures/darkage_ors_brick.png new file mode 100644 index 00000000..c5701e20 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_ors_brick.png differ diff --git a/mods/vipworld/darkage/textures/darkage_ors_cobble.png b/mods/vipworld/darkage/textures/darkage_ors_cobble.png new file mode 100644 index 00000000..c42ffdeb Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_ors_cobble.png differ diff --git a/mods/vipworld/darkage/textures/darkage_plaster_mask_A.png b/mods/vipworld/darkage/textures/darkage_plaster_mask_A.png new file mode 100644 index 00000000..71ab8fed Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_plaster_mask_A.png differ diff --git a/mods/vipworld/darkage/textures/darkage_plaster_mask_B.png b/mods/vipworld/darkage/textures/darkage_plaster_mask_B.png new file mode 100644 index 00000000..d46b628e Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_plaster_mask_B.png differ diff --git a/mods/vipworld/darkage/textures/darkage_plaster_mask_C.png b/mods/vipworld/darkage/textures/darkage_plaster_mask_C.png new file mode 100644 index 00000000..feed36d3 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_plaster_mask_C.png differ diff --git a/mods/vipworld/darkage/textures/darkage_plaster_mask_D.png b/mods/vipworld/darkage/textures/darkage_plaster_mask_D.png new file mode 100644 index 00000000..3131f6a4 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_plaster_mask_D.png differ diff --git a/mods/vipworld/darkage/textures/darkage_reinforce.png b/mods/vipworld/darkage/textures/darkage_reinforce.png new file mode 100644 index 00000000..11752860 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_reinforce.png differ diff --git a/mods/vipworld/darkage/textures/darkage_reinforce_arrow.png b/mods/vipworld/darkage/textures/darkage_reinforce_arrow.png new file mode 100644 index 00000000..01795446 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_reinforce_arrow.png differ diff --git a/mods/vipworld/darkage/textures/darkage_reinforce_bars.png b/mods/vipworld/darkage/textures/darkage_reinforce_bars.png new file mode 100644 index 00000000..e7eb6bca Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_reinforce_bars.png differ diff --git a/mods/vipworld/darkage/textures/darkage_reinforce_left.png b/mods/vipworld/darkage/textures/darkage_reinforce_left.png new file mode 100644 index 00000000..c026372d Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_reinforce_left.png differ diff --git a/mods/vipworld/darkage/textures/darkage_reinforce_right.png b/mods/vipworld/darkage/textures/darkage_reinforce_right.png new file mode 100644 index 00000000..3604a1b3 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_reinforce_right.png differ diff --git a/mods/vipworld/darkage/textures/darkage_reinforced_wood_left.png b/mods/vipworld/darkage/textures/darkage_reinforced_wood_left.png new file mode 100644 index 00000000..624407b0 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_reinforced_wood_left.png differ diff --git a/mods/vipworld/darkage/textures/darkage_reinforced_wood_right.png b/mods/vipworld/darkage/textures/darkage_reinforced_wood_right.png new file mode 100644 index 00000000..f89d4636 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_reinforced_wood_right.png differ diff --git a/mods/vipworld/darkage/textures/darkage_rhyolitic_tuff.png b/mods/vipworld/darkage/textures/darkage_rhyolitic_tuff.png new file mode 100644 index 00000000..88ed8ec5 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_rhyolitic_tuff.png differ diff --git a/mods/vipworld/darkage/textures/darkage_rhyolitic_tuff_bricks.png b/mods/vipworld/darkage/textures/darkage_rhyolitic_tuff_bricks.png new file mode 100644 index 00000000..9abb9077 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_rhyolitic_tuff_bricks.png differ diff --git a/mods/vipworld/darkage/textures/darkage_rhyolitic_tuff_rubble.png b/mods/vipworld/darkage/textures/darkage_rhyolitic_tuff_rubble.png new file mode 100644 index 00000000..89139dc4 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_rhyolitic_tuff_rubble.png differ diff --git a/mods/vipworld/darkage/textures/darkage_sandstone_cobble.png b/mods/vipworld/darkage/textures/darkage_sandstone_cobble.png new file mode 100644 index 00000000..50c0e6ac Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_sandstone_cobble.png differ diff --git a/mods/vipworld/darkage/textures/darkage_schist.png b/mods/vipworld/darkage/textures/darkage_schist.png new file mode 100644 index 00000000..0f45d99a Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_schist.png differ diff --git a/mods/vipworld/darkage/textures/darkage_serpentine.png b/mods/vipworld/darkage/textures/darkage_serpentine.png new file mode 100644 index 00000000..c681d836 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_serpentine.png differ diff --git a/mods/vipworld/darkage/textures/darkage_shale.png b/mods/vipworld/darkage/textures/darkage_shale.png new file mode 100644 index 00000000..6ebc026f Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_shale.png differ diff --git a/mods/vipworld/darkage/textures/darkage_shale_side.png b/mods/vipworld/darkage/textures/darkage_shale_side.png new file mode 100644 index 00000000..b0f7668f Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_shale_side.png differ diff --git a/mods/vipworld/darkage/textures/darkage_shelves.png b/mods/vipworld/darkage/textures/darkage_shelves.png new file mode 100644 index 00000000..57a65c55 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_shelves.png differ diff --git a/mods/vipworld/darkage/textures/darkage_shelves_front.png b/mods/vipworld/darkage/textures/darkage_shelves_front.png new file mode 100644 index 00000000..d3f423cb Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_shelves_front.png differ diff --git a/mods/vipworld/darkage/textures/darkage_silt.png b/mods/vipworld/darkage/textures/darkage_silt.png new file mode 100644 index 00000000..7772d0bc Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_silt.png differ diff --git a/mods/vipworld/darkage/textures/darkage_silt_lump.png b/mods/vipworld/darkage/textures/darkage_silt_lump.png new file mode 100644 index 00000000..c2ab34b8 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_silt_lump.png differ diff --git a/mods/vipworld/darkage/textures/darkage_slate.png b/mods/vipworld/darkage/textures/darkage_slate.png new file mode 100644 index 00000000..dd94dc4e Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_slate.png differ diff --git a/mods/vipworld/darkage/textures/darkage_slate_cobble.png b/mods/vipworld/darkage/textures/darkage_slate_cobble.png new file mode 100644 index 00000000..b4f26c3d Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_slate_cobble.png differ diff --git a/mods/vipworld/darkage/textures/darkage_slate_side.png b/mods/vipworld/darkage/textures/darkage_slate_side.png new file mode 100644 index 00000000..8e1a9ddb Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_slate_side.png differ diff --git a/mods/vipworld/darkage/textures/darkage_slate_tale.png b/mods/vipworld/darkage/textures/darkage_slate_tale.png new file mode 100644 index 00000000..a9e2a71a Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_slate_tale.png differ diff --git a/mods/vipworld/darkage/textures/darkage_slate_tile.png b/mods/vipworld/darkage/textures/darkage_slate_tile.png new file mode 100644 index 00000000..42517efd Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_slate_tile.png differ diff --git a/mods/vipworld/darkage/textures/darkage_stone_brick.png b/mods/vipworld/darkage/textures/darkage_stone_brick.png new file mode 100644 index 00000000..015d54d4 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_stone_brick.png differ diff --git a/mods/vipworld/darkage/textures/darkage_straw.png b/mods/vipworld/darkage/textures/darkage_straw.png new file mode 100644 index 00000000..6cac161a Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_straw.png differ diff --git a/mods/vipworld/darkage/textures/darkage_straw_bale.png b/mods/vipworld/darkage/textures/darkage_straw_bale.png new file mode 100644 index 00000000..47119f78 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_straw_bale.png differ diff --git a/mods/vipworld/darkage/textures/darkage_tuff.png b/mods/vipworld/darkage/textures/darkage_tuff.png new file mode 100644 index 00000000..8d2b7e11 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_tuff.png differ diff --git a/mods/vipworld/darkage/textures/darkage_tuff_bricks.png b/mods/vipworld/darkage/textures/darkage_tuff_bricks.png new file mode 100644 index 00000000..5a02fa04 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_tuff_bricks.png differ diff --git a/mods/vipworld/darkage/textures/darkage_tuff_rubble.png b/mods/vipworld/darkage/textures/darkage_tuff_rubble.png new file mode 100644 index 00000000..c072a310 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_tuff_rubble.png differ diff --git a/mods/vipworld/darkage/textures/darkage_wood_bars.png b/mods/vipworld/darkage/textures/darkage_wood_bars.png new file mode 100644 index 00000000..e0f63d1c Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_wood_bars.png differ diff --git a/mods/vipworld/darkage/textures/darkage_wood_frame.png b/mods/vipworld/darkage/textures/darkage_wood_frame.png new file mode 100644 index 00000000..91392da0 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_wood_frame.png differ diff --git a/mods/vipworld/darkage/textures/darkage_wood_grille.png b/mods/vipworld/darkage/textures/darkage_wood_grille.png new file mode 100644 index 00000000..066e43d2 Binary files /dev/null and b/mods/vipworld/darkage/textures/darkage_wood_grille.png differ diff --git a/mods/vipworld/darkage/walls.lua b/mods/vipworld/darkage/walls.lua new file mode 100644 index 00000000..963637d6 --- /dev/null +++ b/mods/vipworld/darkage/walls.lua @@ -0,0 +1,39 @@ +local node_box = { + type = "connected", + fixed = {{-1/4, -1/2, -1/4, 1/4, 1/2, 1/4}}, + -- connect_bottom = + connect_front = {{-3/16, -1/2, -1/2, 3/16, 3/8, -1/4}}, + connect_left = {{-1/2, -1/2, -3/16, -1/4, 3/8, 3/16}}, + connect_back = {{-3/16, -1/2, 1/4, 3/16, 3/8, 1/2}}, + connect_right = {{ 1/4, -1/2, -3/16, 1/2, 3/8, 3/16}}, + } + +local register_wall = function(base_node) + + local name = base_node .. "_wall" + local ndef = minetest.registered_nodes[base_node] + local groups = ndef.groups + groups["wall"] = 1 + -- inventory node, and pole-type wall start item + minetest.register_node(name, { + description = ndef.description .. " Wall", + drawtype = "nodebox", + node_box = node_box, + connects_to = {base_node,"group:wall"}, + paramtype = "light", + is_ground_content = false, + tiles = ndef.tiles, + walkable = true, + groups = groups, + sounds = ndef.sounds, + }) + +end + +register_wall("darkage:basalt_cobble") +register_wall("darkage:ors_brick") +register_wall("darkage:stone_brick") +register_wall("darkage:slate_cobble") +register_wall("darkage:tuff_bricks") +register_wall("darkage:old_tuff_bricks") +register_wall("darkage:rhyolitic_tuff_bricks") diff --git a/mods/vipworld/ferns/depends.txt b/mods/vipworld/ferns/depends.txt new file mode 100644 index 00000000..562cf632 --- /dev/null +++ b/mods/vipworld/ferns/depends.txt @@ -0,0 +1 @@ +default diff --git a/mods/vipworld/ferns/fern.lua b/mods/vipworld/ferns/fern.lua new file mode 100644 index 00000000..f35756a6 --- /dev/null +++ b/mods/vipworld/ferns/fern.lua @@ -0,0 +1,82 @@ +----------------------------------------------------------------------------------------------- +-- Ferns - Fern 0.1.0 +----------------------------------------------------------------------------------------------- +-- by Mossmanikin +-- Contains code from: biome_lib +-- Looked at code from: default, flowers, painting, trees +-- Dependencies: biome_lib +-- Supports: dryplants, stoneage, sumpf +----------------------------------------------------------------------------------------------- +-- some inspiration from here +-- https://en.wikipedia.org/wiki/Athyrium_yokoscense +-- http://www.mygarden.net.au/gardening/athyrium-yokoscense/3900/1 +----------------------------------------------------------------------------------------------- + + +-- support for i18n + +-- Maintain backward compatibilty +-- minetest-0.5: Begin +local default_ferns = minetest.registered_items["default:fern_1"] or false +if default_ferns then + minetest.register_alias("ferns:fern_03", "default:fern_3") + minetest.register_alias("ferns:fern_02", "default:fern_2") + minetest.register_alias("ferns:fern_01", "default:fern_1") +end +-- minetest-0.5: End +minetest.register_alias("archaeplantae:fern", "ferns:fern_03") +minetest.register_alias("archaeplantae:fern_mid", "ferns:fern_02") +minetest.register_alias("archaeplantae:fern_small", "ferns:fern_01") +minetest.register_alias("ferns:fern_04", "ferns:fern_02") -- for placing + +local nodenames = {} + +local function create_nodes() + local images = { "ferns_fern.png", "ferns_fern_mid.png", "ferns_fern_big.png" } + local vscales = { 1, math.sqrt(8), math.sqrt(11) } + local descs = { "Lady-fern (Athyrium)", nil, nil } + + for i = 1, 3 do + local node_on_place = nil + if i == 1 then + node_on_place = function(itemstack, placer, pointed_thing) + -- place a random fern + local stack = ItemStack("ferns:fern_0"..math.random(1,4)) + local ret = minetest.item_place(stack, placer, pointed_thing) + return ItemStack("ferns:fern_01 "..itemstack:get_count()-(1-ret:get_count())) -- TODO FIXME? + end + end + nodenames[i] = "ferns:fern_"..string.format("%02d", i) + minetest.register_node(nodenames[i], { + description = descs[i] or ("Lady-fern (Athyrium)".." " .. string.format("%02d", i)), + inventory_image = "ferns_fern.png", + drawtype = "plantlike", + visual_scale = vscales[i], + paramtype = "light", + tiles = { images[i] }, + walkable = false, + buildable_to = true, + groups = {snappy=3,flammable=2,attached_node=1,not_in_creative_inventory=1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16}, + }, + drop = "ferns:fern_01", + on_place = node_on_place + }) + end +end + +----------------------------------------------------------------------------------------------- +-- Init +----------------------------------------------------------------------------------------------- + +if default_ferns then + for i = 1, 3 do + nodenames[i] = "ferns:fern_"..string.format("%02d", i) + end +else + create_nodes() +end + diff --git a/mods/vipworld/ferns/gianttreefern.lua b/mods/vipworld/ferns/gianttreefern.lua new file mode 100644 index 00000000..f84a544e --- /dev/null +++ b/mods/vipworld/ferns/gianttreefern.lua @@ -0,0 +1,278 @@ +----------------------------------------------------------------------------------------------- +-- Ferns - Giant Tree Fern 0.1.1 +----------------------------------------------------------------------------------------------- +-- by Mossmanikin +-- Contains code from: biome_lib +-- Looked at code from: 4seasons, default +-- Supports: vines +----------------------------------------------------------------------------------------------- + + +-- lot of code, lot to load + +abstract_ferns.grow_giant_tree_fern = function(pos) + local pos_aux = {x = pos.x, y = pos.y + 1, z = pos.z} + local name = minetest.get_node(pos_aux).name + if name ~= "air" and name ~= "ferns:sapling_giant_tree_fern" + and name ~= "default:junglegrass" then + return + end + + local size = math.random(12,16) -- min of range must be >= 4 + + local leafchecks = { + { + direction = 3, + positions = { + {x = pos.x + 1, y = pos.y + size - 1, z = pos.z }, + {x = pos.x + 2, y = pos.y + size , z = pos.z }, + {x = pos.x + 3, y = pos.y + size - 1, z = pos.z }, + {x = pos.x + 4, y = pos.y + size - 2, z = pos.z } + } + }, + { + direction = 1, + positions = { + {x = pos.x - 1, y = pos.y + size - 1, z = pos.z }, + {x = pos.x - 2, y = pos.y + size, z = pos.z }, + {x = pos.x - 3, y = pos.y + size - 1, z = pos.z }, + {x = pos.x - 4, y = pos.y + size - 2, z = pos.z } + } + }, + { + direction = 2, + positions = { + {x = pos.x , y = pos.y + size - 1, z = pos.z + 1}, + {x = pos.x , y = pos.y + size , z = pos.z + 2}, + {x = pos.x , y = pos.y + size - 1, z = pos.z + 3}, + {x = pos.x , y = pos.y + size - 2, z = pos.z + 4} + } + }, + { + direction = 0, + positions = { + {x = pos.x , y = pos.y + size - 1, z = pos.z - 1}, + {x = pos.x , y = pos.y + size , z = pos.z - 2}, + {x = pos.x , y = pos.y + size - 1, z = pos.z - 3}, + {x = pos.x , y = pos.y + size - 2, z = pos.z - 4} + } + } + } + + local brk = false + for i = 1, size-3 do + pos_aux.y = pos.y + i + local name = minetest.get_node(pos_aux).name + if not (name == "air" or (i == 1 and name == "ferns:sapling_giant_tree_fern")) then + brk = true + break + end + minetest.swap_node({x = pos.x, y = pos.y + i, z = pos.z}, {name="ferns:fern_trunk_big"}) + end + if not brk then + minetest.swap_node({x = pos.x, y = pos.y + size-2, z = pos.z}, {name="ferns:fern_trunk_big_top"}) + minetest.swap_node({x = pos.x, y = pos.y + size-1, z = pos.z}, {name="ferns:tree_fern_leaves_giant"}) + + -- all the checking for air below is to prevent some ugly bugs (incomplete trunks of neighbouring trees), it's a bit slower, but worth the result + + -- assert(#leafchecks == 4) + for i = 1, 4 do + local positions = leafchecks[i].positions + local rot = leafchecks[i].direction + local endpos = 4 -- If the loop below adds all intermediate leaves then the "terminating" leaf will be at positions[4] + -- assert(#positions == 4) + -- add leaves so long as the destination nodes are air + for j = 1, 3 do + if minetest.get_node(positions[j]).name == "air" then + minetest.swap_node(positions[j], {name="ferns:tree_fern_leave_big"}) + else + endpos = j + break + end + end + -- add the terminating leaf if required and possible + if endpos == 4 and minetest.get_node(positions[endpos]).name == "air" then + minetest.swap_node(positions[endpos], {name="ferns:tree_fern_leave_big_end", param2=rot}) + end + end + end +end + +----------------------------------------------------------------------------------------------- +-- GIANT TREE FERN LEAVES +----------------------------------------------------------------------------------------------- +minetest.register_node("ferns:tree_fern_leaves_giant", { + description = "Tree Fern Crown (Dicksonia)", + drawtype = "plantlike", + visual_scale = math.sqrt(11), + wield_scale = {x=0.175, y=0.175, z=0.175}, + paramtype = "light", + tiles = {"ferns_fern_tree_giant.png"}, + inventory_image = "ferns_fern_tree.png", + walkable = false, + groups = { + snappy=3, + flammable=2, + attached_node=1, + not_in_creative_inventory=1 + }, + drop = { + max_items = 2, + items = { + { + -- occasionally, drop a second sapling instead of leaves + -- (extra saplings can also be obtained by replanting and + -- reharvesting leaves) + items = {"ferns:sapling_giant_tree_fern"}, + rarity = 10, + }, + { + items = {"ferns:sapling_giant_tree_fern"}, + }, + { + items = {"ferns:tree_fern_leaves_giant"}, + } + } + }, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16}, + }, +}) +----------------------------------------------------------------------------------------------- +-- GIANT TREE FERN LEAVE PART +----------------------------------------------------------------------------------------------- +minetest.register_node("ferns:tree_fern_leave_big", { + description = "Giant Tree Fern Leaves", + drawtype = "raillike", + paramtype = "light", + tiles = { + "ferns_tree_fern_leave_big.png", + }, + walkable = false, + groups = { + snappy=3, + flammable=2, + attached_node=1, + not_in_creative_inventory=1 + }, + drop = "", + sounds = default.node_sound_leaves_defaults(), +}) + +----------------------------------------------------------------------------------------------- +-- GIANT TREE FERN LEAVE END +----------------------------------------------------------------------------------------------- +minetest.register_node("ferns:tree_fern_leave_big_end", { + description = "Giant Tree Fern Leave End", + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + tiles = { "ferns_tree_fern_leave_big_end.png" }, + walkable = false, + node_box = { + type = "fixed", +-- {left, bottom, front, right, top, back } + fixed = {-1/2, -1/2, 1/2, 1/2, 33/64, 1/2}, + }, + selection_box = { + type = "fixed", + fixed = {-1/2, -1/2, 1/2, 1/2, 33/64, 1/2}, + }, + groups = { + snappy=3, + flammable=2, + attached_node=1, + not_in_creative_inventory=1 + }, + drop = "", + sounds = default.node_sound_leaves_defaults(), +}) + +----------------------------------------------------------------------------------------------- +-- GIANT TREE FERN TRUNK TOP +----------------------------------------------------------------------------------------------- +minetest.register_node("ferns:fern_trunk_big_top", { + description = "Giant Fern Trunk", + drawtype = "nodebox", + paramtype = "light", + tiles = { + "ferns_fern_trunk_big_top.png^ferns_tree_fern_leave_big_cross.png", + "ferns_fern_trunk_big_top.png^ferns_tree_fern_leave_big_cross.png", + "ferns_fern_trunk_big.png" + }, + node_box = { + type = "fixed", +-- {left, bottom, front, right, top, back } + fixed = { + {-1/2, 33/64, -1/2, 1/2, 33/64, 1/2}, + {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4}, + } + }, + selection_box = { + type = "fixed", + fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4}, + }, + groups = { + tree=1, + choppy=2, + oddly_breakable_by_hand=2, + flammable=3, + wood=1, + not_in_creative_inventory=1, + leafdecay=3 -- to support vines + }, + drop = "ferns:fern_trunk_big", + sounds = default.node_sound_wood_defaults(), +}) + +----------------------------------------------------------------------------------------------- +-- GIANT TREE FERN TRUNK +----------------------------------------------------------------------------------------------- +minetest.register_node("ferns:fern_trunk_big", { + description = "Giant Fern Trunk", + drawtype = "nodebox", + paramtype = "light", + tiles = { + "ferns_fern_trunk_big_top.png", + "ferns_fern_trunk_big_top.png", + "ferns_fern_trunk_big.png" + }, + node_box = { + type = "fixed", + fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4}, + }, + selection_box = { + type = "fixed", + fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4}, + }, + groups = {tree=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1}, + sounds = default.node_sound_wood_defaults(), + after_destruct = function(pos,oldnode) + local node = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z}) + if node.name == "ferns:fern_trunk_big" or node.name == "ferns:fern_trunk_big_top" then + minetest.dig_node({x=pos.x,y=pos.y+1,z=pos.z}) + minetest.add_item(pos,"ferns:fern_trunk_big") + end + end, +}) + +----------------------------------------------------------------------------------------------- +-- GIANT TREE FERN SAPLING +----------------------------------------------------------------------------------------------- +minetest.register_node("ferns:sapling_giant_tree_fern", { + description = "Giant Tree Fern Sapling", + drawtype = "plantlike", + paramtype = "light", + tiles = {"ferns_sapling_tree_fern_giant.png"}, + inventory_image = "ferns_sapling_tree_fern_giant.png", + walkable = false, + groups = {snappy=3,flammable=2,flora=1,attached_node=1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16}, + }, +}) + diff --git a/mods/vipworld/ferns/horsetail.lua b/mods/vipworld/ferns/horsetail.lua new file mode 100644 index 00000000..3d6fbf0a --- /dev/null +++ b/mods/vipworld/ferns/horsetail.lua @@ -0,0 +1,71 @@ +----------------------------------------------------------------------------------------------- +-- Archae Plantae - Horsetail 0.0.5 +----------------------------------------------------------------------------------------------- +-- by Mossmanikin +-- Contains code from: biome_lib +-- Looked at code from: default, flowers, trees +-- Dependencies: biome_lib +-- Supports: dryplants, stoneage, sumpf +----------------------------------------------------------------------------------------------- + + +-- support for i18n +----------------------------------------------------------------------------------------------- +-- HORSETAIL (EQUISETUM) +----------------------------------------------------------------------------------------------- + +local node_names = {} + +local function create_nodes() + local selection_boxes = { + { -0.15, -1/2, -0.15, 0.15, -1/16, 0.15 }, + { -0.15, -1/2, -0.15, 0.15, 1/16, 0.15 }, + { -0.15, -1/2, -0.15, 0.15, 4/16, 0.15 }, + { -0.15, -1/2, -0.15, 0.15, 7/16, 0.15 }, + } + + for i = 1, 4 do + local node_name = "ferns:horsetail_" .. string.format("%02d", i) + local node_img = "ferns_horsetail_" .. string.format("%02d", i) .. ".png" + local node_desc + local node_on_use = nil + local node_drop = "ferns:horsetail_04" + + if i == 1 then + node_desc = "Young Horsetail (Equisetum)" + node_on_use = minetest.item_eat(1) -- young ones edible https://en.wikipedia.org/wiki/Equisetum + node_drop = node_name + elseif i == 4 then + node_desc = "Horsetail (Equisetum)" + else + node_desc = "Horsetail (Equisetum)".." ".. string.format("%02d", i) + end + + node_names[i] = node_name + + minetest.register_node(node_name, { + description = node_desc, + drawtype = "plantlike", + paramtype = "light", + tiles = { node_img }, + inventory_image = node_img, + walkable = false, + buildable_to = true, + groups = {snappy=3,flammable=2,attached_node=1,horsetail=1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = selection_boxes[i], + }, + on_use = node_on_use, + drop = node_drop, + }) + end +end + +----------------------------------------------------------------------------------------------- +-- Init +----------------------------------------------------------------------------------------------- + +create_nodes() + diff --git a/mods/vipworld/ferns/init.lua b/mods/vipworld/ferns/init.lua new file mode 100644 index 00000000..d4287c0e --- /dev/null +++ b/mods/vipworld/ferns/init.lua @@ -0,0 +1,20 @@ +----------------------------------------------------------------------------------------------- +local title = "Ferns" -- former "Archae Plantae" +local version = "0.2.1" +local mname = "ferns" -- former "archaeplantae" +----------------------------------------------------------------------------------------------- +-- (by Mossmanikin) +----------------------------------------------------------------------------------------------- + +abstract_ferns = {} + +-- support for i18n + + dofile(minetest.get_modpath("ferns").."/fern.lua") + + dofile(minetest.get_modpath("ferns").."/horsetail.lua") + + dofile(minetest.get_modpath("ferns").."/treefern.lua") + + dofile(minetest.get_modpath("ferns").."/gianttreefern.lua") + diff --git a/mods/vipworld/ferns/settings.lua b/mods/vipworld/ferns/settings.lua new file mode 100644 index 00000000..0fcdfbb3 --- /dev/null +++ b/mods/vipworld/ferns/settings.lua @@ -0,0 +1,43 @@ +-- In case you don't wanna have errors: + +-- Only change what's behind a "=" (or "--"). +-- Don't use caps (behind a "="). + +-- If there's a "false" (behind a "=") you can change it to "true" (and the other way around). +-- Spelling is important. +-- If "true" or "false" is necessary as setting, everything(!) which is not spelled "true" will be read as if it were "false" (even "1", "True"...) + +-- If you wanna comment something (for example to remember the default value), you can do this by putting "--" in front of the comment. +-- You can put "--" at the end of a line with "=" in it, or at the beginning of an empty/new line (minetest will ignore what's behind it then). +-- But don't put "--" in front of a line with "=" in it (or else minetest will ignore the setting and you might get an error). + +-- If something is still unclear, don't hesitate to post your question @ https://forum.minetest.net/viewtopic.php?id=6921 + +abstract_ferns.config = {} + +-- Which plants should generate/spawn? +abstract_ferns.config.enable_lady_fern = true +abstract_ferns.config.enable_horsetails = true +abstract_ferns.config.enable_treefern = true +abstract_ferns.config.enable_giant_treefern = true + +-- Where should they generate/spawn? (if they generate/spawn) +-- +-- Lady-Fern +abstract_ferns.config.lady_ferns_near_tree = true +abstract_ferns.config.lady_ferns_near_rock = true +abstract_ferns.config.lady_ferns_near_ores = true -- if there's a bunch of ferns there's ores nearby, this one causes a huge fps drop +abstract_ferns.config.lady_ferns_in_groups = false -- this one is meant as a replacement of Ferns_near_Ores: ferns tend to generate in groups, less fps drop, no hint for nearby ores +-- +-- Horsetails +abstract_ferns.config.enable_horsetails_spawning = false -- horsetails will grow in already explored areas, over time, near water or gravel +abstract_ferns.config.enable_horsetails_on_grass = true -- on dirt with grass and swamp (sumpf mod) +abstract_ferns.config.enable_horsetails_on_stones = true -- on gravel, mossy cobble and silex (stoneage mod) +-- +-- Tree_Fern +abstract_ferns.config.enable_treeferns_in_jungle = true +abstract_ferns.config.enable_treeferns_in_oases = true -- for oases and tropical beaches +-- +-- Giant_Tree_Fern +abstract_ferns.config.enable_giant_treeferns_in_jungle = true +abstract_ferns.config.enable_giant_treeferns_in_oases = true -- for oases and tropical beaches diff --git a/mods/vipworld/ferns/textures/ferns_5.png b/mods/vipworld/ferns/textures/ferns_5.png new file mode 100644 index 00000000..7e406651 Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_5.png differ diff --git a/mods/vipworld/ferns/textures/ferns_6.png b/mods/vipworld/ferns/textures/ferns_6.png new file mode 100644 index 00000000..107bbf6e Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_6.png differ diff --git a/mods/vipworld/ferns/textures/ferns_7.png b/mods/vipworld/ferns/textures/ferns_7.png new file mode 100644 index 00000000..b1ac1f51 Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_7.png differ diff --git a/mods/vipworld/ferns/textures/ferns_8.png b/mods/vipworld/ferns/textures/ferns_8.png new file mode 100644 index 00000000..db5510ba Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_8.png differ diff --git a/mods/vipworld/ferns/textures/ferns_fern.png b/mods/vipworld/ferns/textures/ferns_fern.png new file mode 100644 index 00000000..7884e5a3 Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_fern.png differ diff --git a/mods/vipworld/ferns/textures/ferns_fern_big.png b/mods/vipworld/ferns/textures/ferns_fern_big.png new file mode 100644 index 00000000..42deb953 Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_fern_big.png differ diff --git a/mods/vipworld/ferns/textures/ferns_fern_mid.png b/mods/vipworld/ferns/textures/ferns_fern_mid.png new file mode 100644 index 00000000..32133088 Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_fern_mid.png differ diff --git a/mods/vipworld/ferns/textures/ferns_fern_tree.png b/mods/vipworld/ferns/textures/ferns_fern_tree.png new file mode 100644 index 00000000..8daeafd8 Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_fern_tree.png differ diff --git a/mods/vipworld/ferns/textures/ferns_fern_tree_giant.png b/mods/vipworld/ferns/textures/ferns_fern_tree_giant.png new file mode 100644 index 00000000..2e3adb72 Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_fern_tree_giant.png differ diff --git a/mods/vipworld/ferns/textures/ferns_fern_tree_inv.png b/mods/vipworld/ferns/textures/ferns_fern_tree_inv.png new file mode 100644 index 00000000..54176691 Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_fern_tree_inv.png differ diff --git a/mods/vipworld/ferns/textures/ferns_fern_tree_tl.png b/mods/vipworld/ferns/textures/ferns_fern_tree_tl.png new file mode 100644 index 00000000..16b6e3a0 Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_fern_tree_tl.png differ diff --git a/mods/vipworld/ferns/textures/ferns_fern_tree_tr.png b/mods/vipworld/ferns/textures/ferns_fern_tree_tr.png new file mode 100644 index 00000000..768430fc Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_fern_tree_tr.png differ diff --git a/mods/vipworld/ferns/textures/ferns_fern_trunk.png b/mods/vipworld/ferns/textures/ferns_fern_trunk.png new file mode 100644 index 00000000..a8e1bf6f Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_fern_trunk.png differ diff --git a/mods/vipworld/ferns/textures/ferns_fern_trunk_big.png b/mods/vipworld/ferns/textures/ferns_fern_trunk_big.png new file mode 100644 index 00000000..24ede0aa Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_fern_trunk_big.png differ diff --git a/mods/vipworld/ferns/textures/ferns_fern_trunk_big_top.png b/mods/vipworld/ferns/textures/ferns_fern_trunk_big_top.png new file mode 100644 index 00000000..3e3c829e Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_fern_trunk_big_top.png differ diff --git a/mods/vipworld/ferns/textures/ferns_fern_trunk_top.png b/mods/vipworld/ferns/textures/ferns_fern_trunk_top.png new file mode 100644 index 00000000..8b259cc4 Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_fern_trunk_top.png differ diff --git a/mods/vipworld/ferns/textures/ferns_ferntuber.png b/mods/vipworld/ferns/textures/ferns_ferntuber.png new file mode 100644 index 00000000..2d6785da Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_ferntuber.png differ diff --git a/mods/vipworld/ferns/textures/ferns_ferntuber_roasted.png b/mods/vipworld/ferns/textures/ferns_ferntuber_roasted.png new file mode 100644 index 00000000..f62a88d6 Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_ferntuber_roasted.png differ diff --git a/mods/vipworld/ferns/textures/ferns_fiddlehead.png b/mods/vipworld/ferns/textures/ferns_fiddlehead.png new file mode 100644 index 00000000..0925c780 Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_fiddlehead.png differ diff --git a/mods/vipworld/ferns/textures/ferns_fiddlehead_roasted.png b/mods/vipworld/ferns/textures/ferns_fiddlehead_roasted.png new file mode 100644 index 00000000..9f4943ce Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_fiddlehead_roasted.png differ diff --git a/mods/vipworld/ferns/textures/ferns_horsetail_01.png b/mods/vipworld/ferns/textures/ferns_horsetail_01.png new file mode 100644 index 00000000..60d3ca67 Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_horsetail_01.png differ diff --git a/mods/vipworld/ferns/textures/ferns_horsetail_02.png b/mods/vipworld/ferns/textures/ferns_horsetail_02.png new file mode 100644 index 00000000..3c7edf73 Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_horsetail_02.png differ diff --git a/mods/vipworld/ferns/textures/ferns_horsetail_03.png b/mods/vipworld/ferns/textures/ferns_horsetail_03.png new file mode 100644 index 00000000..5d28a468 Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_horsetail_03.png differ diff --git a/mods/vipworld/ferns/textures/ferns_horsetail_04.png b/mods/vipworld/ferns/textures/ferns_horsetail_04.png new file mode 100644 index 00000000..a8254ed5 Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_horsetail_04.png differ diff --git a/mods/vipworld/ferns/textures/ferns_sapling_tree_fern.png b/mods/vipworld/ferns/textures/ferns_sapling_tree_fern.png new file mode 100644 index 00000000..b459d481 Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_sapling_tree_fern.png differ diff --git a/mods/vipworld/ferns/textures/ferns_sapling_tree_fern_giant.png b/mods/vipworld/ferns/textures/ferns_sapling_tree_fern_giant.png new file mode 100644 index 00000000..e5560166 Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_sapling_tree_fern_giant.png differ diff --git a/mods/vipworld/ferns/textures/ferns_tree_fern_leave_big.png b/mods/vipworld/ferns/textures/ferns_tree_fern_leave_big.png new file mode 100644 index 00000000..09cc0012 Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_tree_fern_leave_big.png differ diff --git a/mods/vipworld/ferns/textures/ferns_tree_fern_leave_big_cross.png b/mods/vipworld/ferns/textures/ferns_tree_fern_leave_big_cross.png new file mode 100644 index 00000000..48f7e2cb Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_tree_fern_leave_big_cross.png differ diff --git a/mods/vipworld/ferns/textures/ferns_tree_fern_leave_big_end.png b/mods/vipworld/ferns/textures/ferns_tree_fern_leave_big_end.png new file mode 100644 index 00000000..d0064fee Binary files /dev/null and b/mods/vipworld/ferns/textures/ferns_tree_fern_leave_big_end.png differ diff --git a/mods/vipworld/ferns/textures/not_in_use/archaeplantae_horsetails.png b/mods/vipworld/ferns/textures/not_in_use/archaeplantae_horsetails.png new file mode 100644 index 00000000..6ba89c15 Binary files /dev/null and b/mods/vipworld/ferns/textures/not_in_use/archaeplantae_horsetails.png differ diff --git a/mods/vipworld/ferns/textures/not_in_use/big picture 3.png b/mods/vipworld/ferns/textures/not_in_use/big picture 3.png new file mode 100644 index 00000000..de344e63 Binary files /dev/null and b/mods/vipworld/ferns/textures/not_in_use/big picture 3.png differ diff --git a/mods/vipworld/ferns/textures/not_in_use/ferns_fern_big_left.png b/mods/vipworld/ferns/textures/not_in_use/ferns_fern_big_left.png new file mode 100644 index 00000000..0fdf5159 Binary files /dev/null and b/mods/vipworld/ferns/textures/not_in_use/ferns_fern_big_left.png differ diff --git a/mods/vipworld/ferns/textures/not_in_use/ferns_fern_big_right.png b/mods/vipworld/ferns/textures/not_in_use/ferns_fern_big_right.png new file mode 100644 index 00000000..d30def0b Binary files /dev/null and b/mods/vipworld/ferns/textures/not_in_use/ferns_fern_big_right.png differ diff --git a/mods/vipworld/ferns/textures/not_in_use/ferns_fern_mid_left.png b/mods/vipworld/ferns/textures/not_in_use/ferns_fern_mid_left.png new file mode 100644 index 00000000..d146df31 Binary files /dev/null and b/mods/vipworld/ferns/textures/not_in_use/ferns_fern_mid_left.png differ diff --git a/mods/vipworld/ferns/textures/not_in_use/ferns_fern_mid_right.png b/mods/vipworld/ferns/textures/not_in_use/ferns_fern_mid_right.png new file mode 100644 index 00000000..e10460a3 Binary files /dev/null and b/mods/vipworld/ferns/textures/not_in_use/ferns_fern_mid_right.png differ diff --git a/mods/vipworld/ferns/textures/not_in_use/ferns_fern_tree_bl.png b/mods/vipworld/ferns/textures/not_in_use/ferns_fern_tree_bl.png new file mode 100644 index 00000000..e2fdb67f Binary files /dev/null and b/mods/vipworld/ferns/textures/not_in_use/ferns_fern_tree_bl.png differ diff --git a/mods/vipworld/ferns/textures/not_in_use/ferns_fern_tree_br.png b/mods/vipworld/ferns/textures/not_in_use/ferns_fern_tree_br.png new file mode 100644 index 00000000..eb547e82 Binary files /dev/null and b/mods/vipworld/ferns/textures/not_in_use/ferns_fern_tree_br.png differ diff --git a/mods/vipworld/ferns/textures/not_in_use/ferns_fern_trunk_big_crown.png b/mods/vipworld/ferns/textures/not_in_use/ferns_fern_trunk_big_crown.png new file mode 100644 index 00000000..7a126712 Binary files /dev/null and b/mods/vipworld/ferns/textures/not_in_use/ferns_fern_trunk_big_crown.png differ diff --git a/mods/vipworld/ferns/textures/old/archaeplantae_fern_old4.png b/mods/vipworld/ferns/textures/old/archaeplantae_fern_old4.png new file mode 100644 index 00000000..a3d403c1 Binary files /dev/null and b/mods/vipworld/ferns/textures/old/archaeplantae_fern_old4.png differ diff --git a/mods/vipworld/ferns/textures/old/comb.png b/mods/vipworld/ferns/textures/old/comb.png new file mode 100644 index 00000000..ea1e19f5 Binary files /dev/null and b/mods/vipworld/ferns/textures/old/comb.png differ diff --git a/mods/vipworld/ferns/textures/old/ferns_5_old.png b/mods/vipworld/ferns/textures/old/ferns_5_old.png new file mode 100644 index 00000000..56762781 Binary files /dev/null and b/mods/vipworld/ferns/textures/old/ferns_5_old.png differ diff --git a/mods/vipworld/ferns/textures/old/ferns_6_old.png b/mods/vipworld/ferns/textures/old/ferns_6_old.png new file mode 100644 index 00000000..36d60403 Binary files /dev/null and b/mods/vipworld/ferns/textures/old/ferns_6_old.png differ diff --git a/mods/vipworld/ferns/textures/old/ferns_7_old.png b/mods/vipworld/ferns/textures/old/ferns_7_old.png new file mode 100644 index 00000000..8aabe61d Binary files /dev/null and b/mods/vipworld/ferns/textures/old/ferns_7_old.png differ diff --git a/mods/vipworld/ferns/textures/old/ferns_fern_big_old.png b/mods/vipworld/ferns/textures/old/ferns_fern_big_old.png new file mode 100644 index 00000000..d17ed117 Binary files /dev/null and b/mods/vipworld/ferns/textures/old/ferns_fern_big_old.png differ diff --git a/mods/vipworld/ferns/textures/old/ferns_fern_mid_old.png b/mods/vipworld/ferns/textures/old/ferns_fern_mid_old.png new file mode 100644 index 00000000..08513c2e Binary files /dev/null and b/mods/vipworld/ferns/textures/old/ferns_fern_mid_old.png differ diff --git a/mods/vipworld/ferns/textures/old/ferns_fern_tree_old.png b/mods/vipworld/ferns/textures/old/ferns_fern_tree_old.png new file mode 100644 index 00000000..45996728 Binary files /dev/null and b/mods/vipworld/ferns/textures/old/ferns_fern_tree_old.png differ diff --git a/mods/vipworld/ferns/textures/old/ferns_fern_trunk_big_old2.png b/mods/vipworld/ferns/textures/old/ferns_fern_trunk_big_old2.png new file mode 100644 index 00000000..a048ee0c Binary files /dev/null and b/mods/vipworld/ferns/textures/old/ferns_fern_trunk_big_old2.png differ diff --git a/mods/vipworld/ferns/textures/old/ferns_fern_trunk_big_top_old.png b/mods/vipworld/ferns/textures/old/ferns_fern_trunk_big_top_old.png new file mode 100644 index 00000000..d83151f3 Binary files /dev/null and b/mods/vipworld/ferns/textures/old/ferns_fern_trunk_big_top_old.png differ diff --git a/mods/vipworld/ferns/textures/old/ferns_fern_trunk_big_top_old2.png b/mods/vipworld/ferns/textures/old/ferns_fern_trunk_big_top_old2.png new file mode 100644 index 00000000..244ddfe6 Binary files /dev/null and b/mods/vipworld/ferns/textures/old/ferns_fern_trunk_big_top_old2.png differ diff --git a/mods/vipworld/ferns/textures/old/ferns_fern_trunk_top_old.png b/mods/vipworld/ferns/textures/old/ferns_fern_trunk_top_old.png new file mode 100644 index 00000000..872fdabb Binary files /dev/null and b/mods/vipworld/ferns/textures/old/ferns_fern_trunk_top_old.png differ diff --git a/mods/vipworld/ferns/textures/old/ferns_horsetail_01_old2.png b/mods/vipworld/ferns/textures/old/ferns_horsetail_01_old2.png new file mode 100644 index 00000000..7d557185 Binary files /dev/null and b/mods/vipworld/ferns/textures/old/ferns_horsetail_01_old2.png differ diff --git a/mods/vipworld/ferns/textures/old/ferns_horsetail_02_old2.png b/mods/vipworld/ferns/textures/old/ferns_horsetail_02_old2.png new file mode 100644 index 00000000..d0b55630 Binary files /dev/null and b/mods/vipworld/ferns/textures/old/ferns_horsetail_02_old2.png differ diff --git a/mods/vipworld/ferns/textures/old/ferns_horsetail_03_old2.png b/mods/vipworld/ferns/textures/old/ferns_horsetail_03_old2.png new file mode 100644 index 00000000..42cf76e0 Binary files /dev/null and b/mods/vipworld/ferns/textures/old/ferns_horsetail_03_old2.png differ diff --git a/mods/vipworld/ferns/textures/old/ferns_horsetail_04_old2.png b/mods/vipworld/ferns/textures/old/ferns_horsetail_04_old2.png new file mode 100644 index 00000000..600ebe76 Binary files /dev/null and b/mods/vipworld/ferns/textures/old/ferns_horsetail_04_old2.png differ diff --git a/mods/vipworld/ferns/textures/old/ferns_tree_fern_leave_big_cross_old.png b/mods/vipworld/ferns/textures/old/ferns_tree_fern_leave_big_cross_old.png new file mode 100644 index 00000000..00ec9d89 Binary files /dev/null and b/mods/vipworld/ferns/textures/old/ferns_tree_fern_leave_big_cross_old.png differ diff --git a/mods/vipworld/ferns/textures/old/ferns_tree_fern_leave_big_end_old.png b/mods/vipworld/ferns/textures/old/ferns_tree_fern_leave_big_end_old.png new file mode 100644 index 00000000..ce1a87d8 Binary files /dev/null and b/mods/vipworld/ferns/textures/old/ferns_tree_fern_leave_big_end_old.png differ diff --git a/mods/vipworld/ferns/textures/old/ferns_tree_fern_leave_big_old.png b/mods/vipworld/ferns/textures/old/ferns_tree_fern_leave_big_old.png new file mode 100644 index 00000000..b568383e Binary files /dev/null and b/mods/vipworld/ferns/textures/old/ferns_tree_fern_leave_big_old.png differ diff --git a/mods/vipworld/ferns/treefern.lua b/mods/vipworld/ferns/treefern.lua new file mode 100644 index 00000000..0ab957a7 --- /dev/null +++ b/mods/vipworld/ferns/treefern.lua @@ -0,0 +1,164 @@ +----------------------------------------------------------------------------------------------- +-- Ferns - Tree Fern 0.1.1 +----------------------------------------------------------------------------------------------- +-- by Mossmanikin +-- Contains code from: biome_lib +-- Looked at code from: default , trees +----------------------------------------------------------------------------------------------- + + +abstract_ferns.grow_tree_fern = function(pos) + + local pos_aux = {x = pos.x, y = pos.y + 1, z = pos.z} + local name = minetest.get_node(pos_aux).name + if name ~= "air" and name ~= "ferns:sapling_tree_fern" + and name ~= "default:junglegrass" then + return + end + + local size = math.random(1, 4) + math.random(1, 4) + if (size > 5) then + size = 10 - size + end + size = size + 1 + local crown = ({ "ferns:tree_fern_leaves", "ferns:tree_fern_leaves_02" })[math.random(1, 2)] + + local i = 1 + local brk = false + while (i < size) do + pos_aux.y = pos.y + i + name = minetest.get_node(pos_aux).name + if not (name == "air" or (i == 1 and name == "ferns:sapling_tree_fern")) then + brk = true + break + end + minetest.swap_node({x = pos.x, y = pos.y + i, z = pos.z}, { name = "ferns:fern_trunk" }) + i = i + 1 + end + if not brk then + minetest.swap_node({x = pos.x, y = pos.y + i - 1, z = pos.z}, { name = crown }) + end +end + +----------------------------------------------------------------------------------------------- +-- TREE FERN LEAVES +----------------------------------------------------------------------------------------------- + +-- TODO: Both of these nodes look the same? + +minetest.register_node("ferns:tree_fern_leaves", { + description = "Tree Fern Crown (Dicksonia)", + drawtype = "plantlike", + visual_scale = math.sqrt(8), + paramtype = "light", + paramtype2 = "facedir", + --tiles = {"[combine:32x32:0,0=top_left.png:0,16=bottom_left.png:16,0=top_right.png:16,16=bottom_right.png"}, + tiles = {"ferns_fern_tree.png"}, + inventory_image = "ferns_fern_tree_inv.png", + walkable = false, + groups = {snappy=3,flammable=2,attached_node=1}, + drop = { + max_items = 2, + items = { + { + -- occasionally, drop a second sapling instead of leaves + -- (extra saplings can also be obtained by replanting and + -- reharvesting leaves) + items = {"ferns:sapling_tree_fern"}, + rarity = 10, + }, + { + items = {"ferns:sapling_tree_fern"}, + }, + { + items = {"ferns:tree_fern_leaves"}, + } + } + }, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16}, + }, +}) +minetest.register_node("ferns:tree_fern_leaves_02", { + drawtype = "plantlike", + visual_scale = math.sqrt(8), + paramtype = "light", + tiles = {"ferns_fern_big.png"}, + walkable = false, + groups = {snappy=3,flammable=2,attached_node=1,not_in_creative_inventory=1}, + drop = { + max_items = 2, + items = { + { + -- occasionally, drop a second sapling instead of leaves + -- (extra saplings can also be obtained by replanting and + -- reharvesting leaves) + items = {"ferns:sapling_tree_fern"}, + rarity = 10, + }, + { + items = {"ferns:sapling_tree_fern"}, + }, + { + items = {"ferns:tree_fern_leaves"}, + } + } + }, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16}, + }, +}) +----------------------------------------------------------------------------------------------- +-- FERN TRUNK +----------------------------------------------------------------------------------------------- +minetest.register_node("ferns:fern_trunk", { + description = "Fern Trunk (Dicksonia)", + drawtype = "nodebox", + paramtype = "light", + tiles = { + "ferns_fern_trunk_top.png", + "ferns_fern_trunk_top.png", + "ferns_fern_trunk.png" + }, + node_box = { + type = "fixed", + fixed = {-1/8, -1/2, -1/8, 1/8, 1/2, 1/8}, + }, + selection_box = { + type = "fixed", + fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7}, + }, + groups = {tree=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1}, + sounds = default.node_sound_wood_defaults(), + after_destruct = function(pos,oldnode) + local node = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z}) + if node.name == "ferns:fern_trunk" then + minetest.dig_node({x=pos.x,y=pos.y+1,z=pos.z}) + minetest.add_item(pos,"ferns:fern_trunk") + end + end, +}) + +----------------------------------------------------------------------------------------------- +-- TREE FERN SAPLING +----------------------------------------------------------------------------------------------- +minetest.register_node("ferns:sapling_tree_fern", { + description = "Tree Fern Sapling (Dicksonia)", + drawtype = "plantlike", + paramtype = "light", + paramtype2 = "facedir", + tiles = {"ferns_sapling_tree_fern.png"}, + inventory_image = "ferns_sapling_tree_fern.png", + walkable = false, + groups = {snappy=3,flammable=2,flora=1,attached_node=1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16}, + }, +}) + diff --git a/mods/vipworld/flowers_plus/depends.txt b/mods/vipworld/flowers_plus/depends.txt new file mode 100644 index 00000000..9f9a7ec0 --- /dev/null +++ b/mods/vipworld/flowers_plus/depends.txt @@ -0,0 +1,2 @@ +farming? +flowers? diff --git a/mods/vipworld/flowers_plus/flowers-changelog.txt b/mods/vipworld/flowers_plus/flowers-changelog.txt new file mode 100644 index 00000000..fbe75185 --- /dev/null +++ b/mods/vipworld/flowers_plus/flowers-changelog.txt @@ -0,0 +1,24 @@ +Changelog +--------- + +2012-08-06: Tweaked selection boxes on all nodes. Tweaked seaweed to use +signlike instead of raillike drawtype, (still forced to only spawn flat as +usual). Adjusted light level limits to give it more time to grow. Created +this changelog file using github commit messages as the basis. Shrunk the +geranium flower down a bit to better match the others. + +2012-08-03: Tuned out the random-numbers-inside-ABM stuff. Uses the ABM's +chance setting instead. Should be approximately the same as before, but +hopefully using a tad less CPU. Minor tweak to ABM interval/growing delay. + +2012-08-01: Added blue geranium to the collection of flowers. + +2012-07-31: Disable debug by default. + +2012-07-30: many updates over the course of the day - first commit, removed +some redundant files, added wield/inventory image entries for each item, to +force the game to draw them properly (these shouldn't be needed, must be a +bug). Tweaked spawn code so that the radius check also includes the name of +the item being spawned as well as items in group:flower, that way all items can +have a radius test, and not just those in group:flower. Fiddled with the spawn +rates a bit. diff --git a/mods/vipworld/flowers_plus/init.lua b/mods/vipworld/flowers_plus/init.lua new file mode 100644 index 00000000..00108e31 --- /dev/null +++ b/mods/vipworld/flowers_plus/init.lua @@ -0,0 +1,154 @@ +-- This file supplies a few additional plants and some related crafts +-- for the plantlife modpack. Last revision: 2013-04-24 + +flowers_plus = {} + +local SPAWN_DELAY = 1000 +local SPAWN_CHANCE = 200 +local flowers_seed_diff = 329 +local lilies_max_count = 320 +local lilies_rarity = 33 +local seaweed_max_count = 320 +local seaweed_rarity = 33 +local sunflowers_max_count = 10 +local sunflowers_rarity = 25 + +-- register the various rotations of waterlilies + +local lilies_list = { + { nil , nil , 1 }, + { "225", "22.5" , 2 }, + { "45" , "45" , 3 }, + { "675", "67.5" , 4 }, + { "s1" , "small_1" , 5 }, + { "s2" , "small_2" , 6 }, + { "s3" , "small_3" , 7 }, + { "s4" , "small_4" , 8 }, +} + +for i in ipairs(lilies_list) do + local deg1 = "" + local deg2 = "" + local lily_groups = {snappy = 3,flammable=2,flower=1} + + if lilies_list[i][1] ~= nil then + deg1 = "_"..lilies_list[i][1] + deg2 = "_"..lilies_list[i][2] + lily_groups = { snappy = 3,flammable=2,flower=1, not_in_creative_inventory=1 } + end + + minetest.register_node(":flowers:waterlily"..deg1, { + description = "Waterlily", + drawtype = "nodebox", + tiles = { + "flowers_waterlily"..deg2..".png", + "flowers_waterlily"..deg2..".png^[transformFY" + }, + inventory_image = "flowers_waterlily.png", + wield_image = "flowers_waterlily.png", + sunlight_propagates = true, + paramtype = "light", + paramtype2 = "facedir", + walkable = false, + groups = lily_groups, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = { -0.4, -0.5, -0.4, 0.4, -0.45, 0.4 }, + }, + node_box = { + type = "fixed", + fixed = { -0.5, -0.49, -0.5, 0.5, -0.49, 0.5 }, + }, + buildable_to = true, + node_placement_prediction = "", + + liquids_pointable = true, + drop = "flowers:waterlily", + on_place = function(itemstack, placer, pointed_thing) + local keys=placer:get_player_control() + local pt = pointed_thing + + local place_pos = nil + local top_pos = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z} + local under_node = minetest.get_node(pt.under) + local above_node = minetest.get_node(pt.above) + local top_node = minetest.get_node(top_pos) + + if biome_lib:get_nodedef_field(under_node.name, "buildable_to") then + if under_node.name ~= "default:water_source" then + place_pos = pt.under + elseif top_node.name ~= "default:water_source" + and biome_lib:get_nodedef_field(top_node.name, "buildable_to") then + place_pos = top_pos + else + return + end + elseif biome_lib:get_nodedef_field(above_node.name, "buildable_to") then + place_pos = pt.above + end + + if place_pos and not minetest.is_protected(place_pos, placer:get_player_name()) then + + local nodename = "default:cobble" -- if this block appears, something went....wrong :-) + + if not keys["sneak"] then + local node = minetest.get_node(pt.under) + local waterlily = math.random(1,8) + if waterlily == 1 then + nodename = "flowers:waterlily" + elseif waterlily == 2 then + nodename = "flowers:waterlily_225" + elseif waterlily == 3 then + nodename = "flowers:waterlily_45" + elseif waterlily == 4 then + nodename = "flowers:waterlily_675" + elseif waterlily == 5 then + nodename = "flowers:waterlily_s1" + elseif waterlily == 6 then + nodename = "flowers:waterlily_s2" + elseif waterlily == 7 then + nodename = "flowers:waterlily_s3" + elseif waterlily == 8 then + nodename = "flowers:waterlily_s4" + end + minetest.swap_node(place_pos, {name = nodename, param2 = math.random(0,3) }) + else + local fdir = minetest.dir_to_facedir(placer:get_look_dir()) + minetest.swap_node(place_pos, {name = "flowers:waterlily", param2 = fdir}) + end + + if not biome_lib.expect_infinite_stacks then + itemstack:take_item() + end + return itemstack + end + end, + }) +end + +minetest.register_node(":flowers:sunflower", { + description = "Sunflower", + drawtype = "mesh", + paramtype = "light", + paramtype2 = "facedir", + inventory_image = "flowers_sunflower_inv.png", + mesh = "flowers_sunflower.obj", + tiles = { "flowers_sunflower.png" }, + walkable = false, + buildable_to = true, + is_ground_content = true, + groups = { dig_immediate=3, flora=1, flammable=3 }, + sounds = default.node_sound_leaves_defaults(), + selection_box = box, + collision_box = box, + drop = { + max_items = 1, + items = { + {items = {sunflower_drop}, rarity = 8}, + {items = {"flowers:sunflower"}}, + } + } +}) + + diff --git a/mods/vipworld/flowers_plus/models/flowers_sunflower.obj b/mods/vipworld/flowers_plus/models/flowers_sunflower.obj new file mode 100644 index 00000000..35beb8db --- /dev/null +++ b/mods/vipworld/flowers_plus/models/flowers_sunflower.obj @@ -0,0 +1,73 @@ +# Blender v2.70 (sub 0) OBJ File: 'sunflower.blend' +# www.blender.org +mtllib sunflower_sunflower.mtl +o Cube +v -0.015625 -0.500000 0.028125 +v -0.015625 -0.500000 -0.028125 +v 0.028125 -0.500000 -0.028125 +v 0.028125 -0.500000 0.028125 +v -0.015625 0.790890 0.028125 +v -0.015625 0.689140 -0.028125 +v 0.028125 0.689140 -0.028125 +v 0.028125 0.790890 0.028125 +v 0.250000 0.533494 -0.125000 +v -0.250000 0.533494 -0.125000 +v 0.250000 0.966506 0.125000 +v -0.250000 0.966506 0.125000 +v 0.267063 0.373606 -0.088749 +v 0.044375 0.303464 -0.141576 +v 0.239202 0.473737 0.108253 +v -0.008452 0.378817 0.108253 +v 0.017721 0.016639 -0.112053 +v -0.231280 0.110242 -0.115181 +v -0.030356 -0.036246 0.146223 +v -0.252831 0.028885 0.088910 +v 0.062500 0.641747 -0.057917 +v -0.106953 0.097386 -0.113617 +v -0.006318 -0.053008 0.024707 +v 0.118968 0.360674 0.006909 +v 0.116101 0.452031 0.108253 +v 0.017962 0.298392 -0.019504 +v 0.145794 0.358736 -0.115163 +v 0.240237 0.375544 0.033323 +v -0.224509 0.021356 -0.032606 +v -0.131273 0.023638 0.117567 +v -0.102951 0.016109 -0.003950 +vt 0.750000 0.875000 +vt 0.625000 0.875000 +vt 0.625000 0.750000 +vt 0.750000 0.750000 +vt 0.750000 1.000000 +vt 0.625000 1.000000 +vt 0.625000 0.500000 +vt 0.500000 0.500000 +vt 0.500000 1.000000 +vt 0.000100 0.500100 +vt 0.499900 0.500100 +vt 0.499900 0.999900 +vt 0.000100 0.999900 +vt 0.250000 0.250000 +vt 0.500000 0.250000 +vt 0.250000 0.500000 +vt 0.000000 0.250000 +vt 0.000000 0.000000 +vt 0.250000 0.000000 +vt 0.000000 0.500000 +vt 0.500000 0.000000 +usemtl Sunflower +s off +f 1/1 2/2 3/3 4/4 +f 5/5 8/6 7/2 6/1 +f 1/7 5/8 6/9 2/6 +f 2/7 6/6 7/9 3/8 +f 3/7 7/8 8/9 4/6 +f 5/7 1/8 4/9 8/6 +f 9/10 10/11 12/12 11/13 +f 24/14 26/15 16/8 25/16 +f 31/14 29/17 20/18 30/19 +f 17/8 22/16 31/14 23/15 +f 22/16 18/20 29/17 31/14 +f 27/19 14/21 26/15 24/14 +f 13/18 27/19 24/14 28/17 +f 23/15 31/14 30/19 19/21 +f 28/17 24/14 25/16 15/20 diff --git a/mods/vipworld/flowers_plus/textures/flowers_seaweed.png b/mods/vipworld/flowers_plus/textures/flowers_seaweed.png new file mode 100644 index 00000000..b5bd99c5 Binary files /dev/null and b/mods/vipworld/flowers_plus/textures/flowers_seaweed.png differ diff --git a/mods/vipworld/flowers_plus/textures/flowers_seaweedLight.png b/mods/vipworld/flowers_plus/textures/flowers_seaweedLight.png new file mode 100644 index 00000000..7595ebc9 Binary files /dev/null and b/mods/vipworld/flowers_plus/textures/flowers_seaweedLight.png differ diff --git a/mods/vipworld/flowers_plus/textures/flowers_seaweed_2.png b/mods/vipworld/flowers_plus/textures/flowers_seaweed_2.png new file mode 100644 index 00000000..0b24730c Binary files /dev/null and b/mods/vipworld/flowers_plus/textures/flowers_seaweed_2.png differ diff --git a/mods/vipworld/flowers_plus/textures/flowers_seaweed_3.png b/mods/vipworld/flowers_plus/textures/flowers_seaweed_3.png new file mode 100644 index 00000000..d9b7f439 Binary files /dev/null and b/mods/vipworld/flowers_plus/textures/flowers_seaweed_3.png differ diff --git a/mods/vipworld/flowers_plus/textures/flowers_seaweed_4.png b/mods/vipworld/flowers_plus/textures/flowers_seaweed_4.png new file mode 100644 index 00000000..887c1839 Binary files /dev/null and b/mods/vipworld/flowers_plus/textures/flowers_seaweed_4.png differ diff --git a/mods/vipworld/flowers_plus/textures/flowers_sunflower.png b/mods/vipworld/flowers_plus/textures/flowers_sunflower.png new file mode 100644 index 00000000..fb95cb4b Binary files /dev/null and b/mods/vipworld/flowers_plus/textures/flowers_sunflower.png differ diff --git a/mods/vipworld/flowers_plus/textures/flowers_sunflower_inv.png b/mods/vipworld/flowers_plus/textures/flowers_sunflower_inv.png new file mode 100644 index 00000000..c36ed010 Binary files /dev/null and b/mods/vipworld/flowers_plus/textures/flowers_sunflower_inv.png differ diff --git a/mods/vipworld/flowers_plus/textures/flowers_waterlily.png b/mods/vipworld/flowers_plus/textures/flowers_waterlily.png new file mode 100644 index 00000000..7b58bb2e Binary files /dev/null and b/mods/vipworld/flowers_plus/textures/flowers_waterlily.png differ diff --git a/mods/vipworld/flowers_plus/textures/flowers_waterlily_22.5.png b/mods/vipworld/flowers_plus/textures/flowers_waterlily_22.5.png new file mode 100644 index 00000000..73647aca Binary files /dev/null and b/mods/vipworld/flowers_plus/textures/flowers_waterlily_22.5.png differ diff --git a/mods/vipworld/flowers_plus/textures/flowers_waterlily_45.png b/mods/vipworld/flowers_plus/textures/flowers_waterlily_45.png new file mode 100644 index 00000000..7ca683ed Binary files /dev/null and b/mods/vipworld/flowers_plus/textures/flowers_waterlily_45.png differ diff --git a/mods/vipworld/flowers_plus/textures/flowers_waterlily_67.5.png b/mods/vipworld/flowers_plus/textures/flowers_waterlily_67.5.png new file mode 100644 index 00000000..234da606 Binary files /dev/null and b/mods/vipworld/flowers_plus/textures/flowers_waterlily_67.5.png differ diff --git a/mods/vipworld/flowers_plus/textures/flowers_waterlily_small_1.png b/mods/vipworld/flowers_plus/textures/flowers_waterlily_small_1.png new file mode 100644 index 00000000..a2d88cd8 Binary files /dev/null and b/mods/vipworld/flowers_plus/textures/flowers_waterlily_small_1.png differ diff --git a/mods/vipworld/flowers_plus/textures/flowers_waterlily_small_2.png b/mods/vipworld/flowers_plus/textures/flowers_waterlily_small_2.png new file mode 100644 index 00000000..7d2ba869 Binary files /dev/null and b/mods/vipworld/flowers_plus/textures/flowers_waterlily_small_2.png differ diff --git a/mods/vipworld/flowers_plus/textures/flowers_waterlily_small_3.png b/mods/vipworld/flowers_plus/textures/flowers_waterlily_small_3.png new file mode 100644 index 00000000..bfcab906 Binary files /dev/null and b/mods/vipworld/flowers_plus/textures/flowers_waterlily_small_3.png differ diff --git a/mods/vipworld/flowers_plus/textures/flowers_waterlily_small_4.png b/mods/vipworld/flowers_plus/textures/flowers_waterlily_small_4.png new file mode 100644 index 00000000..8119ea7c Binary files /dev/null and b/mods/vipworld/flowers_plus/textures/flowers_waterlily_small_4.png differ diff --git a/mods/vipworld/modpack.txt b/mods/vipworld/modpack.txt new file mode 100644 index 00000000..e69de29b diff --git a/mods/vipworld/molehills/depends.txt b/mods/vipworld/molehills/depends.txt new file mode 100644 index 00000000..4ad96d51 --- /dev/null +++ b/mods/vipworld/molehills/depends.txt @@ -0,0 +1 @@ +default diff --git a/mods/vipworld/molehills/init.lua b/mods/vipworld/molehills/init.lua new file mode 100644 index 00000000..2d9791cf --- /dev/null +++ b/mods/vipworld/molehills/init.lua @@ -0,0 +1,43 @@ +----------------------------------------------------------------------------------------------- +local title = "Mole Hills" +local version = "0.0.3" +local mname = "molehills" +----------------------------------------------------------------------------------------------- +-- Idea by Sokomine +-- Code & textures by Mossmanikin + +abstract_molehills = {} + +----------------------------------------------------------------------------------------------- +-- NoDe +----------------------------------------------------------------------------------------------- + +local mh_cbox = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, -0.125, 0.5} +} + +minetest.register_node("molehills:molehill",{ + drawtype = "mesh", + mesh = "molehill_molehill.obj", + description = "Mole Hill", + inventory_image = "molehills_side.png", + tiles = { "molehills_dirt.png" }, + paramtype = "light", + selection_box = mh_cbox, + collision_box = mh_cbox, + groups = {crumbly=3}, + sounds = default.node_sound_dirt_defaults(), +}) + +----------------------------------------------------------------------------------------------- +-- CRaFTiNG +----------------------------------------------------------------------------------------------- +minetest.register_craft({ -- molehills --> dirt + output = "default:dirt", + recipe = { + {"molehills:molehill","molehills:molehill"}, + {"molehills:molehill","molehills:molehill"}, + } +}) + diff --git a/mods/vipworld/molehills/models/molehill_molehill.obj b/mods/vipworld/molehills/models/molehill_molehill.obj new file mode 100644 index 00000000..5b9c084e --- /dev/null +++ b/mods/vipworld/molehills/models/molehill_molehill.obj @@ -0,0 +1,197 @@ +# Blender v2.73 (sub 0) OBJ File: 'anthill.blend' +# www.blender.org +o Cylinder_Cylinder.001 +v 0.099056 -0.499969 -0.498228 +v 0.038417 -0.200463 -0.141682 +v 0.255808 -0.499933 -0.402046 +v 0.095605 -0.174690 -0.147239 +v 0.423075 -0.499913 -0.296918 +v 0.102439 -0.169033 -0.075679 +v 0.444026 -0.499843 -0.095234 +v 0.125298 -0.217477 -0.063343 +v 0.468682 -0.499958 0.074790 +v 0.157655 -0.214352 0.001348 +v 0.396548 -0.500000 0.246048 +v 0.133778 -0.189245 0.108513 +v 0.280708 -0.500000 0.383197 +v 0.070517 -0.218946 0.104754 +v 0.089852 -0.499943 0.434316 +v 0.048523 -0.205247 0.128681 +v -0.093309 -0.499902 0.467111 +v -0.039037 -0.211895 0.149030 +v -0.272965 -0.499875 0.396496 +v -0.108297 -0.175918 0.104100 +v -0.388317 -0.499877 0.239075 +v -0.139068 -0.179051 0.073370 +v -0.437531 -0.499999 0.063918 +v -0.141812 -0.255882 0.005117 +v -0.458429 -0.499805 -0.104397 +v -0.189265 -0.217436 -0.065303 +v -0.385597 -0.499914 -0.288584 +v -0.112692 -0.207830 -0.096879 +v -0.248347 -0.499927 -0.384586 +v -0.083136 -0.202256 -0.170048 +v -0.095346 -0.499958 -0.514449 +v -0.023049 -0.216681 -0.204058 +v 0.071880 -0.343843 -0.343933 +v 0.189128 -0.354687 -0.277980 +v 0.311273 -0.378789 -0.248498 +v 0.296760 -0.346318 -0.056661 +v 0.332231 -0.342427 0.044933 +v 0.259921 -0.360316 0.147910 +v 0.213270 -0.362883 0.253745 +v 0.059007 -0.360067 0.351374 +v -0.068448 -0.357957 0.335642 +v -0.164888 -0.343166 0.232553 +v -0.269761 -0.352370 0.140734 +v -0.367168 -0.370891 0.062326 +v -0.294491 -0.324099 -0.079712 +v -0.276314 -0.352585 -0.236032 +v -0.206169 -0.372829 -0.314307 +v -0.065547 -0.371444 -0.355380 +v 0.000709 -0.156135 -0.047193 +vt 0.572002 0.826281 +vt 0.535907 0.620231 +vt 0.597591 0.625892 +vt 0.604963 0.552988 +vt 0.830215 0.729053 +vt 0.629619 0.540419 +vt 0.814561 0.533613 +vt 0.664520 0.474514 +vt 0.638766 0.365335 +vt 0.774826 0.325198 +vt 0.570532 0.369165 +vt 0.724507 0.217375 +vt 0.546808 0.344788 +vt 0.452364 0.324057 +vt 0.420641 0.133939 +vt 0.377660 0.369831 +vt 0.316619 0.238965 +vt 0.344469 0.401138 +vt 0.203502 0.332509 +vt 0.341509 0.470674 +vt 0.290325 0.542416 +vt 0.176827 0.557096 +vt 0.372919 0.574586 +vt 0.196433 0.716353 +vt 0.404798 0.649130 +vt 0.469609 0.683778 +vt 0.272092 0.796098 +vt 0.770390 0.885486 +vt 0.973405 0.572910 +vt 0.591386 0.033412 +vt 0.226599 0.867698 +vt 0.423770 0.837943 +vt 0.601314 0.983475 +vt 0.078559 0.769893 +vt 0.000000 0.582245 +vt 0.098436 0.412390 +vt 0.075624 0.232320 +vt 0.200045 0.071942 +vt 0.558116 0.117912 +vt 0.922195 0.225217 +vt 0.852821 0.430110 +vt 0.698467 0.759089 +vt 0.495235 0.523967 +vt 0.391629 1.000000 +vt 0.022541 0.410768 +vt 0.797247 0.085491 +vt 0.393825 0.000000 +vt 0.950807 0.778383 +vt 1.000000 0.399692 +g Cylinder_Cylinder.001_None +s 1 +f 33/1 2/2 4/3 +f 4/3 6/4 35/5 +f 35/5 6/4 8/6 +f 36/7 8/6 10/8 +f 10/8 12/9 38/10 +f 12/9 14/11 39/12 +f 39/12 14/11 16/13 +f 16/13 18/14 41/15 +f 18/14 20/16 42/17 +f 20/16 22/18 43/19 +f 43/19 22/18 24/20 +f 24/20 26/21 45/22 +f 26/21 28/23 46/24 +f 46/24 28/23 30/25 +f 32/26 2/2 33/1 +f 47/27 30/25 32/26 +f 3/28 7/29 15/30 +f 29/31 47/27 48/32 +f 48/32 33/1 1/33 +f 27/34 46/24 47/27 +f 25/35 45/22 46/24 +f 44/36 45/22 25/35 +f 21/37 43/19 44/36 +f 42/17 43/19 21/37 +f 41/15 42/17 19/38 +f 15/30 40/39 41/15 +f 39/12 40/39 15/30 +f 11/40 38/10 39/12 +f 37/41 38/10 11/40 +f 7/29 36/7 37/41 +f 35/5 36/7 7/29 +f 3/28 34/42 35/5 +f 33/1 34/42 3/28 +f 4/3 2/2 49/43 +f 2/2 32/26 49/43 +f 32/26 30/25 49/43 +f 30/25 28/23 49/43 +f 28/23 26/21 49/43 +f 26/21 24/20 49/43 +f 24/20 22/18 49/43 +f 22/18 20/16 49/43 +f 20/16 18/14 49/43 +f 18/14 16/13 49/43 +f 16/13 14/11 49/43 +f 14/11 12/9 49/43 +f 12/9 10/8 49/43 +f 10/8 8/6 49/43 +f 8/6 6/4 49/43 +f 6/4 4/3 49/43 +f 34/42 33/1 4/3 +f 34/42 4/3 35/5 +f 36/7 35/5 8/6 +f 37/41 36/7 10/8 +f 37/41 10/8 38/10 +f 38/10 12/9 39/12 +f 40/39 39/12 16/13 +f 40/39 16/13 41/15 +f 41/15 18/14 42/17 +f 42/17 20/16 43/19 +f 44/36 43/19 24/20 +f 44/36 24/20 45/22 +f 45/22 26/21 46/24 +f 47/27 46/24 30/25 +f 48/32 32/26 33/1 +f 48/32 47/27 32/26 +f 29/31 31/44 1/33 +f 23/45 27/34 29/31 +f 27/34 23/45 25/35 +f 15/30 19/38 21/37 +f 11/40 13/46 15/30 +f 15/30 17/47 19/38 +f 3/28 23/45 29/31 +f 29/31 1/33 3/28 +f 3/28 5/48 7/29 +f 7/29 9/49 11/40 +f 23/45 15/30 21/37 +f 15/30 23/45 3/28 +f 15/30 7/29 11/40 +f 31/44 29/31 48/32 +f 31/44 48/32 1/33 +f 29/31 27/34 47/27 +f 27/34 25/35 46/24 +f 23/45 44/36 25/35 +f 23/45 21/37 44/36 +f 19/38 42/17 21/37 +f 17/47 41/15 19/38 +f 17/47 15/30 41/15 +f 13/46 39/12 15/30 +f 13/46 11/40 39/12 +f 9/49 37/41 11/40 +f 9/49 7/29 37/41 +f 5/48 35/5 7/29 +f 5/48 3/28 35/5 +f 1/33 33/1 3/28 diff --git a/mods/vipworld/molehills/molehills_settings.txt b/mods/vipworld/molehills/molehills_settings.txt new file mode 100644 index 00000000..1afc592d --- /dev/null +++ b/mods/vipworld/molehills/molehills_settings.txt @@ -0,0 +1,6 @@ +-- Settings for generation of stuff (at map-generation time) + +Molehills_Max_Count = 320 -- absolute maximum number in an area of 80x80x80 nodes + +Molehills_Rarity = 95 -- larger values make molehills more rare (100 means chance of 0 %) + diff --git a/mods/vipworld/molehills/textures/molehills_dirt.png b/mods/vipworld/molehills/textures/molehills_dirt.png new file mode 100644 index 00000000..79ffa855 Binary files /dev/null and b/mods/vipworld/molehills/textures/molehills_dirt.png differ diff --git a/mods/vipworld/molehills/textures/molehills_side.png b/mods/vipworld/molehills/textures/molehills_side.png new file mode 100644 index 00000000..554bbecf Binary files /dev/null and b/mods/vipworld/molehills/textures/molehills_side.png differ diff --git a/mods/vipworld/molehills/textures/old & unused/molehill_side.png b/mods/vipworld/molehills/textures/old & unused/molehill_side.png new file mode 100644 index 00000000..5f0f9768 Binary files /dev/null and b/mods/vipworld/molehills/textures/old & unused/molehill_side.png differ diff --git a/mods/vipworld/molehills/textures/old & unused/molehill_top.png b/mods/vipworld/molehills/textures/old & unused/molehill_top.png new file mode 100644 index 00000000..55cc5413 Binary files /dev/null and b/mods/vipworld/molehills/textures/old & unused/molehill_top.png differ diff --git a/mods/vipworld/moretrees/.luacheckrc b/mods/vipworld/moretrees/.luacheckrc new file mode 100644 index 00000000..2933f309 --- /dev/null +++ b/mods/vipworld/moretrees/.luacheckrc @@ -0,0 +1,17 @@ +unused_args = false +allow_defined_top = true + +read_globals = { + "DIR_DELIM", + "minetest", "core", + "dump", + "vector", "nodeupdate", + "VoxelManip", "VoxelArea", + "PseudoRandom", "ItemStack", + "intllib", + "default", + table = { fields = { "copy", "getn" } }, + "biome_lib", + "stairs", "stairsplus", +} + diff --git a/mods/vipworld/moretrees/LICENSE b/mods/vipworld/moretrees/LICENSE new file mode 100644 index 00000000..08cda455 --- /dev/null +++ b/mods/vipworld/moretrees/LICENSE @@ -0,0 +1,620 @@ +Minetest mod moretrees +====================== + +All source code: + © 2013, Vanessa Ezekowitz +Date & cocos palm code (date_palm.lua, cocos_palm.lua) + © 2016, Rogier +All date & date palm textures, date-based food, cocos flower & green coconuts, +and all poplar textures: + © 2016, Rogier + - Three of the date palm textures are modifications of existing moretrees textures + - The green coconuts are a modification of the brown coconut + - The date cake batter is a modification of the acorn muffin batter +All other sapling textures (textures/*_sapling.png): + © 2013, Tim Huppertz +All other textures: + © 2013, Vanessa Ezekowitz + +############################################################################### + +License for all code: LGPL 3.0 +License for all media and all other assets: CC-by-SA 4.0 + +############################################################################### + + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. + +############################################################################### + +Attribution-ShareAlike 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-ShareAlike 4.0 International Public +License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-ShareAlike 4.0 International Public License ("Public +License"). To the extent this Public License may be interpreted as a +contract, You are granted the Licensed Rights in consideration of Your +acceptance of these terms and conditions, and the Licensor grants You +such rights in consideration of benefits the Licensor receives from +making the Licensed Material available under these terms and +conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. BY-SA Compatible License means a license listed at + creativecommons.org/compatiblelicenses, approved by Creative + Commons as essentially the equivalent of this Public License. + + d. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + e. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + f. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + g. License Elements means the license attributes listed in the name + of a Creative Commons Public License. The License Elements of this + Public License are Attribution and ShareAlike. + + h. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + i. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + j. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + k. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + l. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + m. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. Additional offer from the Licensor -- Adapted Material. + Every recipient of Adapted Material from You + automatically receives an offer from the Licensor to + exercise the Licensed Rights in the Adapted Material + under the conditions of the Adapter's License You apply. + + c. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + b. ShareAlike. + + In addition to the conditions in Section 3(a), if You Share + Adapted Material You produce, the following conditions also apply. + + 1. The Adapter's License You apply must be a Creative Commons + license with the same License Elements, this version or + later, or a BY-SA Compatible License. + + 2. You must include the text of, or the URI or hyperlink to, the + Adapter's License You apply. You may satisfy this condition + in any reasonable manner based on the medium, means, and + context in which You Share Adapted Material. + + 3. You may not offer or impose any additional or different terms + or conditions on, or apply any Effective Technological + Measures to, Adapted Material that restrict exercise of the + rights granted under the Adapter's License You apply. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material, + + including for purposes of Section 3(b); and + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/mods/vipworld/moretrees/README.md b/mods/vipworld/moretrees/README.md new file mode 100644 index 00000000..905cefa4 --- /dev/null +++ b/mods/vipworld/moretrees/README.md @@ -0,0 +1,11 @@ +More trees! + +This mod adds a whole bunch of new types of trees to the game + +Much of the code here came from cisoun's conifers mod and bas080's +jungle trees mod, and big contributions by RealBadAngel. + +Brought together into one mod and made L-systems compatible by Vanessa +Ezekowitz. + +Dependencies: biome_lib and default diff --git a/mods/vipworld/moretrees/cocos_palm.lua b/mods/vipworld/moretrees/cocos_palm.lua new file mode 100644 index 00000000..09a29518 --- /dev/null +++ b/mods/vipworld/moretrees/cocos_palm.lua @@ -0,0 +1,87 @@ +local S = moretrees.intllib + +-- © 2016, Rogier + +-- Some constants + +local coconut_drop_ichance = 8 + +-- Make the cocos palm fruit trunk a real trunk (it is generated as a fruit) +local trunk = minetest.registered_nodes["moretrees:palm_trunk"] +local ftrunk = {} +local gftrunk = {} +for k,v in pairs(trunk) do + ftrunk[k] = v + gftrunk[k] = v +end +ftrunk.tiles = {} +gftrunk.tiles = {} +for k,v in pairs(trunk.tiles) do + ftrunk.tiles[k] = v + gftrunk.tiles[k] = v +end +ftrunk.drop = "moretrees:palm_trunk" +gftrunk.drop = "moretrees:palm_trunk" +ftrunk.after_destruct = function(pos, oldnode) + local coconuts = minetest.find_nodes_in_area({x=pos.x-1, y=pos.y, z=pos.z-1}, {x=pos.x+1, y=pos.y, z=pos.z+1}, {"group:moretrees_coconut"}) + for _,coconutpos in pairs(coconuts) do + -- minetest.dig_node(coconutpos) does not cause nearby coconuts to be dropped :-( ... + --minetest.dig_node(coconutpos) + local items = minetest.get_node_drops(minetest.get_node(coconutpos).name) + minetest.swap_node(coconutpos, biome_lib.air) + for _, itemname in pairs(items) do + minetest.add_item(coconutpos, itemname) + end + end +end +-- Make the different trunk types distinguishable (but barely) +ftrunk.tiles[1] = "moretrees_palm_trunk_top.png^[transformR90" +gftrunk.tiles[1] = "moretrees_palm_trunk_top.png^[transformR180" +gftrunk.description = gftrunk.description.." (gen)" +minetest.register_node("moretrees:palm_fruit_trunk", ftrunk) +minetest.register_node("moretrees:palm_fruit_trunk_gen", gftrunk) + +for _,suffix in ipairs({"_0", "_1", "_2", "_3", ""}) do + local name + if suffix == "_0" then + name = S("Coconut Flower") + else + name = S("Coconut") + end + local drop = "" + local coco_group = 1 + local tile = "moretrees_coconut"..suffix..".png" + local timerfn = coconut_growfn + local constructfn = coconut_starttimer + if suffix == "_3" then + drop = "moretrees:coconut" + tile = "moretrees_coconut.png" + elseif suffix == "" then + drop = nil + coco_group = nil + timerfn = nil + constructfn = nil + end + local coconutdef = { + description = name, + tiles = {tile}, + drawtype = "plantlike", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + groups = { fleshy=3, dig_immediate=3, flammable=2, moretrees_coconut=coco_group }, + inventory_image = tile.."^[transformR180", + wield_image = tile.."^[transformR180", + sounds = default.node_sound_defaults(), + drop = drop, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.3, -0.3, 0.3, 0.3, 0.3} + }, + on_timer = timerfn, + on_construct = constructfn, + + } + minetest.register_node("moretrees:coconut"..suffix, coconutdef) +end + diff --git a/mods/vipworld/moretrees/date_palm.lua b/mods/vipworld/moretrees/date_palm.lua new file mode 100644 index 00000000..a03096e6 --- /dev/null +++ b/mods/vipworld/moretrees/date_palm.lua @@ -0,0 +1,116 @@ +-- Date palms. +-- +-- Date palms grow in hot and dry desert, but they require water. This makes them +-- a bit harder to find. If found in the middle of the desert, their presence +-- indicates a water source below the surface. +-- +-- As an additional feature (which can be disabled), dates automatically regrow after +-- harvesting (provided a male tree is sufficiently nearby). +-- If regrowing is enabled, then ripe dates will not hang forever. Most will disappear +-- (e.g. eaten by birds, ...), and a small fraction will drop as items. + +-- © 2016, Rogier + +local S = moretrees.intllib + +-- Some constants + +local dates_drop_ichance = 4 +local stems_drop_ichance = 4 +local flowers_wither_ichance = 3 + +-- Make the date palm fruit trunk a real trunk (it is generated as a fruit) +local trunk = minetest.registered_nodes["moretrees:date_palm_trunk"] +local ftrunk = {} +local fftrunk = {} +local mftrunk = {} +for k,v in pairs(trunk) do + ftrunk[k] = v +end +ftrunk.tiles = {} +for k,v in pairs(trunk.tiles) do + ftrunk.tiles[k] = v +end +ftrunk.drop = "moretrees:date_palm_trunk" +ftrunk.after_destruct = function(pos, oldnode) + local dates = minetest.find_nodes_in_area({x=pos.x-2, y=pos.y, z=pos.z-2}, {x=pos.x+2, y=pos.y, z=pos.z+2}, {"group:moretrees_dates"}) + for _,datespos in pairs(dates) do + -- minetest.dig_node(datespos) does not cause nearby dates to be dropped :-( ... + local items = minetest.get_node_drops(minetest.get_node(datespos).name) + minetest.swap_node(datespos, biome_lib.air) + for _, itemname in pairs(items) do + minetest.add_item(datespos, itemname) + end + end +end +for k,v in pairs(ftrunk) do + mftrunk[k] = v + fftrunk[k] = v +end +fftrunk.tiles = {} +mftrunk.tiles = {} +for k,v in pairs(trunk.tiles) do + fftrunk.tiles[k] = v + mftrunk.tiles[k] = v +end +-- Make the different types of trunk distinguishable (but not too easily) +ftrunk.tiles[1] = "moretrees_date_palm_trunk_top.png^[transformR180" +ftrunk.description = ftrunk.description.." (gen)" +fftrunk.tiles[1] = "moretrees_date_palm_trunk_top.png^[transformR90" +mftrunk.tiles[1] = "moretrees_date_palm_trunk_top.png^[transformR-90" +minetest.register_node("moretrees:date_palm_fruit_trunk", ftrunk) +minetest.register_node("moretrees:date_palm_ffruit_trunk", fftrunk) +minetest.register_node("moretrees:date_palm_mfruit_trunk", mftrunk) + +local dates_drop = { + items = { + {items = { "moretrees:date" }}, + {items = { "moretrees:date" }}, + {items = { "moretrees:date" }}, + {items = { "moretrees:date" }}, + {items = { "moretrees:date" }, rarity = 2 }, + {items = { "moretrees:date" }, rarity = 2 }, + {items = { "moretrees:date" }, rarity = 2 }, + {items = { "moretrees:date" }, rarity = 2 }, + {items = { "moretrees:date" }, rarity = 5 }, + {items = { "moretrees:date" }, rarity = 5 }, + {items = { "moretrees:date" }, rarity = 5 }, + {items = { "moretrees:date" }, rarity = 5 }, + {items = { "moretrees:date" }, rarity = 20 }, + {items = { "moretrees:date" }, rarity = 20 }, + {items = { "moretrees:date" }, rarity = 20 }, + {items = { "moretrees:date" }, rarity = 20 }, + } +} + +for _,suffix in ipairs({"f0", "f1", "f2", "f3", "f4", "m0", "fn", "n"}) do + local name + if suffix == "f0" or suffix == "m0" then + name = S("Date Flowers") + elseif suffix == "n" or suffix == "fn" then + name = S("Date Stem") + else + name = S("Dates") + end + local dropfn = suffix == "f4" and dates_drop or "" + local datedef = { + description = name, + tiles = {"moretrees_dates_"..suffix..".png"}, + visual_scale = 2, + drawtype = "plantlike", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + groups = { fleshy=3, dig_immediate=3, flammable=2, moretrees_dates=1 }, + inventory_image = "moretrees_dates_"..suffix..".png^[transformR0", + wield_image = "moretrees_dates_"..suffix..".png^[transformR90", + sounds = default.node_sound_defaults(), + drop = dropfn, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.3, -0.3, 0.3, 3.5, 0.3} + }, + } + minetest.register_node("moretrees:dates_"..suffix, datedef) +end + diff --git a/mods/vipworld/moretrees/depends.txt b/mods/vipworld/moretrees/depends.txt new file mode 100644 index 00000000..71fa1034 --- /dev/null +++ b/mods/vipworld/moretrees/depends.txt @@ -0,0 +1,6 @@ +default +stairs? +moreblocks? +intllib? +farming? + diff --git a/mods/vipworld/moretrees/description.txt b/mods/vipworld/moretrees/description.txt new file mode 100644 index 00000000..7c867233 --- /dev/null +++ b/mods/vipworld/moretrees/description.txt @@ -0,0 +1 @@ +This mod adds a whole bunch of new types of trees to the game diff --git a/mods/vipworld/moretrees/init.lua b/mods/vipworld/moretrees/init.lua new file mode 100644 index 00000000..c1ede6e4 --- /dev/null +++ b/mods/vipworld/moretrees/init.lua @@ -0,0 +1,69 @@ +-- More trees! 2013-04-07 +-- +-- This mod adds more types of trees to the game +-- +-- Some of the node definitions and textures came from cisoun's conifers mod +-- and bas080's jungle trees mod. +-- +-- Brought together into one mod and made L-systems compatible by Vanessa +-- Ezekowitz. +-- +-- Firs and Jungle tree axioms/rules by Vanessa Dannenberg, with the +-- latter having been tweaked by RealBadAngel, most other axioms/rules written +-- by RealBadAngel. +-- + +moretrees = {} + +-- Read the default config file (and if necessary, copy it to the world folder). + +local worldpath=minetest.get_worldpath() +local modpath=minetest.get_modpath("moretrees") + +-- Boilerplate to support localized strings if intllib mod is installed. +local S +if minetest.get_modpath("intllib") then + S = intllib.Getter() +else + S = function(s) return s end +end +moretrees.intllib = S + +-- clone node + +function moretrees.clone_node(name) + local node2 = {} + local node = minetest.registered_nodes[name] + for k,v in pairs(node) do + node2[k]=v + end + return node2 +end + +-- infinite stacks checking + +if minetest.get_modpath("unified_inventory") or not + minetest.settings:get_bool("creative_mode") then + moretrees.expect_infinite_stacks = false +else + moretrees.expect_infinite_stacks = true +end + +-- tables, load other files + +moretrees.cutting_tools = { + "default:axe_bronze", + "default:axe_diamond", + "default:axe_mese", + "default:axe_steel", + "glooptest:axe_alatro", + "glooptest:axe_arol", + "moreores:axe_mithril", + "moreores:axe_silver", + "titanium:axe", +} + +dofile(modpath.."/node_defs.lua") +dofile(modpath.."/date_palm.lua") +dofile(modpath.."/cocos_palm.lua") + diff --git a/mods/vipworld/moretrees/locale/de.txt b/mods/vipworld/moretrees/locale/de.txt new file mode 100644 index 00000000..cab8d6f4 --- /dev/null +++ b/mods/vipworld/moretrees/locale/de.txt @@ -0,0 +1,73 @@ +# Translation by Xanthin + +### crafts.lua ### +Coconut Milk = Kokosnussmilch +Raw Coconut = Kokosnussfleisch +Acorn Muffin batter = Eichelmuffinteig +Acorn Muffin = Eichelmuffin +Roasted Spruce Cone Nuts = Geroestete Fichtenzapfen +Roasted Pine Cone Nuts = Geroestete Kiefernzapfen +Roasted Fir Cone Nuts = Geroestete Tannenzapfen + +### node_defs.lua ### +Beech Tree Trunk = Buchenstamm +Apple Tree Trunk = Apfelbaumstamm +Oak Tree Trunk = Eichenstamm +Giant Sequoia Trunk = Riesenmammutbaumstamm +Birch Tree Trunk = Birkenstamm +Palm Tree Trunk = Palmenstamm +Spruce Tree Trunk = Fichtenstamm +Pine Tree Trunk = Kiefernstamm +Willow Tree Trunk = Weidenstamm +Rubber Tree Trunk = Gummibaumstamm +Jungle Tree Trunk = Tropenbaumstamm +Douglas Fir Trunk = Douglasienstamm +Beech Tree Planks = Buchebretter +Apple Tree Planks = Apfelbaumbretter +Oak Tree Planks = Eichenbretter +Giant Sequoia Planks = Riesenmammutbaumbretter +Birch Tree Planks = Birkebretter +Palm Tree Planks = Palmenbretter +Spruce Tree Planks = Fichtenbretter +Pine Tree Planks = Kiefernbretter +Willow Tree Planks = Weidenbretter +Rubber Tree Planks = Gummibaumbretter +Jungle Tree Planks = Tropenholzbretter +Douglas Fir Planks = Douglasienbretter +Beech Tree Sapling = Buchesetzling +Apple Tree Sapling = Apfelbaumsetzling +Oak Tree Sapling = Eichensetzling +Giant Sequoia Sapling = Riesenmammutbaumsetzling +Birch Tree Sapling = Birkensetzling +Palm Tree Sapling = Palmensetzling +Spruce Tree Sapling = Fichtensetzling +Pine Tree Sapling = Kiefernsetzling +Willow Tree Sapling = Weidensetzling +Rubber Tree Sapling = Gummibaumsetzling +Jungle Tree Sapling = Tropenbaumsetzling +Douglas Fir Sapling = Douglasiensetzling +Beech Tree Leaves = Buchenlaub +Apple Tree Leaves = Apfelbaumlaub +Oak Tree Leaves = Eichenlaub +Giant Sequoia Leaves = Riesenmammutbaumlaub +Birch Tree Leaves = Birkenlaub +Palm Tree Leaves = Palmenlaub +Spruce Tree Leaves = Fichtennadeln +Pine Tree Leaves = Kiefernnadeln +Willow Tree Leaves = Weidenlaub +Rubber Tree Leaves = Gummibaumlaub +Jungle Tree Leaves = Tropenbaumlaub +Douglas Fir Leaves = Douglasiennadeln + +Acorn = Eichel +Coconut = Kokosnuss +Spruce Cone = Fichtenzapfen +Pine Cone = Kiefernzapfen +Fir Cone = Tannenzapfen +Jungle Sapling = Tropenbaumsetzling +Jungle Tree Leaves (Yellow) = Tropenbaumlaub (gelb) +Jungle Tree Leaves (Red) = Tropenbaumlaub (rot) +Douglas Fir Leaves (Bright) = Douglasiennadeln (breit) +Rubber Tree Trunk (Empty) = Gummibaumstamm (leer) + +[Moretrees] Loaded (2013-02-11) = [Moretrees] geladen (2013-02-11) diff --git a/mods/vipworld/moretrees/locale/es.txt b/mods/vipworld/moretrees/locale/es.txt new file mode 100644 index 00000000..510fa3f2 --- /dev/null +++ b/mods/vipworld/moretrees/locale/es.txt @@ -0,0 +1,100 @@ +# Traducido por Carlos Barraza + +### crafts.lua ### +Coconut Milk = Leche de Coco +Raw Coconut = Coco crudo +Acorn Muffin batter = Masa de Mollete de Bellota +Acorn Muffin = Mollete de Bellota +Roasted Spruce Cone Nuts = Cono de Picea Tostado +Roasted Pine Cone Nuts = Cono de Pino Tostado +Roasted Fir Cone Nuts = Cono de Abeto Tostado +Roasted Cedar Cone Nuts = Coco de Alamo Tostado +Date = Datilera +Date & nut snack = Datilera y Nueces +Date-nut cake batter = Pasta de torta de Datilera +Date-nut cake = Pastel de Datilera +Date-nut energy bar = Barra energetica de Datilera + +### date_palm.lua ### +Dates = Datilera +Date Stem = Tallo de Datilera +Date Flowers = Flores de Datilera + +### node_defs.lua ### +Beech Tree Trunk = Tronco de Arbol de Haya +Apple Tree Trunk = Tronco de Arbol de Manzana +Oak Tree Trunk = Tronco de Arbol de Roble +Giant Sequoia Trunk = Tronco de Sequoia Gigante +Birch Tree Trunk = Tronco de Arbol de Abedul +Palm Tree Trunk = Tronco de Palmera +Spruce Tree Trunk = Tronco de Arbol de Abeto +Willow Tree Trunk = Tronco de Arbol de Sauce +Rubber Tree Trunk = Tronco de Arbol de Arbol de Goma +Jungle Tree = Tronco de Arbol de Arbol de la Selva +Douglas Fir Trunk = Tronco de Arbol de Abeto de Douglas +Cedar Tree Trunk = Tronco de Arbol de Cedro +Date Palm Tree Trunk = Tronco de Palmera Datilera +Acacia Tree Trunk = Tronco de Arbol de Acacia +Poplar Tree Trunk = Tronco de Arbol de Alamo + +Beech Tree Planks = Madera de Arbol de Haya +Apple Tree Planks = Madera de Arbol de Manzana +Oak Tree Planks = Madera de Arbol de Roble +Giant Sequoia Planks = Madera de Sequoia Gigante +Birch Tree Planks = Madera de Arbol de Abedul +Palm Tree Planks = Madera de Palmera +Spruce Tree Planks = Madera de Arbol de Abeto +Willow Tree Planks = Madera de Arbol de Sauce +Rubber Tree Planks = Madera de Arbol de Arbol de Goma +Jungle Planks = Madera de Arbol de Arbol de la Selva +Douglas Fir Planks = Madera de Arbol de Abeto de Douglas +Cedar Tree Planks = Madera de Arbol de Cedro +Date Palm Tree Planks = Madera de Palmera Datilera +Acacia Tree Planks = Madera de Arbol de Acacia +Poplar Tree Planks = Madera de Arbol de Alamo + +Beech Tree Sapling = Retoño de Arbol de Haya +Apple Tree Sapling = Retoño de Arbol de Manzana +Oak Tree Sapling = Retoño de Arbol de Roble +Giant Sequoia Sapling = Retoño de Arbol de Sequoia Gigante +Birch Tree Sapling = Retoño de Arbol de Abedul +Palm Tree Sapling = Retoño de Palmera +Spruce Tree Sapling = Retoño de Arbol de Abeto +Willow Tree Sapling = Retoño de Arbol de Sauce +Rubber Tree Sapling = Retoño de Arbol de Arbol de Goma +Jungle Sapling = Retoño de Arbol de Arbol de la Selva +Douglas Fir Sapling = Retoño de Arbol de Abeto de Douglas +Cedar Tree Sapling = Retoño de Arbol de Cedro +Date Palm Tree Tree Sapling = Retoño de Palmera Datilera +Acacia Tree Sapling = Retoño de Arbol de Acacia +Poplar Tree Sapling = Retoño de Arbol de Alamo + +Beech Tree Leaves = Hojas de Arbol de Haya +Apple Tree Leaves = Hojas de Arbol de Manzana +Oak Tree Leaves = Hojas de Arbol de Roble +Giant Sequoia Leaves = Hojas de Sequoia Gigante +Birch Tree Leaves = Hojas de Arbol de Abedul +Palm Tree Leaves = Hojas de Palmera +Spruce Tree Leaves = Hojas de Arbol de Abeto +Willow Tree Leaves = Hojas de Arbol de Sauce +Rubber Tree Leaves = Hojas de Arbol de Arbol de Goma +Jungle Leaves = Hojas de Arbol de Arbol de la Selva +Douglas Fir Leaves = Hojas de Arbol de Abeto de Douglas +Cedar Tree Leaves = Hojas de Arbol de Cedro +Date Palm Tree Tree Leaves = Hojas de Palmera Datilera +Acacia Tree Leaves = Hojas de Arbol de Acacia +Poplar Tree Leaves = Hojas de Arbol de Alamo + +Acorn = Bellota +Coconut = Coco +Spruce Cone = Coco de Picea +Pine Cone = Coco de Pino +Fir Cone = Coco de Abeto +Cedar Cone = Coco de Alamo +Jungle Sapling = Retoño de Arbol de la Selva +Jungle Tree Leaves (Yellow) = Hojas de Arbol de la Selva (Amarilla) +Jungle Tree Leaves (Red) = Hojas de Arbol de la Selva (Roja) +Douglas Fir Leaves (Bright) = Hojas de Arbol de Abeto de Douglas (Brillante) +Rubber Tree Trunk (Empty) = Tronco de Arbol de Goma (Vacio) + +[Moretrees] Loaded (2013-02-11) = [Masarboles] Cargado diff --git a/mods/vipworld/moretrees/locale/fr.txt b/mods/vipworld/moretrees/locale/fr.txt new file mode 100644 index 00000000..12d856a2 --- /dev/null +++ b/mods/vipworld/moretrees/locale/fr.txt @@ -0,0 +1,74 @@ +# Traduction par Yoan31 +# + +### crafts.lua ### +Coconut Milk = Lait de Coco +Raw Coconut = Noix de Coco Crue +Acorn Muffin batter = Pate à Muffins au Gland +Acorn Muffin = Muffins au Gland +Roasted Spruce Cone Nuts = Noix de Cône de Sapin Roties +Roasted Pine Cone Nuts = Noix de Pomme de pin Roties +Roasted Fir Cone Nuts = Noix de Cône de Sapin Roties + +### node_defs.lua ### +Beech Tree Trunk = Tronc d'Arbre de Hêtre +Apple Tree Trunk = Tronc d'Arbre de Pommier +Oak Tree Trunk = Tronc d'Arbre de chêne +Giant Sequoia Trunk = Tronc d'Arbre de Séquoia Géant +Birch Tree Trunk = Tronc d'Arbre de bouleau +Palm Tree Trunk = Tronc d'Arbre de Palmier +Spruce Tree Trunk = Tronc d'Arbre d'Epicéa +Pine Tree Trunk = Tronc d'Arbre de Pin +Willow Tree Trunk = Tronc d'Arbre de Saule +Rubber Tree Trunk = Tronc d'Arbre a Caoutchouc +Jungle Tree Trunk = Tronc d'Arbre de la Jungle +Douglas Fir Trunk = Tronc de Sapin de Douglas +Beech Tree Planks = Planches de Hêtre +Apple Tree Planks = Planches de Pommier +Oak Tree Planks = Planches de Chêne +Giant Sequoia Planks = Planches de d'Arbre de Séquoia Géant +Birch Tree Planks = Planches d'Arbre de bouleau +Palm Tree Planks = Planches d'Arbre de Palmier +Spruce Tree Planks = Planches d'Arbre d'Epicéa +Pine Tree Planks = Planches d'Arbre de Pin +Willow Tree Planks = Planches d'Arbre de Saule +Rubber Tree Planks = Planches d'Arbre a Caoutchouc +Jungle Tree Planks = Planches d'Arbre de la Jungle +Douglas Fir Planks = Planches de Sapin de Douglas +Beech Tree Sapling = Pousse d'Arbre de Hêtre +Apple Tree Sapling = Pousse d'Arbre de Pommier +Oak Tree Sapling = Pousse d'Arbre de chêne +Giant Sequoia Sapling = Pousse d'Arbre de Séquoia Géant +Birch Tree Sapling = Pousse d'Arbre de bouleau +Palm Tree Sapling = Pousse d'Arbre de Palmier +Spruce Tree Sapling = Pousse d'Arbre d'Epicéa +Pine Tree Sapling = Pousse d'Arbre de Pin +Willow Tree Sapling = Pousse d'Arbre de Saule +Rubber Tree Sapling = Pousse d'Arbre a Caoutchouc +Jungle Tree Sapling = Pousse d'Arbre de la Jungle +Douglas Fir Sapling = Pousse de Sapin de Douglas +Beech Tree Leaves = Feuilles d'Arbre de Hêtre +Apple Tree Leaves = Feuilles d'Arbre de Pommier +Oak Tree Leaves = Feuilles d'Arbre de chêne +Giant Sequoia Leaves = Feuilles d'Arbre de Séquoia Géant +Birch Tree Leaves = Feuilles d'Arbre de bouleau +Palm Tree Leaves = Feuilles d'Arbre de Palmier +Spruce Tree Leaves = Feuilles d'Arbre d'Epicéa +Pine Tree Leaves = Feuilles d'Arbre de Pin +Willow Tree Leaves = Feuilles d'Arbre de Saule +Rubber Tree Leaves = Feuilles d'Arbre a Caoutchouc +Jungle Tree Leaves = Feuilles d'Arbre de la Jungle +Douglas Fir Leaves = Feuilles de Sapin de Douglas + +Acorn = Gland +Coconut = Noix de Coco +Spruce Cone = Cône de Sapin +Pine Cone = Pomme de Pin +Fir Cone = Pomme de Sapin +Jungle Sapling = Pousse d'Arbre de la Jungle +Jungle Tree Leaves (Yellow) = Feuille d'Arbre de la Jungle (Jaune) +Jungle Tree Leaves (Red) = Feuille d'Arbre de la Jungle (Rouge) +Douglas Fir Leaves (Bright) = Feuille de Sapin de Douglas (Brillant) +Rubber Tree Trunk (Empty) = Tronc d'Arbre en Caoutchouc (Vide) + +[Moretrees] Loaded (2013-02-11) = diff --git a/mods/vipworld/moretrees/locale/template.txt b/mods/vipworld/moretrees/locale/template.txt new file mode 100644 index 00000000..8c167f51 --- /dev/null +++ b/mods/vipworld/moretrees/locale/template.txt @@ -0,0 +1,73 @@ +# Template + +### crafts.lua ### +Coconut Milk = +Raw Coconut = +Acorn Muffin batter = +Acorn Muffin = +Roasted Spruce Cone Nuts = +Roasted Pine Cone Nuts = +Roasted Fir Cone Nuts = + +### node_defs.lua ### +Beech Tree Trunk = +Apple Tree Trunk = +Oak Tree Trunk = +Giant Sequoia Trunk = +Birch Tree Trunk = +Palm Tree Trunk = +Spruce Tree Trunk = +Pine Tree Trunk = +Willow Tree Trunk = +Rubber Tree Trunk = +Jungle Tree Trunk = +Douglas Fir Trunk = +Beech Tree Planks = +Apple Tree Planks = +Oak Tree Planks = +Giant Sequoia Planks = +Birch Tree Planks = +Palm Tree Planks = +Spruce Tree Planks = +Pine Tree Planks = +Willow Tree Planks = +Rubber Tree Planks = +Jungle Tree Planks = +Douglas Fir Planks = +Beech Tree Sapling = +Apple Tree Sapling = +Oak Tree Sapling = +Giant Sequoia Sapling = +Birch Tree Sapling = +Palm Tree Sapling = +Spruce Tree Sapling = +Pine Tree Sapling = +Willow Tree Sapling = +Rubber Tree Sapling = +Jungle Tree Sapling = +Douglas Fir Sapling = +Beech Tree Leaves = +Apple Tree Leaves = +Oak Tree Leaves = +Giant Sequoia Leaves = +Birch Tree Leaves = +Palm Tree Leaves = +Spruce Tree Leaves = +Pine Tree Leaves = +Willow Tree Leaves = +Rubber Tree Leaves = +Jungle Tree Leaves = +Douglas Fir Leaves = + +Acorn = +Coconut = +Spruce Cone = +Pine Cone = +Fir Cone = +Jungle Sapling = +Jungle Tree Leaves (Yellow) = +Jungle Tree Leaves (Red) = +Douglas Fir Leaves (Bright) = +Rubber Tree Trunk (Empty) = + +[Moretrees] Loaded (2013-02-11) = diff --git a/mods/vipworld/moretrees/mod.conf b/mods/vipworld/moretrees/mod.conf new file mode 100644 index 00000000..b95f3e82 --- /dev/null +++ b/mods/vipworld/moretrees/mod.conf @@ -0,0 +1 @@ +name = moretrees diff --git a/mods/vipworld/moretrees/node_defs.lua b/mods/vipworld/moretrees/node_defs.lua new file mode 100644 index 00000000..1aa4d14d --- /dev/null +++ b/mods/vipworld/moretrees/node_defs.lua @@ -0,0 +1,377 @@ +local S = moretrees.intllib + +moretrees.avoidnodes = {} + +moretrees.treelist = { + {"beech", "Beech Tree"}, + {"apple_tree", "Apple Tree"}, + {"oak", "Oak Tree", "acorn", "Acorn", {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 }, + {"sequoia", "Giant Sequoia"}, + {"birch", "Birch Tree"}, + {"palm", "Palm Tree", "palm_fruit_trunk_gen", "Palm Tree", {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 1.0 }, + {"date_palm", "Date Palm Tree", "date_palm_fruit_trunk", "Date Palm Tree", {0, 0, 0, 0, 0, 0}, 0.0 }, + {"spruce", "Spruce Tree", "spruce_cone", "Spruce Cone", {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 }, + {"cedar", "Cedar Tree", "cedar_cone", "Cedar Cone", {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 }, + {"poplar", "Poplar Tree"}, + {"poplar_small", "Poplar Tree"}, + {"willow", "Willow Tree"}, + {"fir", "Douglas Fir", "fir_cone", "Fir Cone", {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 }, + {"jungletree", "Jungle Tree", nil, nil, nil, nil, "default_junglesapling.png" }, +} + +local dirs1 = { 21, 20, 23, 22, 21 } +local dirs2 = { 12, 9, 18, 7, 12 } +local dirs3 = { 14, 11, 16, 5, 14 } + +local moretrees_new_leaves_drawtype = "allfaces_optional" +local moretrees_plantlike_leaves_visual_scale = 1 + +if moretrees.plantlike_leaves then + moretrees_new_leaves_drawtype = "plantlike" + moretrees_plantlike_leaves_visual_scale = math.sqrt(2) +end + + +if moretrees.plantlike_leaves then + minetest.override_item("default:leaves", { + inventory_image = minetest.inventorycube("default_leaves.png"), + drawtype = "plantlike", + visual_scale = math.sqrt(2) + }) +end + +-- redefine default jungle leaves for same + +if moretrees.plantlike_leaves then + minetest.override_item("default:jungleleaves", { + inventory_image = minetest.inventorycube("default_jungleleaves.png"), + drawtype = "plantlike", + visual_scale = math.sqrt(2) + }) +end + +for i in ipairs(moretrees.treelist) do + local treename = moretrees.treelist[i][1] + local treedesc = moretrees.treelist[i][2] + local fruit = moretrees.treelist[i][3] + local fruitdesc = moretrees.treelist[i][4] + local selbox = moretrees.treelist[i][5] + local vscale = moretrees.treelist[i][6] + + local saptex = moretrees.treelist[i][7] + + -- player will get a sapling with 1/100 chance + -- player will get leaves only if he/she gets no saplings, + -- this is because max_items is 1 + + local droprarity = 100 + + if treename == "palm" then + droprarity = 20 + end + + if treename ~= "jungletree" -- the default game provides jungle tree and pine trunk/planks nodes. + and treename ~= "poplar_small" + and treename ~= "pine" then + + saptex = "moretrees_"..treename.."_sapling.png" + + minetest.register_node("moretrees:"..treename.."_trunk", { + description = S(treedesc.." Trunk"), + tiles = { + "moretrees_"..treename.."_trunk_top.png", + "moretrees_"..treename.."_trunk_top.png", + "moretrees_"..treename.."_trunk.png" + }, + paramtype2 = "facedir", + is_ground_content = false, + groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2}, + sounds = default.node_sound_wood_defaults(), + on_place = minetest.rotate_node, + }) + + minetest.register_node("moretrees:"..treename.."_planks", { + description = S(treedesc.." Planks"), + tiles = {"moretrees_"..treename.."_wood.png"}, + is_ground_content = false, + groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1}, + sounds = default.node_sound_wood_defaults(), + }) + + minetest.register_node("moretrees:"..treename.."_sapling", { + description = S(treedesc.." Sapling"), + drawtype = "plantlike", + tiles = {saptex}, + inventory_image = saptex, + paramtype = "light", + paramtype2 = "waving", + walkable = false, + is_ground_content = true, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} + }, + groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1,sapling=1}, + sounds = default.node_sound_defaults(), + }) + + local moretrees_leaves_inventory_image = nil + local moretrees_new_leaves_waving = nil + + if moretrees.plantlike_leaves then + moretrees_leaves_inventory_image = minetest.inventorycube("moretrees_"..treename.."_leaves.png") + else + moretrees_new_leaves_waving = 1 + end + + minetest.register_node("moretrees:"..treename.."_leaves", { + description = S(treedesc.." Leaves"), + drawtype = moretrees_new_leaves_drawtype, + waving = moretrees_new_leaves_waving, + visual_scale = moretrees_plantlike_leaves_visual_scale, + tiles = { "moretrees_"..treename.."_leaves.png" }, + inventory_image = moretrees_leaves_inventory_image, + paramtype = "light", + is_ground_content = false, + groups = {snappy = 3, flammable = 2, leaves = 1, moretrees_leaves = 1, leafdecay = 1}, + sounds = default.node_sound_leaves_defaults(), + + drop = { + max_items = 1, + items = { + {items = {"moretrees:"..treename.."_sapling"}, rarity = droprarity }, + {items = {"moretrees:"..treename.."_leaves"} } + } + }, + }) + + if minetest.get_modpath("moreblocks") then + + -- stairsplus:register_all(modname, subname, recipeitem, {fields}) + + stairsplus:register_all( + "moretrees", + treename.."_trunk", + "moretrees:"..treename.."_trunk", + { + groups = { snappy=1, choppy=2, oddly_breakable_by_hand=1, flammable=2, not_in_creative_inventory=1 }, + tiles = { + "moretrees_"..treename.."_trunk_top.png", + "moretrees_"..treename.."_trunk_top.png", + "moretrees_"..treename.."_trunk.png" + }, + description = S(treedesc.." Trunk"), + drop = treename.."_trunk", + } + ) + + stairsplus:register_all( + "moretrees", + treename.."_planks", + "moretrees:"..treename.."_planks", + { + groups = { snappy=1, choppy=2, oddly_breakable_by_hand=2, flammable=3, not_in_creative_inventory=1 }, + tiles = { "moretrees_"..treename.."_wood.png" }, + description = S(treedesc.." Planks"), + drop = treename.."_planks", + } + ) + elseif minetest.get_modpath("stairs") then + stairs.register_stair_and_slab( + "moretrees_"..treename.."_trunk", + "moretrees:"..treename.."_trunk", + { snappy=1, choppy=2, oddly_breakable_by_hand=1, flammable=2 }, + { "moretrees_"..treename.."_trunk_top.png", + "moretrees_"..treename.."_trunk_top.png", + "moretrees_"..treename.."_trunk.png" + }, + S(treedesc.." Trunk Stair"), + S(treedesc.." Trunk Slab"), + default.node_sound_wood_defaults() + ) + + stairs.register_stair_and_slab( + "moretrees_"..treename.."_planks", + "moretrees:"..treename.."_planks", + { snappy=1, choppy=2, oddly_breakable_by_hand=2, flammable=3 }, + { "moretrees_"..treename.."_wood.png" }, + S(treedesc.." Planks Stair"), + S(treedesc.." Planks Slab"), + default.node_sound_wood_defaults() + ) + + end + end + + minetest.register_node("moretrees:"..treename.."_sapling_ongen", { + description = S(treedesc.." Sapling (on-generated)"), + drawtype = "plantlike", + tiles = {saptex}, + inventory_image = saptex, + paramtype = "light", + paramtype2 = "waving", + walkable = false, + is_ground_content = true, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} + }, + groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1,not_in_creative_inventory=1,sapling=1}, + sounds = default.node_sound_defaults(), + drop = "moretrees:"..treename.."_sapling" + }) + + local fruitname = nil + if fruit then + fruitname = "moretrees:"..fruit + minetest.register_node(fruitname, { + description = S(fruitdesc), + drawtype = "plantlike", + tiles = { "moretrees_"..fruit..".png" }, + inventory_image = "moretrees_"..fruit..".png^[transformR180", + wield_image = "moretrees_"..fruit..".png^[transformR180", + visual_scale = vscale, + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + walkable = false, + selection_box = { + type = "fixed", + fixed = selbox + }, + groups = {fleshy=3,dig_immediate=3,flammable=2, attached_node=1, leafdecay = 1, leafdecay_drop = 1}, + sounds = default.node_sound_defaults(), + }) + end + +end + +-- Extra nodes for jungle trees: + +local jungleleaves = {"yellow","red"} +local jungleleavesnames = {"Yellow", "Red"} +for color = 1, #jungleleaves do + local leave_name = "moretrees:jungletree_leaves_"..jungleleaves[color] + + local moretrees_leaves_inventory_image = nil + + if moretrees.plantlike_leaves then + moretrees_leaves_inventory_image = minetest.inventorycube("moretrees_jungletree_leaves_"..jungleleaves[color]..".png") + else + moretrees_new_leaves_waving = 1 + end + + minetest.register_node(leave_name, { + description = S("Jungle Tree Leaves ("..jungleleavesnames[color]..")"), + drawtype = moretrees_new_leaves_drawtype, + waving = moretrees_new_leaves_waving, + visual_scale = moretrees_plantlike_leaves_visual_scale, + tiles = {"moretrees_jungletree_leaves_"..jungleleaves[color]..".png"}, + inventory_image = moretrees_leaves_inventory_image, + paramtype = "light", + is_ground_content = false, + groups = {snappy = 3, flammable = 2, leaves = 1, moretrees_leaves = 1, leafdecay = 3 }, + drop = { + max_items = 1, + items = { + {items = {"default:junglesapling"}, rarity = 100 }, + {items = {"moretrees:jungletree_leaves_"..jungleleaves[color]} } + } + }, + sounds = default.node_sound_leaves_defaults(), + }) +end + +-- To get Moretrees to generate its own jungle trees among the default mapgen +-- we need our own copy of that node, which moretrees will match against. + +local jungle_tree = table.copy(minetest.registered_nodes["default:jungletree"]) +minetest.register_node("moretrees:jungletree_trunk", jungle_tree) + + +-- Extra needles for firs + +local moretrees_leaves_inventory_image = nil + +if moretrees.plantlike_leaves then + moretrees_leaves_inventory_image = minetest.inventorycube("moretrees_fir_leaves_bright.png") +end + +minetest.register_node("moretrees:fir_leaves_bright", { + drawtype = moretrees_new_leaves_drawtype, + waving = moretrees_new_leaves_waving, + visual_scale = moretrees_plantlike_leaves_visual_scale, + description = S("Douglas Fir Leaves (Bright)"), + tiles = { "moretrees_fir_leaves_bright.png" }, + inventory_image = moretrees_leaves_inventory_image, + paramtype = "light", + is_ground_content = false, + groups = {snappy = 3, flammable = 2, leaves = 1, moretrees_leaves = 1, leafdecay = 3 }, + drop = { + max_items = 1, + items = { + {items = {'moretrees:fir_sapling'}, rarity = 100 }, + {items = {'moretrees:fir_leaves_bright'} } + } + }, + sounds = default.node_sound_leaves_defaults() +}) + + +if moretrees.enable_redefine_apple then + local appledef = moretrees.clone_node("default:apple") + appledef.groups.attached_node = 1 + minetest.register_node(":default:apple", appledef) +end + +table.insert(moretrees.avoidnodes, "default:jungletree") +table.insert(moretrees.avoidnodes, "default:pine_tree") +table.insert(moretrees.avoidnodes, "default:acacia_tree") +table.insert(moretrees.avoidnodes, "moretrees:fir_trunk") +table.insert(moretrees.avoidnodes, "default:tree") + +if moretrees.spawn_saplings then + table.insert(moretrees.avoidnodes, "snow:sapling_pine") + table.insert(moretrees.avoidnodes, "default:junglesapling") + table.insert(moretrees.avoidnodes, "default:pine_sapling") +end + +minetest.register_alias("moretrees:conifer_trunk", "moretrees:fir_trunk") +minetest.register_alias("moretrees:conifer_trunk_sideways", "moretrees:fir_trunk_sideways") +minetest.register_alias("moretrees:conifer_leaves", "moretrees:fir_leaves") +minetest.register_alias("moretrees:conifer_leaves_bright", "moretrees:fir_leaves_bright") +minetest.register_alias("moretrees:conifer_sapling", "moretrees:fir_sapling") + +minetest.register_alias("conifers:trunk", "moretrees:fir_trunk") +minetest.register_alias("conifers:trunk_reversed", "moretrees:fir_trunk_sideways") +minetest.register_alias("conifers:leaves", "moretrees:fir_leaves") +minetest.register_alias("conifers:leaves_special", "moretrees:fir_leaves_bright") +minetest.register_alias("conifers:sapling", "moretrees:fir_sapling") + +minetest.register_alias("moretrees:jungletree_sapling", "default:junglesapling") +minetest.register_alias("moretrees:jungletree_trunk_sideways", "moreblocks:horizontal_jungle_tree") +minetest.register_alias("moretrees:jungletree_planks", "default:junglewood") +minetest.register_alias("moretrees:jungletree_leaves_green", "default:jungleleaves") + +minetest.register_alias("moretrees:acacia_trunk", "default:acacia_tree") +minetest.register_alias("moretrees:acacia_planks", "default:acacia_wood") +minetest.register_alias("moretrees:acacia_sapling", "default:acacia_sapling") +minetest.register_alias("moretrees:acacia_leaves", "default:acacia_leaves") + +minetest.register_alias("moretrees:pine_trunk", "moretrees:cedar_trunk") +minetest.register_alias("moretrees:pine_planks", "moretrees:cedar_planks") +minetest.register_alias("moretrees:pine_sapling", "moretrees:cedar_sapling") +minetest.register_alias("moretrees:pine_leaves", "moretrees:cedar_leaves") +minetest.register_alias("moretrees:pine_cone", "moretrees:cedar_cone") +minetest.register_alias("moretrees:pine_nuts", "moretrees:cedar_nuts") +minetest.register_alias("moretrees:pine_sapling_ongen", "moretrees:cedar_sapling_ongen") + +minetest.register_alias("moretrees:dates", "moretrees:dates_f4") + +minetest.register_node("moretrees:rubber_tree_planks", { + description = S("Rubber Tree Planks"), + tiles = {"moretrees_rubber_tree_wood.png"}, + is_ground_content = false, + groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1}, + sounds = default.node_sound_wood_defaults(), +}) diff --git a/mods/vipworld/moretrees/textures/moretrees_acorn.png b/mods/vipworld/moretrees/textures/moretrees_acorn.png new file mode 100644 index 00000000..dc2ef329 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_acorn.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_acorn_muffin.png b/mods/vipworld/moretrees/textures/moretrees_acorn_muffin.png new file mode 100644 index 00000000..166ca838 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_acorn_muffin.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_acorn_muffin_batter.png b/mods/vipworld/moretrees/textures/moretrees_acorn_muffin_batter.png new file mode 100644 index 00000000..b22e7491 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_acorn_muffin_batter.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_apple_tree_leaves.png b/mods/vipworld/moretrees/textures/moretrees_apple_tree_leaves.png new file mode 100644 index 00000000..75ec063a Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_apple_tree_leaves.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_apple_tree_sapling.png b/mods/vipworld/moretrees/textures/moretrees_apple_tree_sapling.png new file mode 100644 index 00000000..04f93fd4 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_apple_tree_sapling.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_apple_tree_trunk.png b/mods/vipworld/moretrees/textures/moretrees_apple_tree_trunk.png new file mode 100644 index 00000000..573fd855 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_apple_tree_trunk.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_apple_tree_trunk_top.png b/mods/vipworld/moretrees/textures/moretrees_apple_tree_trunk_top.png new file mode 100644 index 00000000..d2617531 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_apple_tree_trunk_top.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_apple_tree_wood.png b/mods/vipworld/moretrees/textures/moretrees_apple_tree_wood.png new file mode 100644 index 00000000..242f3ee4 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_apple_tree_wood.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_beech_leaves.png b/mods/vipworld/moretrees/textures/moretrees_beech_leaves.png new file mode 100644 index 00000000..8463f530 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_beech_leaves.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_beech_sapling.png b/mods/vipworld/moretrees/textures/moretrees_beech_sapling.png new file mode 100644 index 00000000..ff42cc4b Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_beech_sapling.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_beech_trunk.png b/mods/vipworld/moretrees/textures/moretrees_beech_trunk.png new file mode 100644 index 00000000..06b4ae9c Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_beech_trunk.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_beech_trunk_top.png b/mods/vipworld/moretrees/textures/moretrees_beech_trunk_top.png new file mode 100644 index 00000000..72859852 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_beech_trunk_top.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_beech_wood.png b/mods/vipworld/moretrees/textures/moretrees_beech_wood.png new file mode 100644 index 00000000..d6e3f9d7 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_beech_wood.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_birch_leaves.png b/mods/vipworld/moretrees/textures/moretrees_birch_leaves.png new file mode 100644 index 00000000..547f133b Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_birch_leaves.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_birch_sapling.png b/mods/vipworld/moretrees/textures/moretrees_birch_sapling.png new file mode 100644 index 00000000..afb03f3b Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_birch_sapling.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_birch_trunk.png b/mods/vipworld/moretrees/textures/moretrees_birch_trunk.png new file mode 100644 index 00000000..2b222f7b Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_birch_trunk.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_birch_trunk_top.png b/mods/vipworld/moretrees/textures/moretrees_birch_trunk_top.png new file mode 100644 index 00000000..6e5b3bb2 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_birch_trunk_top.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_birch_wood.png b/mods/vipworld/moretrees/textures/moretrees_birch_wood.png new file mode 100644 index 00000000..621f8eec Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_birch_wood.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_cedar_cone.png b/mods/vipworld/moretrees/textures/moretrees_cedar_cone.png new file mode 100644 index 00000000..5e1fae9f Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_cedar_cone.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_cedar_leaves.png b/mods/vipworld/moretrees/textures/moretrees_cedar_leaves.png new file mode 100644 index 00000000..e6de4829 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_cedar_leaves.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_cedar_nuts.png b/mods/vipworld/moretrees/textures/moretrees_cedar_nuts.png new file mode 100644 index 00000000..e39f8954 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_cedar_nuts.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_cedar_sapling.png b/mods/vipworld/moretrees/textures/moretrees_cedar_sapling.png new file mode 100644 index 00000000..42f8ecc1 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_cedar_sapling.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_cedar_trunk.png b/mods/vipworld/moretrees/textures/moretrees_cedar_trunk.png new file mode 100644 index 00000000..ea685e3a Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_cedar_trunk.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_cedar_trunk_top.png b/mods/vipworld/moretrees/textures/moretrees_cedar_trunk_top.png new file mode 100644 index 00000000..01aed1d7 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_cedar_trunk_top.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_cedar_wood.png b/mods/vipworld/moretrees/textures/moretrees_cedar_wood.png new file mode 100644 index 00000000..8680bd5b Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_cedar_wood.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_coconut.png b/mods/vipworld/moretrees/textures/moretrees_coconut.png new file mode 100644 index 00000000..2107b5f1 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_coconut.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_coconut_0.png b/mods/vipworld/moretrees/textures/moretrees_coconut_0.png new file mode 100644 index 00000000..644a65f8 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_coconut_0.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_coconut_1.png b/mods/vipworld/moretrees/textures/moretrees_coconut_1.png new file mode 100644 index 00000000..e2889bce Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_coconut_1.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_coconut_2.png b/mods/vipworld/moretrees/textures/moretrees_coconut_2.png new file mode 100644 index 00000000..86c8cf5f Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_coconut_2.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_coconut_milk.png b/mods/vipworld/moretrees/textures/moretrees_coconut_milk.png new file mode 100644 index 00000000..9a54ad8a Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_coconut_milk.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_coconut_milk_inv.png b/mods/vipworld/moretrees/textures/moretrees_coconut_milk_inv.png new file mode 100644 index 00000000..f6365787 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_coconut_milk_inv.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_date.png b/mods/vipworld/moretrees/textures/moretrees_date.png new file mode 100644 index 00000000..ed743b5c Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_date.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_date_nut_bar.png b/mods/vipworld/moretrees/textures/moretrees_date_nut_bar.png new file mode 100644 index 00000000..68950011 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_date_nut_bar.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_date_nut_batter.png b/mods/vipworld/moretrees/textures/moretrees_date_nut_batter.png new file mode 100644 index 00000000..47d8e080 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_date_nut_batter.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_date_nut_cake.png b/mods/vipworld/moretrees/textures/moretrees_date_nut_cake.png new file mode 100644 index 00000000..5084e712 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_date_nut_cake.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_date_nut_snack.png b/mods/vipworld/moretrees/textures/moretrees_date_nut_snack.png new file mode 100644 index 00000000..1766dab2 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_date_nut_snack.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_date_palm_leaves.png b/mods/vipworld/moretrees/textures/moretrees_date_palm_leaves.png new file mode 100644 index 00000000..de0f569d Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_date_palm_leaves.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_date_palm_sapling.png b/mods/vipworld/moretrees/textures/moretrees_date_palm_sapling.png new file mode 100644 index 00000000..95960288 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_date_palm_sapling.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_date_palm_trunk.png b/mods/vipworld/moretrees/textures/moretrees_date_palm_trunk.png new file mode 100644 index 00000000..b8fa9860 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_date_palm_trunk.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_date_palm_trunk_top.png b/mods/vipworld/moretrees/textures/moretrees_date_palm_trunk_top.png new file mode 100644 index 00000000..329ba464 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_date_palm_trunk_top.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_date_palm_wood.png b/mods/vipworld/moretrees/textures/moretrees_date_palm_wood.png new file mode 100644 index 00000000..c531e3c7 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_date_palm_wood.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_dates.png b/mods/vipworld/moretrees/textures/moretrees_dates.png new file mode 100644 index 00000000..cd8d5784 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_dates.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_dates_f0.png b/mods/vipworld/moretrees/textures/moretrees_dates_f0.png new file mode 100644 index 00000000..b75d59a3 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_dates_f0.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_dates_f1.png b/mods/vipworld/moretrees/textures/moretrees_dates_f1.png new file mode 100644 index 00000000..535150bf Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_dates_f1.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_dates_f2.png b/mods/vipworld/moretrees/textures/moretrees_dates_f2.png new file mode 100644 index 00000000..e2e299c8 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_dates_f2.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_dates_f3.png b/mods/vipworld/moretrees/textures/moretrees_dates_f3.png new file mode 100644 index 00000000..eef43f0b Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_dates_f3.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_dates_f4.png b/mods/vipworld/moretrees/textures/moretrees_dates_f4.png new file mode 100644 index 00000000..78f38f98 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_dates_f4.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_dates_fn.png b/mods/vipworld/moretrees/textures/moretrees_dates_fn.png new file mode 100644 index 00000000..db889130 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_dates_fn.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_dates_m0.png b/mods/vipworld/moretrees/textures/moretrees_dates_m0.png new file mode 100644 index 00000000..4ff61e7f Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_dates_m0.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_dates_n.png b/mods/vipworld/moretrees/textures/moretrees_dates_n.png new file mode 100644 index 00000000..c12a3d99 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_dates_n.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_fir_cone.png b/mods/vipworld/moretrees/textures/moretrees_fir_cone.png new file mode 100644 index 00000000..45eef928 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_fir_cone.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_fir_leaves.png b/mods/vipworld/moretrees/textures/moretrees_fir_leaves.png new file mode 100644 index 00000000..6643b87b Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_fir_leaves.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_fir_leaves_bright.png b/mods/vipworld/moretrees/textures/moretrees_fir_leaves_bright.png new file mode 100644 index 00000000..e3b2e6f3 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_fir_leaves_bright.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_fir_nuts.png b/mods/vipworld/moretrees/textures/moretrees_fir_nuts.png new file mode 100644 index 00000000..a5341494 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_fir_nuts.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_fir_sapling.png b/mods/vipworld/moretrees/textures/moretrees_fir_sapling.png new file mode 100644 index 00000000..642123cd Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_fir_sapling.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_fir_trunk.png b/mods/vipworld/moretrees/textures/moretrees_fir_trunk.png new file mode 100644 index 00000000..cc0c5596 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_fir_trunk.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_fir_trunk_top.png b/mods/vipworld/moretrees/textures/moretrees_fir_trunk_top.png new file mode 100644 index 00000000..d17decf9 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_fir_trunk_top.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_fir_wood.png b/mods/vipworld/moretrees/textures/moretrees_fir_wood.png new file mode 100644 index 00000000..7f490797 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_fir_wood.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_jungletree_leaves_green.png b/mods/vipworld/moretrees/textures/moretrees_jungletree_leaves_green.png new file mode 100644 index 00000000..52d4a5a4 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_jungletree_leaves_green.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_jungletree_leaves_red.png b/mods/vipworld/moretrees/textures/moretrees_jungletree_leaves_red.png new file mode 100644 index 00000000..d26593ee Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_jungletree_leaves_red.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_jungletree_leaves_yellow.png b/mods/vipworld/moretrees/textures/moretrees_jungletree_leaves_yellow.png new file mode 100644 index 00000000..d116455e Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_jungletree_leaves_yellow.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_oak_leaves.png b/mods/vipworld/moretrees/textures/moretrees_oak_leaves.png new file mode 100644 index 00000000..aa587c5d Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_oak_leaves.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_oak_sapling.png b/mods/vipworld/moretrees/textures/moretrees_oak_sapling.png new file mode 100644 index 00000000..eef6a721 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_oak_sapling.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_oak_trunk.png b/mods/vipworld/moretrees/textures/moretrees_oak_trunk.png new file mode 100644 index 00000000..b0ca9103 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_oak_trunk.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_oak_trunk_top.png b/mods/vipworld/moretrees/textures/moretrees_oak_trunk_top.png new file mode 100644 index 00000000..526d3021 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_oak_trunk_top.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_oak_wood.png b/mods/vipworld/moretrees/textures/moretrees_oak_wood.png new file mode 100644 index 00000000..05d02f95 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_oak_wood.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_palm_leaves.png b/mods/vipworld/moretrees/textures/moretrees_palm_leaves.png new file mode 100644 index 00000000..90b07002 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_palm_leaves.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_palm_sapling.png b/mods/vipworld/moretrees/textures/moretrees_palm_sapling.png new file mode 100644 index 00000000..aaa3415d Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_palm_sapling.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_palm_trunk.png b/mods/vipworld/moretrees/textures/moretrees_palm_trunk.png new file mode 100644 index 00000000..da255bc6 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_palm_trunk.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_palm_trunk_top.png b/mods/vipworld/moretrees/textures/moretrees_palm_trunk_top.png new file mode 100644 index 00000000..fe07ae34 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_palm_trunk_top.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_palm_wood.png b/mods/vipworld/moretrees/textures/moretrees_palm_wood.png new file mode 100644 index 00000000..c0c0ed64 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_palm_wood.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_poplar_leaves.png b/mods/vipworld/moretrees/textures/moretrees_poplar_leaves.png new file mode 100644 index 00000000..64568bc8 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_poplar_leaves.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_poplar_sapling.png b/mods/vipworld/moretrees/textures/moretrees_poplar_sapling.png new file mode 100644 index 00000000..9d5f32a8 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_poplar_sapling.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_poplar_small_sapling.png b/mods/vipworld/moretrees/textures/moretrees_poplar_small_sapling.png new file mode 100644 index 00000000..fb9bd030 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_poplar_small_sapling.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_poplar_trunk-1.png b/mods/vipworld/moretrees/textures/moretrees_poplar_trunk-1.png new file mode 100644 index 00000000..e4e15405 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_poplar_trunk-1.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_poplar_trunk.png b/mods/vipworld/moretrees/textures/moretrees_poplar_trunk.png new file mode 100644 index 00000000..47672fb9 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_poplar_trunk.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_poplar_trunk_top.png b/mods/vipworld/moretrees/textures/moretrees_poplar_trunk_top.png new file mode 100644 index 00000000..4c558580 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_poplar_trunk_top.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_poplar_wood.png b/mods/vipworld/moretrees/textures/moretrees_poplar_wood.png new file mode 100644 index 00000000..55e6b44e Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_poplar_wood.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_raw_coconut.png b/mods/vipworld/moretrees/textures/moretrees_raw_coconut.png new file mode 100644 index 00000000..ca318edc Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_raw_coconut.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_rubber_tree_leaves.png b/mods/vipworld/moretrees/textures/moretrees_rubber_tree_leaves.png new file mode 100644 index 00000000..e35f51bf Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_rubber_tree_leaves.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_rubber_tree_sapling.png b/mods/vipworld/moretrees/textures/moretrees_rubber_tree_sapling.png new file mode 100644 index 00000000..d2e06d05 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_rubber_tree_sapling.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_rubber_tree_trunk.png b/mods/vipworld/moretrees/textures/moretrees_rubber_tree_trunk.png new file mode 100644 index 00000000..c5da574c Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_rubber_tree_trunk.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_rubber_tree_trunk_empty.png b/mods/vipworld/moretrees/textures/moretrees_rubber_tree_trunk_empty.png new file mode 100644 index 00000000..55423bcf Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_rubber_tree_trunk_empty.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_rubber_tree_trunk_top.png b/mods/vipworld/moretrees/textures/moretrees_rubber_tree_trunk_top.png new file mode 100644 index 00000000..25b86a92 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_rubber_tree_trunk_top.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_rubber_tree_wood.png b/mods/vipworld/moretrees/textures/moretrees_rubber_tree_wood.png new file mode 100644 index 00000000..3c83f0eb Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_rubber_tree_wood.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_sequoia_leaves.png b/mods/vipworld/moretrees/textures/moretrees_sequoia_leaves.png new file mode 100644 index 00000000..594c9583 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_sequoia_leaves.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_sequoia_sapling.png b/mods/vipworld/moretrees/textures/moretrees_sequoia_sapling.png new file mode 100644 index 00000000..b11bc0b7 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_sequoia_sapling.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_sequoia_trunk.png b/mods/vipworld/moretrees/textures/moretrees_sequoia_trunk.png new file mode 100644 index 00000000..552cdf55 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_sequoia_trunk.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_sequoia_trunk_top.png b/mods/vipworld/moretrees/textures/moretrees_sequoia_trunk_top.png new file mode 100644 index 00000000..d1891fd3 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_sequoia_trunk_top.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_sequoia_wood.png b/mods/vipworld/moretrees/textures/moretrees_sequoia_wood.png new file mode 100644 index 00000000..2e43595b Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_sequoia_wood.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_spruce_cone.png b/mods/vipworld/moretrees/textures/moretrees_spruce_cone.png new file mode 100644 index 00000000..1c9da850 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_spruce_cone.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_spruce_leaves.png b/mods/vipworld/moretrees/textures/moretrees_spruce_leaves.png new file mode 100644 index 00000000..6643b87b Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_spruce_leaves.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_spruce_nuts.png b/mods/vipworld/moretrees/textures/moretrees_spruce_nuts.png new file mode 100644 index 00000000..130c11c8 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_spruce_nuts.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_spruce_sapling.png b/mods/vipworld/moretrees/textures/moretrees_spruce_sapling.png new file mode 100644 index 00000000..0275afb5 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_spruce_sapling.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_spruce_trunk.png b/mods/vipworld/moretrees/textures/moretrees_spruce_trunk.png new file mode 100644 index 00000000..cc0c5596 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_spruce_trunk.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_spruce_trunk_top.png b/mods/vipworld/moretrees/textures/moretrees_spruce_trunk_top.png new file mode 100644 index 00000000..3876c5b3 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_spruce_trunk_top.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_spruce_wood.png b/mods/vipworld/moretrees/textures/moretrees_spruce_wood.png new file mode 100644 index 00000000..47aa3262 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_spruce_wood.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_willow_leaves.png b/mods/vipworld/moretrees/textures/moretrees_willow_leaves.png new file mode 100644 index 00000000..e1d26d9c Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_willow_leaves.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_willow_sapling.png b/mods/vipworld/moretrees/textures/moretrees_willow_sapling.png new file mode 100644 index 00000000..18414de4 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_willow_sapling.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_willow_trunk.png b/mods/vipworld/moretrees/textures/moretrees_willow_trunk.png new file mode 100644 index 00000000..a3bd5f06 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_willow_trunk.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_willow_trunk_top.png b/mods/vipworld/moretrees/textures/moretrees_willow_trunk_top.png new file mode 100644 index 00000000..c54c1820 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_willow_trunk_top.png differ diff --git a/mods/vipworld/moretrees/textures/moretrees_willow_wood.png b/mods/vipworld/moretrees/textures/moretrees_willow_wood.png new file mode 100644 index 00000000..21c57428 Binary files /dev/null and b/mods/vipworld/moretrees/textures/moretrees_willow_wood.png differ diff --git a/mods/vipworld/poisonivy/depends.txt b/mods/vipworld/poisonivy/depends.txt new file mode 100644 index 00000000..e69de29b diff --git a/mods/vipworld/poisonivy/init.lua b/mods/vipworld/poisonivy/init.lua new file mode 100644 index 00000000..9f2497c8 --- /dev/null +++ b/mods/vipworld/poisonivy/init.lua @@ -0,0 +1,63 @@ +-- This file supplies poison ivy for the plantlife modpack +-- Last revision: 2013-01-24 + +local walls_list = { + "default:dirt", + "default:dirt_with_grass", + "default:stone", + "default:cobble", + "default:mossycobble", + "default:brick", + "default:tree", + "default:jungletree", + "default:stone_with_coal", + "default:stone_with_iron" +}, +minetest.register_node('poisonivy:seedling', { + description = "Poison ivy (seedling)", + drawtype = 'plantlike', + waving = 1, + tiles = { 'poisonivy_seedling.png' }, + inventory_image = 'poisonivy_seedling.png', + wield_image = 'poisonivy_seedling.png', + sunlight_propagates = true, + paramtype = 'light', + walkable = false, + groups = { snappy = 3, poisonivy=1, flora_block=1 }, + sounds = default.node_sound_leaves_defaults(), + buildable_to = true, +}) + +minetest.register_node('poisonivy:sproutling', { + description = "Poison ivy (sproutling)", + drawtype = 'plantlike', + waving = 1, + tiles = { 'poisonivy_sproutling.png' }, + inventory_image = 'poisonivy_sproutling.png', + wield_image = 'poisonivy_sproutling.png', + sunlight_propagates = true, + paramtype = 'light', + walkable = false, + groups = { snappy = 3, poisonivy=1, flora_block=1 }, + sounds = default.node_sound_leaves_defaults(), + buildable_to = true, +}) + +minetest.register_node('poisonivy:climbing', { + description = "Poison ivy (climbing plant)", + drawtype = 'signlike', + tiles = { 'poisonivy_climbing.png' }, + inventory_image = 'poisonivy_climbing.png', + wield_image = 'poisonivy_climbing.png', + sunlight_propagates = true, + paramtype = 'light', + paramtype2 = 'wallmounted', + walkable = false, + groups = { snappy = 3, poisonivy=1, flora_block=1 }, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "wallmounted", + --wall_side = = + }, + buildable_to = true, +}) diff --git a/mods/vipworld/poisonivy/locale/pt_BR.txt b/mods/vipworld/poisonivy/locale/pt_BR.txt new file mode 100644 index 00000000..9f61092e --- /dev/null +++ b/mods/vipworld/poisonivy/locale/pt_BR.txt @@ -0,0 +1,5 @@ +Poison ivy (seedling) = Hera venenosa (plantilha) +Poison ivy (sproutling) = Hera venenosa (brotando) +Poison ivy (climbing plant) = Hera venenosa (planta trepadeira) + +[Poison Ivy] Loaded. =[Poison Ivy] Carregado diff --git a/mods/vipworld/poisonivy/textures/poisonivy_climbing.png b/mods/vipworld/poisonivy/textures/poisonivy_climbing.png new file mode 100644 index 00000000..f53f7a39 Binary files /dev/null and b/mods/vipworld/poisonivy/textures/poisonivy_climbing.png differ diff --git a/mods/vipworld/poisonivy/textures/poisonivy_seedling.png b/mods/vipworld/poisonivy/textures/poisonivy_seedling.png new file mode 100644 index 00000000..281fa754 Binary files /dev/null and b/mods/vipworld/poisonivy/textures/poisonivy_seedling.png differ diff --git a/mods/vipworld/poisonivy/textures/poisonivy_sproutling.png b/mods/vipworld/poisonivy/textures/poisonivy_sproutling.png new file mode 100644 index 00000000..92d27429 Binary files /dev/null and b/mods/vipworld/poisonivy/textures/poisonivy_sproutling.png differ diff --git a/mods/walls/README.txt b/mods/walls/README.txt new file mode 100644 index 00000000..ba33bd77 --- /dev/null +++ b/mods/walls/README.txt @@ -0,0 +1,7 @@ +Minetest Game mod: walls +======================== +See license.txt for license information. + +Authors of source code +---------------------- +Auke Kok (LGPLv2.1+) diff --git a/mods/walls/init.lua b/mods/walls/init.lua new file mode 100644 index 00000000..b2a163fc --- /dev/null +++ b/mods/walls/init.lua @@ -0,0 +1,67 @@ +-- walls/init.lua + +walls = {} + +local fence_collision_extra = minetest.settings:get_bool("enable_fence_tall") and 3/8 or 0 + +-- Load support for MT game translation. +local S = minetest.get_translator("walls") + +walls.register = function(wall_name, wall_desc, wall_texture_table, wall_mat, wall_sounds) + --make wall_texture_table paramenter backwards compatible for mods passing single texture + if type(wall_texture_table) ~= "table" then + wall_texture_table = { wall_texture_table } + end + -- inventory node, and pole-type wall start item + minetest.register_node(wall_name, { + description = wall_desc, + drawtype = "nodebox", + node_box = { + type = "connected", + fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4}, + -- connect_bottom = + connect_front = {-3/16, -1/2, -1/2, 3/16, 3/8, -1/4}, + connect_left = {-1/2, -1/2, -3/16, -1/4, 3/8, 3/16}, + connect_back = {-3/16, -1/2, 1/4, 3/16, 3/8, 1/2}, + connect_right = { 1/4, -1/2, -3/16, 1/2, 3/8, 3/16}, + }, + collision_box = { + type = "connected", + fixed = {-1/4, -1/2, -1/4, 1/4, 1/2 + fence_collision_extra, 1/4}, + -- connect_top = + -- connect_bottom = + connect_front = {-1/4,-1/2,-1/2,1/4,1/2 + fence_collision_extra,-1/4}, + connect_left = {-1/2,-1/2,-1/4,-1/4,1/2 + fence_collision_extra,1/4}, + connect_back = {-1/4,-1/2,1/4,1/4,1/2 + fence_collision_extra,1/2}, + connect_right = {1/4,-1/2,-1/4,1/2,1/2 + fence_collision_extra,1/4}, + }, + connects_to = { "group:wall", "group:stone", "group:fence" }, + paramtype = "light", + is_ground_content = false, + tiles = wall_texture_table, + walkable = true, + groups = { cracky = 3, wall = 1, stone = 2 }, + sounds = wall_sounds, + }) + + -- crafting recipe + minetest.register_craft({ + output = wall_name .. " 6", + recipe = { + { "", "", "" }, + { wall_mat, wall_mat, wall_mat}, + { wall_mat, wall_mat, wall_mat}, + } + }) + +end + +walls.register("walls:cobble", S("Cobblestone Wall"), {"default_cobble.png"}, + "default:cobble", default.node_sound_stone_defaults()) + +walls.register("walls:mossycobble", S("Mossy Cobblestone Wall"), {"default_mossycobble.png"}, + "default:mossycobble", default.node_sound_stone_defaults()) + +walls.register("walls:desertcobble", S("Desert Cobblestone Wall"), {"default_desert_cobble.png"}, + "default:desert_cobble", default.node_sound_stone_defaults()) + diff --git a/mods/walls/license.txt b/mods/walls/license.txt new file mode 100644 index 00000000..ccfaf1cd --- /dev/null +++ b/mods/walls/license.txt @@ -0,0 +1,14 @@ +License of source code +---------------------- + +GNU Lesser General Public License, version 2.1 +Copyright (C) 2015 Auke Kok + +This program is free software; you can redistribute it and/or modify it under the terms +of the GNU Lesser General Public License as published by the Free Software Foundation; +either version 2.1 of the License, or (at your option) any later version. + +This program 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 Lesser General Public License for more details: +https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html diff --git a/mods/walls/locale/template.txt b/mods/walls/locale/template.txt new file mode 100644 index 00000000..6721dc6f --- /dev/null +++ b/mods/walls/locale/template.txt @@ -0,0 +1,4 @@ +# textdomain: walls +Cobblestone Wall= +Mossy Cobblestone Wall= +Desert Cobblestone Wall= diff --git a/mods/walls/locale/walls.de.tr b/mods/walls/locale/walls.de.tr new file mode 100644 index 00000000..c31d4f67 --- /dev/null +++ b/mods/walls/locale/walls.de.tr @@ -0,0 +1,4 @@ +# textdomain: walls +Cobblestone Wall=Kopfsteinpflastermauer +Mossy Cobblestone Wall=Moosige Kopfsteinpflastermauer +Desert Cobblestone Wall=Wüstenkopfsteinpflastermauer diff --git a/mods/walls/locale/walls.eo.tr b/mods/walls/locale/walls.eo.tr new file mode 100644 index 00000000..85efcbf5 --- /dev/null +++ b/mods/walls/locale/walls.eo.tr @@ -0,0 +1,4 @@ +# textdomain: walls +Cobblestone Wall=Pavimŝtona Muro +Mossy Cobblestone Wall=Muska Pavimŝtona Muro +Desert Cobblestone Wall=Dezerta Pavimŝtona Muro diff --git a/mods/walls/locale/walls.es.tr b/mods/walls/locale/walls.es.tr new file mode 100644 index 00000000..796710fe --- /dev/null +++ b/mods/walls/locale/walls.es.tr @@ -0,0 +1,4 @@ +# textdomain: walls +Cobblestone Wall=Pared de adoquines +Mossy Cobblestone Wall=Pared de adoquines musgosos +Desert Cobblestone Wall=Pared de adoquines desérticos diff --git a/mods/walls/locale/walls.fr.tr b/mods/walls/locale/walls.fr.tr new file mode 100644 index 00000000..8dcb6252 --- /dev/null +++ b/mods/walls/locale/walls.fr.tr @@ -0,0 +1,4 @@ +# textdomain: walls +Cobblestone Wall=Mur en pavé +Mossy Cobblestone Wall=Mur en pavé moussu +Desert Cobblestone Wall=Mur en pavé du désert diff --git a/mods/walls/locale/walls.id.tr b/mods/walls/locale/walls.id.tr new file mode 100644 index 00000000..8bfd9c77 --- /dev/null +++ b/mods/walls/locale/walls.id.tr @@ -0,0 +1,4 @@ +# textdomain: walls +Cobblestone Wall=Tembok Bongkahan Batu +Mossy Cobblestone Wall=Tembok Bongkahan Batu Berlumut +Desert Cobblestone Wall=Tembok Bongkahan Batu Gurun diff --git a/mods/walls/locale/walls.it.tr b/mods/walls/locale/walls.it.tr new file mode 100644 index 00000000..4babad23 --- /dev/null +++ b/mods/walls/locale/walls.it.tr @@ -0,0 +1,4 @@ +# textdomain: walls +Cobblestone Wall=Muro di ciottoli +Mossy Cobblestone Wall=Muro di ciottoli muschiosi +Desert Cobblestone Wall=Muro di ciottoli del deserto diff --git a/mods/walls/locale/walls.ja.tr b/mods/walls/locale/walls.ja.tr new file mode 100644 index 00000000..66e497d0 --- /dev/null +++ b/mods/walls/locale/walls.ja.tr @@ -0,0 +1,4 @@ +# textdomain: walls +Cobblestone Wall=丸石の壁 +Mossy Cobblestone Wall=苔むした丸石の壁 +Desert Cobblestone Wall=砂漠の丸石の壁 diff --git a/mods/walls/locale/walls.jbo.tr b/mods/walls/locale/walls.jbo.tr new file mode 100644 index 00000000..aba765cf --- /dev/null +++ b/mods/walls/locale/walls.jbo.tr @@ -0,0 +1,4 @@ +# textdomain: walls +Cobblestone Wall=lo lolro'iboi bitmu +Mossy Cobblestone Wall=lo clika lolro'iboi bitmu +Desert Cobblestone Wall=lo cantu'a lolro'iboi bitmu diff --git a/mods/walls/locale/walls.ms.tr b/mods/walls/locale/walls.ms.tr new file mode 100644 index 00000000..93753429 --- /dev/null +++ b/mods/walls/locale/walls.ms.tr @@ -0,0 +1,4 @@ +# textdomain: walls +Cobblestone Wall=Pagar Batu Buntar +Mossy Cobblestone Wall=Pagar Batu Buntar Berlumut +Desert Cobblestone Wall=Pagar Batu Buntar Gurun diff --git a/mods/walls/locale/walls.pl.tr b/mods/walls/locale/walls.pl.tr new file mode 100644 index 00000000..ff544e20 --- /dev/null +++ b/mods/walls/locale/walls.pl.tr @@ -0,0 +1,4 @@ +# textdomain: walls +Cobblestone Wall=Brukowa ściana +Mossy Cobblestone Wall=Brukowa ściana z mchem +Desert Cobblestone Wall=Pustynno-brukowa ściana diff --git a/mods/walls/locale/walls.pt_BR.tr b/mods/walls/locale/walls.pt_BR.tr new file mode 100644 index 00000000..58c3d122 --- /dev/null +++ b/mods/walls/locale/walls.pt_BR.tr @@ -0,0 +1,4 @@ +# textdomain: walls +Cobblestone Wall=Parede de Paralelepípedo +Mossy Cobblestone Wall=Parede de Paralelepípedo com Musgo +Desert Cobblestone Wall=Parede de Paralelepípedo do Deserto diff --git a/mods/walls/locale/walls.ru.tr b/mods/walls/locale/walls.ru.tr new file mode 100644 index 00000000..1ed653f0 --- /dev/null +++ b/mods/walls/locale/walls.ru.tr @@ -0,0 +1,4 @@ +# textdomain: walls +Cobblestone Wall=Булыжниковая Ограда +Mossy Cobblestone Wall=Мшистая Булыжниковая Ограда +Desert Cobblestone Wall=Ограда Из Пустынного Булыжника diff --git a/mods/walls/locale/walls.sk.tr b/mods/walls/locale/walls.sk.tr new file mode 100644 index 00000000..69cf3a93 --- /dev/null +++ b/mods/walls/locale/walls.sk.tr @@ -0,0 +1,4 @@ +# textdomain: walls +Cobblestone Wall=Múr z dlažbových kociek +Mossy Cobblestone Wall=Múr z dlažbových kociek obrastených machom +Desert Cobblestone Wall=Múr z púštnych dlažbových kociek diff --git a/mods/walls/locale/walls.sv.tr b/mods/walls/locale/walls.sv.tr new file mode 100644 index 00000000..1ad4a29e --- /dev/null +++ b/mods/walls/locale/walls.sv.tr @@ -0,0 +1,4 @@ +# textdomain: walls +Cobblestone Wall=Kullerstensvägg +Mossy Cobblestone Wall=Mossig kullerstensvägg +Desert Cobblestone Wall=Ökenkullerstensvägg diff --git a/mods/walls/locale/walls.uk.tr b/mods/walls/locale/walls.uk.tr new file mode 100644 index 00000000..f92d7cc4 --- /dev/null +++ b/mods/walls/locale/walls.uk.tr @@ -0,0 +1,4 @@ +# textdomain: walls +Cobblestone Wall=Паркан З Кругляку +Mossy Cobblestone Wall=Паркан З Мохового Кругляку +Desert Cobblestone Wall=Паркан З Пустельного Кругляку diff --git a/mods/walls/locale/walls.zh_CN.tr b/mods/walls/locale/walls.zh_CN.tr new file mode 100644 index 00000000..f590e825 --- /dev/null +++ b/mods/walls/locale/walls.zh_CN.tr @@ -0,0 +1,4 @@ +# textdomain: walls +Cobblestone Wall=鹅卵石墙 +Mossy Cobblestone Wall=苔藓覆盖的鹅卵石墙 +Desert Cobblestone Wall=沙漠鹅卵石墙 diff --git a/mods/walls/locale/walls.zh_TW.tr b/mods/walls/locale/walls.zh_TW.tr new file mode 100644 index 00000000..ba1285f6 --- /dev/null +++ b/mods/walls/locale/walls.zh_TW.tr @@ -0,0 +1,4 @@ +# textdomain: walls +Cobblestone Wall=鵝卵石牆 +Mossy Cobblestone Wall=苔蘚覆蓋的鵝卵石牆 +Desert Cobblestone Wall=沙漠鵝卵石牆 diff --git a/mods/walls/mod.conf b/mods/walls/mod.conf new file mode 100644 index 00000000..9b8bbe84 --- /dev/null +++ b/mods/walls/mod.conf @@ -0,0 +1,3 @@ +name = walls +description = Minetest Game mod: walls +depends = default diff --git a/mods/wardrobe b/mods/wardrobe new file mode 160000 index 00000000..369c0880 --- /dev/null +++ b/mods/wardrobe @@ -0,0 +1 @@ +Subproject commit 369c088067b35ee28c268ee390095db2dcf40dca diff --git a/mods/we_undo b/mods/we_undo new file mode 160000 index 00000000..c10b3328 --- /dev/null +++ b/mods/we_undo @@ -0,0 +1 @@ +Subproject commit c10b33281354e0d1e366d7c41490f2622c753919 diff --git a/mods/weather/README.txt b/mods/weather/README.txt new file mode 100644 index 00000000..67334600 --- /dev/null +++ b/mods/weather/README.txt @@ -0,0 +1,4 @@ +Minetest Game mod: weather +========================== +See license.txt for license information. +Source code by paramat (MIT). diff --git a/mods/weather/init.lua b/mods/weather/init.lua new file mode 100644 index 00000000..0214af27 --- /dev/null +++ b/mods/weather/init.lua @@ -0,0 +1,135 @@ +-- Disable by mapgen or setting + +local mg_name = minetest.get_mapgen_setting("mg_name") +if minetest.settings:get_bool("enable_weather") == false then + return +end + +if mg_name == "v6" or mg_name == "singlenode" then + -- set a default shadow intensity for mgv6 and singlenode + minetest.register_on_joinplayer(function(player) + player:set_lighting({ shadows = { intensity = 0.33 } }) + end) + + return +end + +-- Parameters + +local TSCALE = 600 -- Time scale of noise variation in seconds +local CYCLE = 8 -- Time period of cyclic clouds update in seconds + +local np_density = { + offset = 0.5, + scale = 0.5, + spread = {x = TSCALE, y = TSCALE, z = TSCALE}, + seed = 813, + octaves = 1, + persist = 0, + lacunarity = 2, +} + +local np_thickness = { + offset = 0.5, + scale = 0.5, + spread = {x = TSCALE, y = TSCALE, z = TSCALE}, + seed = 96, + octaves = 1, + persist = 0, + lacunarity = 2, +} + +local np_speedx = { + offset = 0, + scale = 1, + spread = {x = TSCALE, y = TSCALE, z = TSCALE}, + seed = 911923, + octaves = 1, + persist = 0, + lacunarity = 2, +} + +local np_speedz = { + offset = 0, + scale = 1, + spread = {x = TSCALE, y = TSCALE, z = TSCALE}, + seed = 5728, + octaves = 1, + persist = 0, + lacunarity = 2, +} + +-- End parameters + + +-- Initialise noise objects to nil + +local nobj_density = nil +local nobj_thickness = nil +local nobj_speedx = nil +local nobj_speedz = nil + + +-- Update clouds function + +local function rangelim(value, lower, upper) + return math.min(math.max(value, lower), upper) +end + +local os_time_0 = os.time() +local t_offset = math.random(0, 300000) + +local function update_clouds() + -- Time in seconds. + -- Add random time offset to avoid identical behaviour each server session. + local time = os.difftime(os.time(), os_time_0) - t_offset + + nobj_density = nobj_density or minetest.get_perlin(np_density) + nobj_thickness = nobj_thickness or minetest.get_perlin(np_thickness) + nobj_speedx = nobj_speedx or minetest.get_perlin(np_speedx) + nobj_speedz = nobj_speedz or minetest.get_perlin(np_speedz) + + local n_density = nobj_density:get_2d({x = time, y = 0}) -- 0 to 1 + local n_thickness = nobj_thickness:get_2d({x = time, y = 0}) -- 0 to 1 + local n_speedx = nobj_speedx:get_2d({x = time, y = 0}) -- -1 to 1 + local n_speedz = nobj_speedz:get_2d({x = time, y = 0}) -- -1 to 1 + + for _, player in ipairs(minetest.get_connected_players()) do + -- Fallback to mid-value 50 for very old worlds + local humid = minetest.get_humidity(player:get_pos()) or 50 + -- Default and classic density value is 0.4, make this happen + -- at humidity midvalue 50 when n_density is at midvalue 0.5. + -- density_max = 0.25 at humid = 0. + -- density_max = 0.8 at humid = 50. + -- density_max = 1.35 at humid = 100. + local density_max = 0.8 + ((humid - 50) / 50) * 0.55 + local density = rangelim(density_max, 0.2, 1.0) * n_density + player:set_clouds({ + -- Range limit density_max to always have occasional + -- small scattered clouds at extreme low humidity. + density = density, + thickness = math.max(math.floor( + rangelim(32 * humid / 100, 8, 32) * n_thickness + ), 2), + speed = {x = n_speedx * 4, z = n_speedz * 4}, + }) + -- now adjust the shadow intensity + player:set_lighting({ shadows = { intensity = 0.7 * (1 - density) } }) + end +end + + +local function cyclic_update() + update_clouds() + minetest.after(CYCLE, cyclic_update) +end + + +minetest.after(0, cyclic_update) + + +-- Update on player join to instantly alter clouds from the default + +minetest.register_on_joinplayer(function(player) + update_clouds() +end) diff --git a/mods/weather/license.txt b/mods/weather/license.txt new file mode 100644 index 00000000..33baa06d --- /dev/null +++ b/mods/weather/license.txt @@ -0,0 +1,24 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2019 paramat + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT diff --git a/mods/weather/mod.conf b/mods/weather/mod.conf new file mode 100644 index 00000000..436ce678 --- /dev/null +++ b/mods/weather/mod.conf @@ -0,0 +1,2 @@ +name = weather +description = Minetest Game mod: weather diff --git a/mods/wiki b/mods/wiki new file mode 160000 index 00000000..fdbfb4ef --- /dev/null +++ b/mods/wiki @@ -0,0 +1 @@ +Subproject commit fdbfb4efe1d01a89cb2234d95f951fbb361d6d25 diff --git a/mods/wine b/mods/wine new file mode 160000 index 00000000..b5f94f49 --- /dev/null +++ b/mods/wine @@ -0,0 +1 @@ +Subproject commit b5f94f49dab6212d46b032cea8ada47abf1ee62e diff --git a/mods/wool/README.txt b/mods/wool/README.txt new file mode 100644 index 00000000..a66677dd --- /dev/null +++ b/mods/wool/README.txt @@ -0,0 +1,16 @@ +Minetest Game mod: wool +======================= +See license.txt for license information. + +Authors of source code +---------------------- +Originally by Perttu Ahola (celeron55) (MIT) +Various Minetest developers and contributors (MIT) + +Authors of media (textures) +--------------------------- +Cisoun (CC BY-SA 3.0): + wool_black.png wool_brown.png wool_dark_green.png wool_green.png + wool_magenta.png wool_pink.png wool_violet.png wool_yellow.png + wool_blue.png wool_cyan.png wool_dark_grey.png wool_grey.png + wool_orange.png wool_red.png wool_white.png diff --git a/mods/wool/init.lua b/mods/wool/init.lua new file mode 100644 index 00000000..4cf7dc3a --- /dev/null +++ b/mods/wool/init.lua @@ -0,0 +1,52 @@ +-- wool/init.lua + +-- Load support for MT game translation. +local S = minetest.get_translator("wool") + +local dyes = dye.dyes + +for i = 1, #dyes do + local name, desc = unpack(dyes[i]) + + minetest.register_node("wool:" .. name, { + description = S(desc .. " Wool"), + tiles = {"wool_" .. name .. ".png"}, + is_ground_content = false, + groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 3, + flammable = 3, wool = 1}, + sounds = default.node_sound_defaults(), + }) + + minetest.register_craft{ + type = "shapeless", + output = "wool:" .. name, + recipe = {"group:dye,color_" .. name, "group:wool"}, + } +end + +-- Legacy +-- Backwards compatibility with jordach's 16-color wool mod +minetest.register_alias("wool:dark_blue", "wool:blue") +minetest.register_alias("wool:gold", "wool:yellow") + +-- Dummy calls to S() to allow translation scripts to detect the strings. +-- To update this run: +-- for _,e in ipairs(dye.dyes) do print(("S(%q)"):format(e[2].." Wool")) end + +--[[ +S("White Wool") +S("Grey Wool") +S("Dark Grey Wool") +S("Black Wool") +S("Violet Wool") +S("Blue Wool") +S("Cyan Wool") +S("Dark Green Wool") +S("Green Wool") +S("Yellow Wool") +S("Brown Wool") +S("Orange Wool") +S("Red Wool") +S("Magenta Wool") +S("Pink Wool") +--]] diff --git a/mods/wool/license.txt b/mods/wool/license.txt new file mode 100644 index 00000000..93101636 --- /dev/null +++ b/mods/wool/license.txt @@ -0,0 +1,60 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2012-2016 Perttu Ahola (celeron55) +Copyright (C) 2012-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2012-2016 Cisoun + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/wool/locale/template.txt b/mods/wool/locale/template.txt new file mode 100644 index 00000000..316cd2c0 --- /dev/null +++ b/mods/wool/locale/template.txt @@ -0,0 +1,16 @@ +# textdomain: wool +White Wool= +Grey Wool= +Dark Grey Wool= +Black Wool= +Violet Wool= +Blue Wool= +Cyan Wool= +Dark Green Wool= +Green Wool= +Yellow Wool= +Brown Wool= +Orange Wool= +Red Wool= +Magenta Wool= +Pink Wool= diff --git a/mods/wool/locale/wool.de.tr b/mods/wool/locale/wool.de.tr new file mode 100644 index 00000000..9b6b8ab8 --- /dev/null +++ b/mods/wool/locale/wool.de.tr @@ -0,0 +1,16 @@ +# textdomain: wool +White Wool=Weiße Wolle +Grey Wool=Graue Wolle +Dark Grey Wool=Dunkelgraue Wolle +Black Wool=Schwarze Wolle +Violet Wool=Violette Wolle +Blue Wool=Blaue Wolle +Cyan Wool=Türkise Wolle +Dark Green Wool=Dunkelgrüne Wolle +Green Wool=Grüne Wolle +Yellow Wool=Gelbe Wolle +Brown Wool=Braune Wolle +Orange Wool=Orange Wolle +Red Wool=Rote Wolle +Magenta Wool=Magenta Wolle +Pink Wool=Rosa Wolle diff --git a/mods/wool/locale/wool.eo.tr b/mods/wool/locale/wool.eo.tr new file mode 100644 index 00000000..16e3e004 --- /dev/null +++ b/mods/wool/locale/wool.eo.tr @@ -0,0 +1,16 @@ +# textdomain: wool +White Wool=Blanka Lano +Grey Wool=Griza Lano +Dark Grey Wool=Malhela Griza Lano +Black Wool=Nigra Lano +Violet Wool=Violkolora Lano +Blue Wool=Blua Lano +Cyan Wool=Bluverda Lano +Dark Green Wool=Malhela Verda Lano +Green Wool=Verda Lano +Yellow Wool=Flava Lano +Brown Wool=Bruna Lano +Orange Wool=Oranĝkolora Lano +Red Wool=Ruĝa Lano +Magenta Wool=Fuksina Lano +Pink Wool=Rozkolora Lano diff --git a/mods/wool/locale/wool.es.tr b/mods/wool/locale/wool.es.tr new file mode 100644 index 00000000..ac155920 --- /dev/null +++ b/mods/wool/locale/wool.es.tr @@ -0,0 +1,16 @@ +# textdomain: wool +White Wool=Lana blanca +Grey Wool=Lana gris +Dark Grey Wool=Lana gris oscuro +Black Wool=Lana negra +Violet Wool=Lana violeta +Blue Wool=Lana azul +Cyan Wool=Lana cián +Dark Green Wool=Lana verde oscuro +Green Wool=Lana verde +Yellow Wool=Lana amarilla +Brown Wool=Lana marrón +Orange Wool=Lana naranja +Red Wool=Lana roja +Magenta Wool=Lana magenta +Pink Wool=Lana rosa diff --git a/mods/wool/locale/wool.fr.tr b/mods/wool/locale/wool.fr.tr new file mode 100644 index 00000000..48a60a7e --- /dev/null +++ b/mods/wool/locale/wool.fr.tr @@ -0,0 +1,16 @@ +# textdomain: wool +White Wool=Laine blanche +Grey Wool=Laine grise +Dark Grey Wool=Laine grise foncée +Black Wool=Laine noire +Violet Wool=Laine violette +Blue Wool=Laine bleue +Cyan Wool=Laine cyan +Dark Green Wool=Laine verte foncée +Green Wool=Laine verte +Yellow Wool=Laine jaune +Brown Wool=Laine marron +Orange Wool=Laine orange +Red Wool=Laine rouge +Magenta Wool=Laine magenta +Pink Wool=Laine rose diff --git a/mods/wool/locale/wool.id.tr b/mods/wool/locale/wool.id.tr new file mode 100644 index 00000000..2448e436 --- /dev/null +++ b/mods/wool/locale/wool.id.tr @@ -0,0 +1,16 @@ +# textdomain: wool +White Wool=Wol Putih +Grey Wool=Wol Abu +Dark Grey Wool=Wol Abu Tua +Black Wool=Wol Hitam +Violet Wool=Wol Ungu +Blue Wool=Wol Biru +Cyan Wool=Wol Sian +Dark Green Wool=Wol Hijau Tua +Green Wool=Wol Hijau +Yellow Wool=Wol Kuning +Brown Wool=Wol Cokelat +Orange Wool=Wol Oranye +Red Wool=Wol Merah +Magenta Wool=Wol Magenta +Pink Wool=Wol Merah Jambu diff --git a/mods/wool/locale/wool.it.tr b/mods/wool/locale/wool.it.tr new file mode 100644 index 00000000..8108f2fc --- /dev/null +++ b/mods/wool/locale/wool.it.tr @@ -0,0 +1,16 @@ +# textdomain: wool +White Wool=Lana bianca +Grey Wool=Lana grigia +Dark Grey Wool=Lana grigia scura +Black Wool=Lana nera +Violet Wool=Lana viola +Blue Wool=Lana blu +Cyan Wool=Lana ciano +Dark Green Wool=Lana verde scura +Green Wool=Lana verde +Yellow Wool=Lana gialla +Brown Wool=Lana marrone +Orange Wool=Lana arancione +Red Wool=Lana rossa +Magenta Wool=Lana magenta +Pink Wool=Lana rosa diff --git a/mods/wool/locale/wool.ja.tr b/mods/wool/locale/wool.ja.tr new file mode 100644 index 00000000..5051f9e7 --- /dev/null +++ b/mods/wool/locale/wool.ja.tr @@ -0,0 +1,16 @@ +# textdomain: wool +White Wool=白色の羊毛 +Grey Wool=灰色の羊毛 +Dark Grey Wool=濃灰色の羊毛 +Black Wool=黒色の羊毛 +Violet Wool=紫色の羊毛 +Blue Wool=青色の羊毛 +Cyan Wool=青緑色の羊毛 +Dark Green Wool=濃緑色の羊毛 +Green Wool=緑色の羊毛 +Yellow Wool=黄色の羊毛 +Brown Wool=茶色の羊毛 +Orange Wool=橙色の羊毛 +Red Wool=赤色の羊毛 +Magenta Wool=赤紫色の羊毛 +Pink Wool=桃色の羊毛 diff --git a/mods/wool/locale/wool.jbo.tr b/mods/wool/locale/wool.jbo.tr new file mode 100644 index 00000000..4bf44ecf --- /dev/null +++ b/mods/wool/locale/wool.jbo.tr @@ -0,0 +1,16 @@ +# textdomain: wool +White Wool=lo blabi sunla +Grey Wool=lo grusi sunla +Dark Grey Wool=lo xekri grusi sunla +Black Wool=lo xekri sunla +Violet Wool=lo zirpu sunla +Blue Wool=lo blanu sunla +Cyan Wool=lo cicna sunla +Dark Green Wool=lo xekri crino sunla +Green Wool=lo crino sunla +Yellow Wool=lo pelxu sunla +Brown Wool=lo bunre sunla +Orange Wool=lo narju sunla +Red Wool=lo xunre sunla +Magenta Wool=lo nukni sunla +Pink Wool=lo xunblabi sunla diff --git a/mods/wool/locale/wool.ms.tr b/mods/wool/locale/wool.ms.tr new file mode 100644 index 00000000..18b54805 --- /dev/null +++ b/mods/wool/locale/wool.ms.tr @@ -0,0 +1,16 @@ +# textdomain: wool +White Wool=Bulu Biri-Biri Putih +Grey Wool=Bulu Biri-Biri Kelabu +Dark Grey Wool=Bulu Biri-Biri Kelabu Gelap +Black Wool=Bulu Biri-Biri Hitam +Violet Wool=Bulu Biri-Biri Ungu +Blue Wool=Bulu Biri-Biri Biru +Cyan Wool=Bulu Biri-Biri Biru Kehijauan +Dark Green Wool=Bulu Biri-Biri Hijau Gelap +Green Wool=Bulu Biri-Biri Hijau +Yellow Wool=Bulu Biri-Biri Kuning +Brown Wool=Bulu Biri-Biri Perang +Orange Wool=Bulu Biri-Biri Jingga +Red Wool=Bulu Biri-Biri Merah +Magenta Wool=Bulu Biri-Biri Merah Lembayung +Pink Wool=Bulu Biri-Biri Merah Jambu diff --git a/mods/wool/locale/wool.pl.tr b/mods/wool/locale/wool.pl.tr new file mode 100644 index 00000000..9c411c81 --- /dev/null +++ b/mods/wool/locale/wool.pl.tr @@ -0,0 +1,16 @@ +# textdomain: wool +White Wool=Biała wełna +Grey Wool=Szara wełna +Dark Grey Wool=Ciemnoszara wełna +Black Wool=Czarna wełna +Violet Wool=Fioletowa wełna +Blue Wool=Niebieska wełna +Cyan Wool=Cyjanowa wełna +Dark Green Wool=Ciemnozielona wełna +Green Wool=Zielona wełna +Yellow Wool=Żółta wełna +Brown Wool=Brązowa wełna +Orange Wool=Pomarańczowa wełna +Red Wool=Czerwona wełna +Magenta Wool=Karmazynowa wełna +Pink Wool=Różowa wełna diff --git a/mods/wool/locale/wool.pt_BR.tr b/mods/wool/locale/wool.pt_BR.tr new file mode 100644 index 00000000..7676191e --- /dev/null +++ b/mods/wool/locale/wool.pt_BR.tr @@ -0,0 +1,16 @@ +# textdomain: wool +White Wool=Lã Branca +Grey Wool=Lã Cinza +Dark Grey Wool=Lã Cinza-escuro +Black Wool=Lã Preta +Violet Wool=Lã Violeta +Blue Wool=Lã Azul +Cyan Wool=Lã Ciano +Dark Green Wool=Lã Verde-escuro +Green Wool=Lã Verde +Yellow Wool=Lã Amarela +Brown Wool=Lã Marrom +Orange Wool=Lã Laranja +Red Wool=Lã Vermelha +Magenta Wool=Lã Magenta +Pink Wool=Lã Rosa diff --git a/mods/wool/locale/wool.ru.tr b/mods/wool/locale/wool.ru.tr new file mode 100644 index 00000000..f5a98aa1 --- /dev/null +++ b/mods/wool/locale/wool.ru.tr @@ -0,0 +1,16 @@ +# textdomain: wool +White Wool=Белая Шерсть +Grey Wool=Серая Шерсть +Dark Grey Wool=Тёмно-Серая Шерсть +Black Wool=Чёрная Шерсть +Violet Wool=Фиолетовая Шерсть +Blue Wool=Синяя Шерсть +Cyan Wool=Голубая Шерсть +Dark Green Wool=Тёмно-Зелёная Шерсть +Green Wool=Зелёная Шерсть +Yellow Wool=Жёлтая Шерсть +Brown Wool=Коричневая Шерсть +Orange Wool=Оранжевая Шерсть +Red Wool=Красная Шерсть +Magenta Wool=Пурпурная Шерсть +Pink Wool=Розовая Шерсть diff --git a/mods/wool/locale/wool.sk.tr b/mods/wool/locale/wool.sk.tr new file mode 100644 index 00000000..755370e8 --- /dev/null +++ b/mods/wool/locale/wool.sk.tr @@ -0,0 +1,16 @@ +# textdomain: wool +White Wool=Biela vlna +Grey Wool=Šedá vlna +Dark Grey Wool=Tmavošedá vlna +Black Wool=Čierna vlna +Violet Wool=Fialová vlna +Blue Wool=Modrá vlna +Cyan Wool=Tyrkysová vlna +Dark Green Wool=Tmavozelená vlna +Green Wool=Zelená vlna +Yellow Wool=Žltá vlna +Brown Wool=Hnedá vlna +Orange Wool=Oranžová vlna +Red Wool=Červená vlna +Magenta Wool=Purpurová vlna +Pink Wool=Ružová vlna diff --git a/mods/wool/locale/wool.sv.tr b/mods/wool/locale/wool.sv.tr new file mode 100644 index 00000000..bfce2140 --- /dev/null +++ b/mods/wool/locale/wool.sv.tr @@ -0,0 +1,16 @@ +# textdomain: wool +White Wool=Vit ull +Grey Wool=Grå ull +Dark Grey Wool=Mörkgrå ull +Black Wool=Svart ull +Violet Wool=Violett ull +Blue Wool=Blå ull +Cyan Wool=Cyan ull +Dark Green Wool=Mörkgrön ull +Green Wool=Grön ull +Yellow Wool=Gul ull +Brown Wool=Brun ull +Orange Wool=Orange ull +Red Wool=Röd ull +Magenta Wool=Magenta ull +Pink Wool=Rosa ull diff --git a/mods/wool/locale/wool.uk.tr b/mods/wool/locale/wool.uk.tr new file mode 100644 index 00000000..b9a3f7a1 --- /dev/null +++ b/mods/wool/locale/wool.uk.tr @@ -0,0 +1,16 @@ +# textdomain: wool +White Wool=Біла Шерсть +Grey Wool=Сіра Шерсть +Dark Grey Wool=Темно-Сіра Шерсть +Black Wool=Чорна Шерсть +Violet Wool=Фіолетова Шерсть +Blue Wool=Синя Шерсть +Cyan Wool=Голуба Шерсть +Dark Green Wool=Темно-Зелена Шерсть +Green Wool=Зелена Шерсть +Yellow Wool=Жовта Шерсть +Brown Wool=Коричнева Шерсть +Orange Wool=Оранжева Шерсть +Red Wool=Червона Шерсть +Magenta Wool=Пурпурна Шерсть +Pink Wool=Рожева Шерсть diff --git a/mods/wool/locale/wool.zh_CN.tr b/mods/wool/locale/wool.zh_CN.tr new file mode 100644 index 00000000..caac9ee2 --- /dev/null +++ b/mods/wool/locale/wool.zh_CN.tr @@ -0,0 +1,16 @@ +# textdomain: wool +White Wool=白羊毛 +Grey Wool=灰羊毛 +Dark Grey Wool=暗灰羊毛 +Black Wool=黑羊毛 +Violet Wool=紫羊毛 +Blue Wool=蓝羊毛 +Cyan Wool=青羊毛 +Dark Green Wool=暗绿羊毛 +Green Wool=绿羊毛 +Yellow Wool=黄羊毛 +Brown Wool=棕羊毛 +Orange Wool=橙羊毛 +Red Wool=红羊毛 +Magenta Wool=品红羊毛 +Pink Wool=粉红羊毛 diff --git a/mods/wool/locale/wool.zh_TW.tr b/mods/wool/locale/wool.zh_TW.tr new file mode 100644 index 00000000..290a1fed --- /dev/null +++ b/mods/wool/locale/wool.zh_TW.tr @@ -0,0 +1,16 @@ +# textdomain: wool +White Wool=白羊毛 +Grey Wool=灰羊毛 +Dark Grey Wool=暗灰羊毛 +Black Wool=黑羊毛 +Violet Wool=紫羊毛 +Blue Wool=藍羊毛 +Cyan Wool=青羊毛 +Dark Green Wool=暗綠羊毛 +Green Wool=綠羊毛 +Yellow Wool=黃羊毛 +Brown Wool=棕羊毛 +Orange Wool=橙羊毛 +Red Wool=紅羊毛 +Magenta Wool=品紅羊毛 +Pink Wool=粉紅羊毛 diff --git a/mods/wool/mod.conf b/mods/wool/mod.conf new file mode 100644 index 00000000..a0ca3f0e --- /dev/null +++ b/mods/wool/mod.conf @@ -0,0 +1,3 @@ +name = wool +description = Minetest Game mod: wool +depends = default, dye diff --git a/mods/wool/textures/wool_black.png b/mods/wool/textures/wool_black.png new file mode 100644 index 00000000..700d439d Binary files /dev/null and b/mods/wool/textures/wool_black.png differ diff --git a/mods/wool/textures/wool_blue.png b/mods/wool/textures/wool_blue.png new file mode 100644 index 00000000..a0749867 Binary files /dev/null and b/mods/wool/textures/wool_blue.png differ diff --git a/mods/wool/textures/wool_brown.png b/mods/wool/textures/wool_brown.png new file mode 100644 index 00000000..2620dfdb Binary files /dev/null and b/mods/wool/textures/wool_brown.png differ diff --git a/mods/wool/textures/wool_cyan.png b/mods/wool/textures/wool_cyan.png new file mode 100644 index 00000000..395b6ac7 Binary files /dev/null and b/mods/wool/textures/wool_cyan.png differ diff --git a/mods/wool/textures/wool_dark_green.png b/mods/wool/textures/wool_dark_green.png new file mode 100644 index 00000000..0e73999e Binary files /dev/null and b/mods/wool/textures/wool_dark_green.png differ diff --git a/mods/wool/textures/wool_dark_grey.png b/mods/wool/textures/wool_dark_grey.png new file mode 100644 index 00000000..7253696e Binary files /dev/null and b/mods/wool/textures/wool_dark_grey.png differ diff --git a/mods/wool/textures/wool_green.png b/mods/wool/textures/wool_green.png new file mode 100644 index 00000000..dcb663be Binary files /dev/null and b/mods/wool/textures/wool_green.png differ diff --git a/mods/wool/textures/wool_grey.png b/mods/wool/textures/wool_grey.png new file mode 100644 index 00000000..2f4c3380 Binary files /dev/null and b/mods/wool/textures/wool_grey.png differ diff --git a/mods/wool/textures/wool_magenta.png b/mods/wool/textures/wool_magenta.png new file mode 100644 index 00000000..5c2c4a7a Binary files /dev/null and b/mods/wool/textures/wool_magenta.png differ diff --git a/mods/wool/textures/wool_orange.png b/mods/wool/textures/wool_orange.png new file mode 100644 index 00000000..a059f364 Binary files /dev/null and b/mods/wool/textures/wool_orange.png differ diff --git a/mods/wool/textures/wool_pink.png b/mods/wool/textures/wool_pink.png new file mode 100644 index 00000000..8e901407 Binary files /dev/null and b/mods/wool/textures/wool_pink.png differ diff --git a/mods/wool/textures/wool_red.png b/mods/wool/textures/wool_red.png new file mode 100644 index 00000000..da12ecff Binary files /dev/null and b/mods/wool/textures/wool_red.png differ diff --git a/mods/wool/textures/wool_violet.png b/mods/wool/textures/wool_violet.png new file mode 100644 index 00000000..d7d67831 Binary files /dev/null and b/mods/wool/textures/wool_violet.png differ diff --git a/mods/wool/textures/wool_white.png b/mods/wool/textures/wool_white.png new file mode 100644 index 00000000..88f1e2f5 Binary files /dev/null and b/mods/wool/textures/wool_white.png differ diff --git a/mods/wool/textures/wool_yellow.png b/mods/wool/textures/wool_yellow.png new file mode 100644 index 00000000..2b0f0489 Binary files /dev/null and b/mods/wool/textures/wool_yellow.png differ diff --git a/mods/worldedit b/mods/worldedit new file mode 160000 index 00000000..abc9efee --- /dev/null +++ b/mods/worldedit @@ -0,0 +1 @@ +Subproject commit abc9efeeb8cccb3e23c055414941fed4a9871b9a diff --git a/mods/xban2 b/mods/xban2 new file mode 160000 index 00000000..d2cda4f7 --- /dev/null +++ b/mods/xban2 @@ -0,0 +1 @@ +Subproject commit d2cda4f73a3a5372b70ffa63e2a16bf39d734e40 diff --git a/mods/xconnected b/mods/xconnected new file mode 160000 index 00000000..f61438a6 --- /dev/null +++ b/mods/xconnected @@ -0,0 +1 @@ +Subproject commit f61438a6bdc2cea2e444fdec4c4c453086df7edd diff --git a/mods/xdecor b/mods/xdecor new file mode 160000 index 00000000..9f75900c --- /dev/null +++ b/mods/xdecor @@ -0,0 +1 @@ +Subproject commit 9f75900c0c562c8e16a4ebce35a338754a88aaf9 diff --git a/mods/xpanes/README.txt b/mods/xpanes/README.txt new file mode 100644 index 00000000..0e34d232 --- /dev/null +++ b/mods/xpanes/README.txt @@ -0,0 +1,32 @@ +Minetest Game mod: xpanes +========================= +See license.txt for license information. + +Authors of source code +---------------------- +Originally by xyz (MIT) +BlockMen (MIT) +sofar (MIT) +Various Minetest developers and contributors (MIT) + +Authors of media (textures) +--------------------------- +xyz (CC BY-SA 3.0): + All textures not mentioned below. + +Gambit (CC BY-SA 3.0): + xpanes_bar.png + +paramat (CC BY-SA 3.0): + xpanes_bar_top.png + +Krock (CC0 1.0): + xpanes_edge.png + +TumeniNodes (CC BY-SA 3.0): + xpanes_door_steel_bar.png + xpanes_item_steel_bar.png + xpanes_trapdoor_steel_bar.png + xpanes_trapdoor_steel_bar_side.png + xpanes_steel_bar_door_close.ogg + xpanes_steel_bar_door_open.ogg diff --git a/mods/xpanes/init.lua b/mods/xpanes/init.lua new file mode 100644 index 00000000..a02dbfe4 --- /dev/null +++ b/mods/xpanes/init.lua @@ -0,0 +1,261 @@ +-- xpanes/init.lua + +-- Load support for MT game translation. +local S = minetest.get_translator("xpanes") + + +local function is_pane(pos) + return minetest.get_item_group(minetest.get_node(pos).name, "pane") > 0 +end + +local function connects_dir(pos, name, dir) + local aside = vector.add(pos, minetest.facedir_to_dir(dir)) + if is_pane(aside) then + return true + end + + local connects_to = minetest.registered_nodes[name].connects_to + if not connects_to then + return false + end + local list = minetest.find_nodes_in_area(aside, aside, connects_to) + + if #list > 0 then + return true + end + + return false +end + +local function swap(pos, node, name, param2) + if node.name == name and node.param2 == param2 then + return + end + + minetest.swap_node(pos, {name = name, param2 = param2}) +end + +local function update_pane(pos) + if not is_pane(pos) then + return + end + local node = minetest.get_node(pos) + local name = node.name + if name:sub(-5) == "_flat" then + name = name:sub(1, -6) + end + + local any = node.param2 + local c = {} + local count = 0 + for dir = 0, 3 do + c[dir] = connects_dir(pos, name, dir) + if c[dir] then + any = dir + count = count + 1 + end + end + + if count == 0 then + swap(pos, node, name .. "_flat", any) + elseif count == 1 then + swap(pos, node, name .. "_flat", (any + 1) % 4) + elseif count == 2 then + if (c[0] and c[2]) or (c[1] and c[3]) then + swap(pos, node, name .. "_flat", (any + 1) % 4) + else + swap(pos, node, name, 0) + end + else + swap(pos, node, name, 0) + end +end + +minetest.register_on_placenode(function(pos, node) + if minetest.get_item_group(node, "pane") then + update_pane(pos) + end + for i = 0, 3 do + local dir = minetest.facedir_to_dir(i) + update_pane(vector.add(pos, dir)) + end +end) + +minetest.register_on_dignode(function(pos) + for i = 0, 3 do + local dir = minetest.facedir_to_dir(i) + update_pane(vector.add(pos, dir)) + end +end) + +xpanes = {} +function xpanes.register_pane(name, def) + for i = 1, 15 do + minetest.register_alias("xpanes:" .. name .. "_" .. i, "xpanes:" .. name .. "_flat") + end + + local flatgroups = table.copy(def.groups) + flatgroups.pane = 1 + minetest.register_node(":xpanes:" .. name .. "_flat", { + description = def.description, + drawtype = "nodebox", + paramtype = "light", + is_ground_content = false, + sunlight_propagates = true, + inventory_image = def.inventory_image, + wield_image = def.wield_image, + paramtype2 = "facedir", + tiles = { + def.textures[3], + def.textures[3], + def.textures[3], + def.textures[3], + def.textures[1], + def.textures[1] + }, + groups = flatgroups, + drop = "xpanes:" .. name .. "_flat", + sounds = def.sounds, + use_texture_alpha = def.use_texture_alpha and "blend" or "clip", + node_box = { + type = "fixed", + fixed = {{-1/2, -1/2, -1/32, 1/2, 1/2, 1/32}}, + }, + selection_box = { + type = "fixed", + fixed = {{-1/2, -1/2, -1/32, 1/2, 1/2, 1/32}}, + }, + connect_sides = { "left", "right" }, + }) + + local groups = table.copy(def.groups) + groups.pane = 1 + groups.not_in_creative_inventory = 1 + minetest.register_node(":xpanes:" .. name, { + drawtype = "nodebox", + paramtype = "light", + is_ground_content = false, + sunlight_propagates = true, + description = def.description, + tiles = { + def.textures[3], + def.textures[3], + def.textures[1] + }, + groups = groups, + drop = "xpanes:" .. name .. "_flat", + sounds = def.sounds, + use_texture_alpha = def.use_texture_alpha and "blend" or "clip", + node_box = { + type = "connected", + fixed = {{-1/32, -1/2, -1/32, 1/32, 1/2, 1/32}}, + connect_front = {{-1/32, -1/2, -1/2, 1/32, 1/2, -1/32}}, + connect_left = {{-1/2, -1/2, -1/32, -1/32, 1/2, 1/32}}, + connect_back = {{-1/32, -1/2, 1/32, 1/32, 1/2, 1/2}}, + connect_right = {{1/32, -1/2, -1/32, 1/2, 1/2, 1/32}}, + }, + connects_to = {"group:pane", "group:stone", "group:glass", "group:wood", "group:tree"}, + }) + + minetest.register_craft({ + output = "xpanes:" .. name .. "_flat 16", + recipe = def.recipe + }) +end + +xpanes.register_pane("pane", { + description = S("Glass Pane"), + textures = {"default_glass.png", "", "xpanes_edge.png"}, + inventory_image = "default_glass.png", + wield_image = "default_glass.png", + sounds = default.node_sound_glass_defaults(), + groups = {snappy=2, cracky=3, oddly_breakable_by_hand=3}, + recipe = { + {"default:glass", "default:glass", "default:glass"}, + {"default:glass", "default:glass", "default:glass"} + } +}) + +xpanes.register_pane("obsidian_pane", { + description = S("Obsidian Glass Pane"), + textures = {"default_obsidian_glass.png", "", "xpanes_edge_obsidian.png"}, + inventory_image = "default_obsidian_glass.png", + wield_image = "default_obsidian_glass.png", + sounds = default.node_sound_glass_defaults(), + groups = {snappy=2, cracky=3}, + recipe = { + {"default:obsidian_glass", "default:obsidian_glass", "default:obsidian_glass"}, + {"default:obsidian_glass", "default:obsidian_glass", "default:obsidian_glass"} + } +}) + +xpanes.register_pane("bar", { + description = S("Steel Bars"), + textures = {"xpanes_bar.png", "", "xpanes_bar_top.png"}, + inventory_image = "xpanes_bar.png", + wield_image = "xpanes_bar.png", + groups = {cracky=2}, + sounds = default.node_sound_metal_defaults(), + recipe = { + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"} + } +}) + +minetest.register_lbm({ + name = "xpanes:gen2", + nodenames = {"group:pane"}, + action = function(pos, node) + update_pane(pos) + for i = 0, 3 do + local dir = minetest.facedir_to_dir(i) + update_pane(vector.add(pos, dir)) + end + end +}) + +-- Register steel bar doors and trapdoors + +if minetest.get_modpath("doors") then + + doors.register("xpanes:door_steel_bar", { + tiles = {{name = "xpanes_door_steel_bar.png", backface_culling = true}}, + description = S("Steel Bar Door"), + inventory_image = "xpanes_item_steel_bar.png", + protected = true, + groups = {node = 1, cracky = 1, level = 2}, + sounds = default.node_sound_metal_defaults(), + sound_open = "xpanes_steel_bar_door_open", + sound_close = "xpanes_steel_bar_door_close", + gain_open = 0.15, + gain_close = 0.13, + recipe = { + {"xpanes:bar_flat", "xpanes:bar_flat"}, + {"xpanes:bar_flat", "xpanes:bar_flat"}, + {"xpanes:bar_flat", "xpanes:bar_flat"}, + }, + }) + + doors.register_trapdoor("xpanes:trapdoor_steel_bar", { + description = S("Steel Bar Trapdoor"), + inventory_image = "xpanes_trapdoor_steel_bar.png", + wield_image = "xpanes_trapdoor_steel_bar.png", + tile_front = "xpanes_trapdoor_steel_bar.png", + tile_side = "xpanes_trapdoor_steel_bar_side.png", + protected = true, + groups = {node = 1, cracky = 1, level = 2, door = 1}, + sounds = default.node_sound_metal_defaults(), + sound_open = "xpanes_steel_bar_door_open", + sound_close = "xpanes_steel_bar_door_close", + gain_open = 0.15, + gain_close = 0.13, + }) + + minetest.register_craft({ + output = "xpanes:trapdoor_steel_bar", + recipe = { + {"xpanes:bar_flat", "xpanes:bar_flat"}, + {"xpanes:bar_flat", "xpanes:bar_flat"}, + } + }) +end diff --git a/mods/xpanes/license.txt b/mods/xpanes/license.txt new file mode 100644 index 00000000..7e922b9a --- /dev/null +++ b/mods/xpanes/license.txt @@ -0,0 +1,65 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2014-2016 xyz +Copyright (C) 2014-2016 BlockMen +Copyright (C) 2016 Auke Kok +Copyright (C) 2014-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2014-2016 xyz +Copyright (C) 2013-2016 Gambit +Copyright (C) 2016 paramat +Copyright (C) 2019 TumeniNodes + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/xpanes/locale/template.txt b/mods/xpanes/locale/template.txt new file mode 100644 index 00000000..08dfbbae --- /dev/null +++ b/mods/xpanes/locale/template.txt @@ -0,0 +1,6 @@ +# textdomain: xpanes +Glass Pane= +Obsidian Glass Pane= +Steel Bars= +Steel Bar Door= +Steel Bar Trapdoor= diff --git a/mods/xpanes/locale/xpanes.de.tr b/mods/xpanes/locale/xpanes.de.tr new file mode 100644 index 00000000..9852753f --- /dev/null +++ b/mods/xpanes/locale/xpanes.de.tr @@ -0,0 +1,6 @@ +# textdomain: xpanes +Glass Pane=Glasscheibe +Obsidian Glass Pane=Obsidianglasscheibe +Steel Bars=Stahlgitter +Steel Bar Door=Stahlgittertür +Steel Bar Trapdoor=Stahlgitterfalltür diff --git a/mods/xpanes/locale/xpanes.eo.tr b/mods/xpanes/locale/xpanes.eo.tr new file mode 100644 index 00000000..0051b7ea --- /dev/null +++ b/mods/xpanes/locale/xpanes.eo.tr @@ -0,0 +1,6 @@ +# textdomain: xpanes +Glass Pane=Vitra Vitraĵo +Obsidian Glass Pane=Obsidiana Vitra Vitraĵo +Steel Bars=Ŝtalaj Baraĵoj +Steel Bar Door=Ŝtala Baraĵa Pordo +Steel Bar Trapdoor=Ŝtala Baraĵa Plankpordo diff --git a/mods/xpanes/locale/xpanes.es.tr b/mods/xpanes/locale/xpanes.es.tr new file mode 100644 index 00000000..9902be70 --- /dev/null +++ b/mods/xpanes/locale/xpanes.es.tr @@ -0,0 +1,6 @@ +# textdomain: xpanes +Glass Pane=Panel de vidrio +Obsidian Glass Pane=Panel de vidrio de obsidiana +Steel Bars=Barras de acero +Steel Bar Door=Puerta de barras de acero +Steel Bar Trapdoor=Trampilla de barras de acero diff --git a/mods/xpanes/locale/xpanes.fr.tr b/mods/xpanes/locale/xpanes.fr.tr new file mode 100644 index 00000000..c7517996 --- /dev/null +++ b/mods/xpanes/locale/xpanes.fr.tr @@ -0,0 +1,6 @@ +# textdomain: xpanes +Glass Pane=Panneau de verre +Obsidian Glass Pane=Panneau de verre d'obsidienne +Steel Bars=Barreaux d'acier +Steel Bar Door=Porte en barreaux d'acier +Steel Bar Trapdoor=Trappe en barreaux d'acier diff --git a/mods/xpanes/locale/xpanes.id.tr b/mods/xpanes/locale/xpanes.id.tr new file mode 100644 index 00000000..906cc0f8 --- /dev/null +++ b/mods/xpanes/locale/xpanes.id.tr @@ -0,0 +1,6 @@ +# textdomain: xpanes +Glass Pane=Panel Kaca +Obsidian Glass Pane=Panel Kaca Obsidian +Steel Bars=Batang Baja +Steel Bar Door=Pintu Batang Baja +Steel Bar Trapdoor=Pintu Kolong Batang Baja diff --git a/mods/xpanes/locale/xpanes.it.tr b/mods/xpanes/locale/xpanes.it.tr new file mode 100644 index 00000000..63c8b62a --- /dev/null +++ b/mods/xpanes/locale/xpanes.it.tr @@ -0,0 +1,6 @@ +# textdomain: xpanes +Glass Pane=Pannello di vetro +Obsidian Glass Pane=Pannello di vetro d'ossidiana +Steel Bars=Sbarre d'acciaio +Steel Bar Door=Porta con sbarre d'acciaio +Steel Bar Trapdoor=Botola con sbarre d'acciaio diff --git a/mods/xpanes/locale/xpanes.ja.tr b/mods/xpanes/locale/xpanes.ja.tr new file mode 100644 index 00000000..06e0bed5 --- /dev/null +++ b/mods/xpanes/locale/xpanes.ja.tr @@ -0,0 +1,6 @@ +# textdomain: xpanes +Glass Pane=板ガラス +Obsidian Glass Pane=黒曜石の板ガラス +Steel Bars=鉄棒の柵 +Steel Bar Door=鉄棒のドア +Steel Bar Trapdoor=鉄棒のトラップドア diff --git a/mods/xpanes/locale/xpanes.jbo.tr b/mods/xpanes/locale/xpanes.jbo.tr new file mode 100644 index 00000000..333b5313 --- /dev/null +++ b/mods/xpanes/locale/xpanes.jbo.tr @@ -0,0 +1,6 @@ +# textdomain: xpanes +Glass Pane=lo blaci plita +Obsidian Glass Pane=lo je'erma'ablaci blaci plita +Steel Bars=lo gasta garna +Steel Bar Door=lo gasta garna vrogai +Steel Bar Trapdoor=lo gasta garna lolvrogai diff --git a/mods/xpanes/locale/xpanes.ms.tr b/mods/xpanes/locale/xpanes.ms.tr new file mode 100644 index 00000000..dedfefa8 --- /dev/null +++ b/mods/xpanes/locale/xpanes.ms.tr @@ -0,0 +1,6 @@ +# textdomain: xpanes +Glass Pane=Kaca Tingkap +Obsidian Glass Pane=Kaca Tingkap Obsidia +Steel Bars=Jeriji Keluli +Steel Bar Door=Pintu Jeriji Keluli +Steel Bar Trapdoor=Pintu Kolong Jeriji Keluli diff --git a/mods/xpanes/locale/xpanes.pl.tr b/mods/xpanes/locale/xpanes.pl.tr new file mode 100644 index 00000000..0ebb386e --- /dev/null +++ b/mods/xpanes/locale/xpanes.pl.tr @@ -0,0 +1,6 @@ +# textdomain: xpanes +Glass Pane=Szyba +Obsidian Glass Pane=Obsydianowa szyba +Steel Bars=Stalowe kraty +Steel Bar Door=Drzwi ze stalowych krat +Steel Bar Trapdoor=Właz ze stalowych krat diff --git a/mods/xpanes/locale/xpanes.pt_BR.tr b/mods/xpanes/locale/xpanes.pt_BR.tr new file mode 100644 index 00000000..c1ca3b26 --- /dev/null +++ b/mods/xpanes/locale/xpanes.pt_BR.tr @@ -0,0 +1,6 @@ +# textdomain: xpanes +Glass Pane=Painel de Vidro +Obsidian Glass Pane=Painel de Vidro de Obsidiana +Steel Bars=Barras de Aço +Steel Bar Door=Porta de Barras de Aço +Steel Bar Trapdoor=Alçapão de Barras de Aço diff --git a/mods/xpanes/locale/xpanes.ru.tr b/mods/xpanes/locale/xpanes.ru.tr new file mode 100644 index 00000000..166c62de --- /dev/null +++ b/mods/xpanes/locale/xpanes.ru.tr @@ -0,0 +1,6 @@ +# textdomain: xpanes +Glass Pane=Стеклянная Панель +Obsidian Glass Pane=Стеклянная Панель Из Обсидиана +Steel Bars=Стальная Решётка +Steel Bar Door=Стальная Решётчатая Дверь +Steel Bar Trapdoor=Стальной Решётчатый Люк diff --git a/mods/xpanes/locale/xpanes.sk.tr b/mods/xpanes/locale/xpanes.sk.tr new file mode 100644 index 00000000..0d07e08a --- /dev/null +++ b/mods/xpanes/locale/xpanes.sk.tr @@ -0,0 +1,6 @@ +# textdomain: xpanes +Glass Pane=Tabuľa skla +Obsidian Glass Pane=Tabuľa obsidiánového skla +Steel Bars=Oceľové mreže +Steel Bar Door=Dvere z oceľových mreží +Steel Bar Trapdoor=Padajúce dvere z oceľových mreží diff --git a/mods/xpanes/locale/xpanes.sv.tr b/mods/xpanes/locale/xpanes.sv.tr new file mode 100644 index 00000000..7b615dd3 --- /dev/null +++ b/mods/xpanes/locale/xpanes.sv.tr @@ -0,0 +1,6 @@ +# textdomain: xpanes +Glass Pane=Glasruta +Obsidian Glass Pane=Obsidianglasruta +Steel Bars=Stålgaller +Steel Bar Door=Stålgallerdörr +Steel Bar Trapdoor=Stålgallerfallucka diff --git a/mods/xpanes/locale/xpanes.uk.tr b/mods/xpanes/locale/xpanes.uk.tr new file mode 100644 index 00000000..d4b4b5c8 --- /dev/null +++ b/mods/xpanes/locale/xpanes.uk.tr @@ -0,0 +1,6 @@ +# textdomain: xpanes +Glass Pane=Скляна Панель +Obsidian Glass Pane=Скляна Панель З Обсидіану +Steel Bars=Сталева Решітка +Steel Bar Door=Сталеві Двері З Решіткою +Steel Bar Trapdoor=Сталевий Люк З Решіткою diff --git a/mods/xpanes/locale/xpanes.zh_CN.tr b/mods/xpanes/locale/xpanes.zh_CN.tr new file mode 100644 index 00000000..7b1871c9 --- /dev/null +++ b/mods/xpanes/locale/xpanes.zh_CN.tr @@ -0,0 +1,6 @@ +# textdomain: xpanes +Glass Pane=玻璃窗 +Obsidian Glass Pane=黑曜石玻璃窗 +Steel Bars=钢筋 +Steel Bar Door=钢筋门 +Steel Bar Trapdoor=钢筋活板门 diff --git a/mods/xpanes/locale/xpanes.zh_TW.tr b/mods/xpanes/locale/xpanes.zh_TW.tr new file mode 100644 index 00000000..97ee7a28 --- /dev/null +++ b/mods/xpanes/locale/xpanes.zh_TW.tr @@ -0,0 +1,6 @@ +# textdomain: xpanes +Glass Pane=玻璃窗 +Obsidian Glass Pane=黑曜石玻璃窗 +Steel Bars=鋼筋 +Steel Bar Door=鋼筋門 +Steel Bar Trapdoor=鋼筋活板門 diff --git a/mods/xpanes/mod.conf b/mods/xpanes/mod.conf new file mode 100644 index 00000000..dcb07167 --- /dev/null +++ b/mods/xpanes/mod.conf @@ -0,0 +1,4 @@ +name = xpanes +description = Minetest Game mod: xpanes +depends = default +optional_depends = doors diff --git a/mods/xpanes/sounds/xpanes_steel_bar_door_close.ogg b/mods/xpanes/sounds/xpanes_steel_bar_door_close.ogg new file mode 100644 index 00000000..0620bfb8 Binary files /dev/null and b/mods/xpanes/sounds/xpanes_steel_bar_door_close.ogg differ diff --git a/mods/xpanes/sounds/xpanes_steel_bar_door_open.ogg b/mods/xpanes/sounds/xpanes_steel_bar_door_open.ogg new file mode 100644 index 00000000..d159be9b Binary files /dev/null and b/mods/xpanes/sounds/xpanes_steel_bar_door_open.ogg differ diff --git a/mods/xpanes/textures/xpanes_bar.png b/mods/xpanes/textures/xpanes_bar.png new file mode 100644 index 00000000..3ea62a93 Binary files /dev/null and b/mods/xpanes/textures/xpanes_bar.png differ diff --git a/mods/xpanes/textures/xpanes_bar_top.png b/mods/xpanes/textures/xpanes_bar_top.png new file mode 100644 index 00000000..2955d72c Binary files /dev/null and b/mods/xpanes/textures/xpanes_bar_top.png differ diff --git a/mods/xpanes/textures/xpanes_door_steel_bar.png b/mods/xpanes/textures/xpanes_door_steel_bar.png new file mode 100644 index 00000000..39f45c30 Binary files /dev/null and b/mods/xpanes/textures/xpanes_door_steel_bar.png differ diff --git a/mods/xpanes/textures/xpanes_edge.png b/mods/xpanes/textures/xpanes_edge.png new file mode 100644 index 00000000..5768d663 Binary files /dev/null and b/mods/xpanes/textures/xpanes_edge.png differ diff --git a/mods/xpanes/textures/xpanes_edge_obsidian.png b/mods/xpanes/textures/xpanes_edge_obsidian.png new file mode 100644 index 00000000..abdd14e3 Binary files /dev/null and b/mods/xpanes/textures/xpanes_edge_obsidian.png differ diff --git a/mods/xpanes/textures/xpanes_item_steel_bar.png b/mods/xpanes/textures/xpanes_item_steel_bar.png new file mode 100644 index 00000000..46e4d9c6 Binary files /dev/null and b/mods/xpanes/textures/xpanes_item_steel_bar.png differ diff --git a/mods/xpanes/textures/xpanes_trapdoor_steel_bar.png b/mods/xpanes/textures/xpanes_trapdoor_steel_bar.png new file mode 100644 index 00000000..a56c5ee3 Binary files /dev/null and b/mods/xpanes/textures/xpanes_trapdoor_steel_bar.png differ diff --git a/mods/xpanes/textures/xpanes_trapdoor_steel_bar_side.png b/mods/xpanes/textures/xpanes_trapdoor_steel_bar_side.png new file mode 100644 index 00000000..a71231e8 Binary files /dev/null and b/mods/xpanes/textures/xpanes_trapdoor_steel_bar_side.png differ diff --git a/readme.md b/readme.md new file mode 100644 index 00000000..c99649f2 --- /dev/null +++ b/readme.md @@ -0,0 +1,8 @@ +#### Minetest Game [minetest_game] + +The main subgame for the Minetest engine + +##### Caution: this repository contains modifications for the [illuna-minetest.tk](//illuna-minetest.tk) Minetestserver. + +Please **don't use** this subgame for your production environment. +* [to the original minetest_game](https://github.com/minetest/minetest_game) diff --git a/schematic_tables.txt b/schematic_tables.txt new file mode 100644 index 00000000..eff2d359 --- /dev/null +++ b/schematic_tables.txt @@ -0,0 +1,2228 @@ +Minetest Game schematic tables +============================== + +This document acts as the official record of all schematic tables used in +Minetest Game, and should be updated by any commit that adds a table type +schematic. + +The following tables are for pasting into mods that contain a function to +convert the Lua tables into .mts files. Such mods often have two functions to +process two formats of the 'data' table: + +The standard table format is described in the 'Schematic specifier' section of +the lua_api.txt file in the Minetest Engine. +The 'data' table appears as a sequence of vertical slices through the structure +the schematic describes. +Each XY-plane slice has the X-rows formatted in order of increasing Y, so the +slices of the structure visually appear upside-down in the table. +In this document this format is used where 'mts_save()' appears. + +The transformed table format was created to be easier to work with. +Each XY-plane slice has the X-rows formatted in order of decreasing Y, so the +slices of the structure visually appear upright in the table. +In this document this format is used where 'mts_save_up()' appears. + + +-- This node will not replace existing world nodes + +local _ = {name = "air", prob = 0} + + +-- Mapgen Apple tree + +local M = {name = "default:leaves", prob = 255} +local N = {name = "default:leaves", prob = 223} +local F = {name = "default:apple", prob = 63} +local Y = {name = "default:tree", prob = 255, force_place = true} +local T = {name = "default:tree", prob = 255} + +mts_save("apple_tree", { + size = {x = 7, y = 8, z = 7}, + data = { + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, N, M, N, _, _, + _, _, _, N, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, M, M, F, M, M, _, + _, N, M, M, M, N, _, + _, _, N, M, N, _, _, + _, _, _, _, _, _, _, + + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + N, M, Y, _, _, M, N, + _, M, M, _, Y, M, _, + _, N, M, M, M, N, _, + _, _, _, N, _, _, _, + + _, _, _, Y, _, _, _, + _, _, _, Y, _, _, _, + _, _, _, Y, _, _, _, + _, _, _, Y, _, _, _, + M, F, _, Y, _, F, M, + N, M, _, _, _, M, N, + _, M, M, M, M, M, _, + _, _, N, M, N, _, _, + + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + N, M, _, _, Y, M, N, + _, M, Y, _, M, M, _, + _, N, M, M, M, N, _, + _, _, _, N, _, _, _, + + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, M, M, F, M, M, _, + _, N, M, M, M, N, _, + _, _, N, M, N, _, _, + _, _, _, _, _, _, _, + + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, N, M, N, _, _, + _, _, _, N, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + }, + yslice_prob = { + {ypos = 2, prob = 127}, + }, +}) + + +-- Apple tree from sapling + +mts_save("apple_tree_from_sapling", { + size = {x = 7, y = 8, z = 7}, + data = { + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, N, M, N, _, _, + _, _, _, N, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, M, M, F, M, M, _, + _, N, M, M, M, N, _, + _, _, N, M, N, _, _, + _, _, _, _, _, _, _, + + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + N, M, T, _, _, M, N, + _, M, M, _, T, M, _, + _, N, M, M, M, N, _, + _, _, _, N, _, _, _, + + _, _, _, T, _, _, _, + _, _, _, Y, _, _, _, + _, _, _, T, _, _, _, + _, _, _, T, _, _, _, + M, F, _, T, _, F, M, + N, M, _, _, _, M, N, + _, M, M, M, M, M, _, + _, _, N, M, N, _, _, + + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + N, M, _, _, T, M, N, + _, M, T, _, M, M, _, + _, N, M, M, M, N, _, + _, _, _, N, _, _, _, + + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, M, M, F, M, M, _, + _, N, M, M, M, N, _, + _, _, N, M, N, _, _, + _, _, _, _, _, _, _, + + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, N, M, N, _, _, + _, _, _, N, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + }, + yslice_prob = { + {ypos = 2, prob = 127}, + }, +}) + + +-- Mapgen Jungle tree + +local L = {name = "default:jungleleaves", prob = 255} +local N = {name = "default:jungleleaves", prob = 223} +local M = {name = "default:jungleleaves", prob = 191} +local B = {name = "default:jungletree", prob = 255, force_place = true} +local Y = {name = "default:jungletree", prob = 191, force_place = true} +local U = {name = "default:jungletree", prob = 127, force_place = true} +local I = {name = "default:jungletree", prob = 255} + +mts_save("jungle_tree", { + size = {x = 5, y = 17, z = 5}, + data = { + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + N, L, N, _, _, + _, _, N, L, N, + _, _, _, _, _, + _, _, _, _, _, + M, N, N, N, M, + M, N, N, N, M, + _, _, _, _, _, + + _, _, B, _, _, + _, _, B, _, _, + _, _, U, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + L, B, L, _, _, + _, _, L, B, L, + _, _, _, _, _, + _, _, _, _, _, + N, B, L, B, N, + N, L, L, L, N, + _, N, N, N, _, + + _, B, B, B, _, + _, B, B, B, _, + _, U, B, U, _, + _, _, B, _, _, + _, _, B, _, _, + _, _, B, _, _, + _, _, B, _, _, + _, _, B, _, _, + _, _, B, L, N, + N, L, B, _, _, + N, L, B, _, _, + _, _, B, L, N, + _, _, B, L, N, + _, _, B, _, _, + N, L, L, L, N, + N, L, L, L, N, + _, N, L, N, _, + + _, _, B, _, _, + _, _, B, _, _, + _, _, U, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, L, B, L, + L, B, L, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, L, B, L, + _, _, _, _, _, + N, B, L, B, N, + N, L, L, L, N, + _, N, N, N, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, N, L, N, + N, L, N, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, N, L, N, + _, _, _, _, _, + M, N, N, N, M, + M, N, N, N, M, + _, _, _, _, _, + }, + yslice_prob = { + {ypos=6, prob=191}, + {ypos=7, prob=191}, + {ypos=8, prob=191}, + {ypos=9, prob=191}, + {ypos=10, prob=191}, + }, +}) + + +-- Jungle tree from sapling + +local B = {name = "default:jungletree", prob = 255} +local C = {name = "default:jungletree", prob = 255, force_place = true} +local Y = {name = "default:jungletree", prob = 191} +local U = {name = "default:jungletree", prob = 127} + +mts_save("jungle_tree_from_sapling", { + size = {x = 5, y = 17, z = 5}, + data = { + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + N, L, N, _, _, + _, _, N, L, N, + _, _, _, _, _, + _, _, _, _, _, + M, N, N, N, M, + M, N, N, N, M, + _, _, _, _, _, + + _, _, B, _, _, + _, _, B, _, _, + _, _, U, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + L, B, L, _, _, + _, _, L, B, L, + _, _, _, _, _, + _, _, _, _, _, + N, B, L, B, N, + N, L, L, L, N, + _, N, N, N, _, + + _, B, B, B, _, + _, B, C, B, _, + _, U, B, U, _, + _, _, B, _, _, + _, _, B, _, _, + _, _, B, _, _, + _, _, B, _, _, + _, _, B, _, _, + _, _, B, L, N, + N, L, B, _, _, + N, L, B, _, _, + _, _, B, L, N, + _, _, B, L, N, + _, _, B, _, _, + N, L, L, L, N, + N, L, L, L, N, + _, N, L, N, _, + + _, _, B, _, _, + _, _, B, _, _, + _, _, U, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, L, B, L, + L, B, L, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, L, B, L, + _, _, _, _, _, + N, B, L, B, N, + N, L, L, L, N, + _, N, N, N, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, N, L, N, + N, L, N, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, N, L, N, + _, _, _, _, _, + M, N, N, N, M, + M, N, N, N, M, + _, _, _, _, _, + }, + yslice_prob = { + {ypos=6, prob=191}, + {ypos=7, prob=191}, + {ypos=8, prob=191}, + {ypos=9, prob=191}, + {ypos=10, prob=191}, + }, +}) + + +-- Mapgen Pine tree + +local L = {name = "default:pine_needles", prob = 255} +local M = {name = "default:pine_needles", prob = 223} +local N = {name = "default:pine_needles", prob = 191} +local T = {name = "default:pine_tree", prob = 255, force_place = true} +local B = {name = "default:pine_tree", prob = 255} + +mts_save("pine_tree", { + size = {x = 5, y = 16, z = 5}, + data = { + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + N, M, L, M, N, + _, _, _, _, _, + _, _, _, _, _, + N, M, L, M, N, + _, _, _, _, _, + _, _, _, _, _, + N, M, L, M, N, + _, _, _, _, _, + _, _, _, _, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + M, L, _, L, M, + _, L, L, L, _, + _, _, _, _, _, + M, L, _, L, M, + _, L, L, L, _, + _, _, _, _, _, + M, L, _, L, M, + _, L, L, L, _, + _, _, _, _, _, + + _, _, T, _, _, + _, _, T, _, _, + _, _, T, _, _, + _, _, T, _, _, + _, _, T, _, _, + _, _, T, _, _, + _, _, T, _, _, + L, _, T, _, L, + _, L, T, L, _, + _, _, T, _, _, + L, _, T, _, L, + _, L, T, L, _, + _, _, T, _, _, + L, _, T, _, L, + _, L, L, L, _, + _, _, L, _, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + M, L, _, L, M, + _, L, L, L, _, + _, _, _, _, _, + M, L, _, L, M, + _, L, L, L, _, + _, _, _, _, _, + M, L, _, L, M, + _, L, L, L, _, + _, _, _, _, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + N, M, L, M, N, + _, _, _, _, _, + _, _, _, _, _, + N, M, L, M, N, + _, _, _, _, _, + _, _, _, _, _, + N, M, L, M, N, + _, _, _, _, _, + _, _, _, _, _, + }, + yslice_prob = { + {ypos = 2, prob = 127}, + {ypos = 3, prob = 127}, + {ypos = 4, prob = 127}, + {ypos = 5, prob = 127}, + {ypos = 9, prob = 127}, + {ypos = 12, prob = 127}, + }, +}) + + +-- Pine tree from sapling + +local T = {name = "default:pine_tree", prob = 255} +local U = {name = "default:pine_tree", prob = 255, force_place = true} + +mts_save("pine_tree_from_sapling", { + size = {x = 5, y = 16, z = 5}, + data = { + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + N, M, L, M, N, + _, _, _, _, _, + _, _, _, _, _, + N, M, L, M, N, + _, _, _, _, _, + _, _, _, _, _, + N, M, L, M, N, + _, _, _, _, _, + _, _, _, _, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + M, L, _, L, M, + _, L, L, L, _, + _, _, _, _, _, + M, L, _, L, M, + _, L, L, L, _, + _, _, _, _, _, + M, L, _, L, M, + _, L, L, L, _, + _, _, _, _, _, + + _, _, T, _, _, + _, _, U, _, _, + _, _, T, _, _, + _, _, T, _, _, + _, _, T, _, _, + _, _, T, _, _, + _, _, T, _, _, + L, _, T, _, L, + _, L, T, L, _, + _, _, T, _, _, + L, _, T, _, L, + _, L, T, L, _, + _, _, T, _, _, + L, _, T, _, L, + _, L, L, L, _, + _, _, L, _, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + M, L, _, L, M, + _, L, L, L, _, + _, _, _, _, _, + M, L, _, L, M, + _, L, L, L, _, + _, _, _, _, _, + M, L, _, L, M, + _, L, L, L, _, + _, _, _, _, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + N, M, L, M, N, + _, _, _, _, _, + _, _, _, _, _, + N, M, L, M, N, + _, _, _, _, _, + _, _, _, _, _, + N, M, L, M, N, + _, _, _, _, _, + _, _, _, _, _, + }, + yslice_prob = { + {ypos = 2, prob = 127}, + {ypos = 3, prob = 127}, + {ypos = 4, prob = 127}, + {ypos = 5, prob = 127}, + {ypos = 9, prob = 127}, + {ypos = 12, prob = 127}, + }, +}) + + +-- Snowy pine tree from sapling + +local T = {name = "default:pine_tree", prob = 255} +local U = {name = "default:pine_tree", prob = 255, force_place = true} +local L = {name = "default:pine_needles", prob = 255} +local S = {name = "default:snow", prob = 255} + +mts_save("snowy_pine_tree_from_sapling", { + size = {x = 5, y = 16, z = 5}, + data = { + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + N, M, L, M, N, + _, _, _, _, _, + _, _, _, _, _, + N, M, L, M, N, + _, _, _, _, _, + _, _, _, _, _, + L, L, L, L, L, + S, S, S, S, S, + _, _, _, _, _, + _, _, _, _, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + M, L, _, L, M, + _, L, L, L, _, + _, _, _, _, _, + L, L, _, L, M, + S, L, L, L, _, + _, _, _, _, _, + _, L, _, L, L, + _, L, L, L, S, + _, S, S, S, _, + _, _, _, _, _, + + _, _, T, _, _, + _, _, U, _, _, + _, _, T, _, _, + _, _, T, _, _, + _, _, T, _, _, + _, _, T, _, _, + L, _, T, _, L, + _, L, T, L, _, + _, _, T, _, _, + L, _, T, _, L, + _, L, T, L, _, + _, _, T, _, _, + L, _, T, _, L, + S, L, L, L, S, + _, S, L, S, _, + _, _, S, _, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + M, L, _, L, M, + _, L, L, L, _, + _, _, _, _, _, + M, L, _, L, M, + _, L, L, L, _, + _, _, _, _, _, + L, L, _, L, L, + S, L, L, L, S, + _, S, S, S, _, + _, _, _, _, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + N, M, L, M, N, + _, _, _, _, _, + _, _, _, _, _, + N, M, L, M, L, + _, _, _, _, S, + _, _, _, _, _, + L, L, L, L, _, + S, S, S, S, _, + _, _, _, _, _, + _, _, _, _, _, + }, + yslice_prob = { + {ypos = 2, prob = 127}, + {ypos = 3, prob = 127}, + {ypos = 4, prob = 127}, + {ypos = 8, prob = 127}, + {ypos = 11, prob = 127}, + }, +}) + + +-- Mapgen Acacia tree + +local L = {name = "default:acacia_leaves", prob = 255} +local M = {name = "default:acacia_leaves", prob = 223} +local T = {name = "default:acacia_tree", prob = 255, force_place = true} + +mts_save("acacia_tree", { + size = {x = 9, y = 9, z = 9}, + data = { + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + M, M, M, M, _, _, _, _, _, + _, _, _, _, M, M, M, M, M, + + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + M, L, L, M, _, _, _, _, _, + _, _, _, _, M, L, L, L, M, + + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, T, _, _, _, _, _, _, + M, L, L, M, _, _, T, _, _, + _, _, _, _, M, L, L, L, M, + + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, T, _, _, _, _, _, + _, _, _, _, _, T, _, _, _, + M, M, M, M, _, _, _, _, _, + _, _, _, _, M, L, L, L, M, + + _, _, _, _, T, _, _, _, _, + _, _, _, _, T, _, _, _, _, + _, _, _, _, T, _, _, _, _, + _, _, _, _, T, _, _, _, _, + _, _, _, _, T, _, _, _, _, + _, _, _, _, T, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + M, M, M, M, M, M, M, M, M, + + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, T, _, _, _, + _, _, _, T, _, _, _, _, _, + _, _, _, _, _, M, M, M, M, + M, L, L, L, M, _, _, _, _, + + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, T, _, _, + _, _, T, _, _, M, L, L, M, + M, L, L, L, M, _, _, _, _, + + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, M, L, L, M, + M, L, L, L, M, _, _, _, _, + + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, M, M, M, M, + M, M, M, M, M, _, _, _, _, + }, + yslice_prob = { + {ypos = 2, prob = 127}, + {ypos = 3, prob = 127}, + {ypos = 4, prob = 127}, + }, +}) + + +-- Acacia tree from sapling + +local T = {name = "default:acacia_tree", prob = 255} +local U = {name = "default:acacia_tree", prob = 255, force_place = true} + +mts_save("acacia_tree_from_sapling", { + size = {x = 9, y = 9, z = 9}, + data = { + + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + M, M, M, M, _, _, _, _, _, + _, _, _, _, M, M, M, M, M, + + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + M, L, L, M, _, _, _, _, _, + _, _, _, _, M, L, L, L, M, + + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, T, _, _, _, _, _, _, + M, L, L, M, _, _, T, _, _, + _, _, _, _, M, L, L, L, M, + + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, T, _, _, _, _, _, + _, _, _, _, _, T, _, _, _, + M, M, M, M, _, _, _, _, _, + _, _, _, _, M, L, L, L, M, + + _, _, _, _, T, _, _, _, _, + _, _, _, _, U, _, _, _, _, + _, _, _, _, T, _, _, _, _, + _, _, _, _, T, _, _, _, _, + _, _, _, _, T, _, _, _, _, + _, _, _, _, T, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + M, M, M, M, M, M, M, M, M, + + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, T, _, _, _, + _, _, _, T, _, _, _, _, _, + _, _, _, _, _, M, M, M, M, + M, L, L, L, M, _, _, _, _, + + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, T, _, _, + _, _, T, _, _, M, L, L, M, + M, L, L, L, M, _, _, _, _, + + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, M, L, L, M, + M, L, L, L, M, _, _, _, _, + + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _, + _, _, _, _, _, M, M, M, M, + M, M, M, M, M, _, _, _, _, + }, + yslice_prob = { + {ypos = 2, prob = 127}, + {ypos = 3, prob = 127}, + {ypos = 4, prob = 127}, + }, +}) + + +-- Mapgen Aspen tree + +local T = {name = "default:aspen_tree", prob = 255, force_place = true} +local B = {name = "default:aspen_tree", prob = 255} +local L = {name = "default:aspen_leaves", prob = 255} +local M = {name = "default:aspen_leaves", prob = 223} +local N = {name = "default:aspen_leaves", prob = 127} + +mts_save("aspen_tree", { + size = {x = 5, y = 14, z = 5}, + data = { + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + N, M, L, M, N, + _, _, _, _, _, + N, M, L, M, N, + _, _, _, _, _, + N, M, L, M, N, + _, _, _, _, _, + _, _, _, _, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, M, L, M, _, + M, L, L, L, M, + _, M, L, M, _, + M, L, L, L, M, + _, M, L, M, _, + M, L, L, L, M, + _, M, L, M, _, + _, _, _, _, _, + + _, _, T, _, _, + _, _, T, _, _, + _, _, T, _, _, + _, _, T, _, _, + _, _, T, _, _, + _, _, T, _, _, + _, L, T, L, _, + L, L, T, L, L, + _, L, T, L, _, + L, L, T, L, L, + _, L, T, L, _, + L, L, T, L, L, + _, L, L, L, _, + _, _, L, _, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, M, L, M, _, + M, L, L, L, M, + _, M, L, M, _, + M, L, L, L, M, + _, M, L, M, _, + M, L, L, L, M, + _, M, L, M, _, + _, _, _, _, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + N, M, L, M, N, + _, _, _, _, _, + N, M, L, M, N, + _, _, _, _, _, + N, M, L, M, N, + _, _, _, _, _, + _, _, _, _, _, + }, + yslice_prob = { + {ypos = 2, prob = 127}, + {ypos = 3, prob = 127}, + {ypos = 4, prob = 127}, + {ypos = 8, prob = 127}, + {ypos = 10, prob = 127}, + }, +}) + + +-- Aspen tree from sapling + +mts_save("aspen_tree_from_sapling", { + size = {x = 5, y = 14, z = 5}, + data = { + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + N, M, L, M, N, + _, _, _, _, _, + N, M, L, M, N, + _, _, _, _, _, + N, M, L, M, N, + _, _, _, _, _, + _, _, _, _, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, M, L, M, _, + M, L, L, L, M, + _, M, L, M, _, + M, L, L, L, M, + _, M, L, M, _, + M, L, L, L, M, + _, M, L, M, _, + _, _, _, _, _, + + _, _, B, _, _, + _, _, T, _, _, + _, _, B, _, _, + _, _, B, _, _, + _, _, B, _, _, + _, _, B, _, _, + _, L, B, L, _, + L, L, B, L, L, + _, L, B, L, _, + L, L, B, L, L, + _, L, B, L, _, + L, L, B, L, L, + _, L, L, L, _, + _, _, L, _, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, M, L, M, _, + M, L, L, L, M, + _, M, L, M, _, + M, L, L, L, M, + _, M, L, M, _, + M, L, L, L, M, + _, M, L, M, _, + _, _, _, _, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + N, M, L, M, N, + _, _, _, _, _, + N, M, L, M, N, + _, _, _, _, _, + N, M, L, M, N, + _, _, _, _, _, + _, _, _, _, _, + }, + yslice_prob = { + {ypos = 2, prob = 127}, + {ypos = 3, prob = 127}, + {ypos = 4, prob = 127}, + {ypos = 8, prob = 127}, + {ypos = 10, prob = 127}, + }, +}) + + +-- Mapgen emergent jungle tree + +local L = {name = "default:jungleleaves", prob = 255} +local N = {name = "default:jungleleaves", prob = 223} +local M = {name = "default:jungleleaves", prob = 127} +local B = {name = "default:jungletree", prob = 255, force_place = true} +local U = {name = "default:jungletree", prob = 127, force_place = true} + +mts_save("emergent_jungle_tree", { + size = {x = 7, y = 37, z = 7}, + data = { + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + B, _, _, _, _, _, B, + B, _, _, _, _, _, B, + B, _, _, _, _, _, B, + U, _, _, _, _, _, U, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + N, N, N, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, N, N, N, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, N, N, N, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + N, N, N, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, N, N, N, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, M, M, M, M, M, _, + _, N, N, N, N, N, _, + _, N, N, N, N, N, _, + _, N, N, N, N, N, _, + _, _, _, _, _, _, _, + + _, _, _, _, _, _, _, + _, _, B, _, B, _, _, + _, B, B, _, B, B, _, + _, B, B, _, B, B, _, + _, B, B, _, B, B, _, + _, B, B, _, B, B, _, + _, B, B, _, B, B, _, + _, U, B, _, B, U, _, + _, _, U, _, U, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + N, B, N, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, N, B, N, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, N, B, N, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + N, B, N, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, N, B, N, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + M, _, _, _, _, _, M, + N, L, _, _, _, L, N, + N, B, L, L, L, B, N, + N, L, L, L, L, L, N, + _, N, N, N, N, N, _, + + _, _, B, _, B, _, _, + _, B, B, _, B, B, _, + _, B, B, _, B, B, _, + _, B, B, _, B, B, _, + _, B, B, B, B, B, _, + _, B, B, B, B, B, _, + _, B, B, B, B, B, _, + _, B, B, B, B, B, _, + _, U, B, B, B, U, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + N, N, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, _, B, B, N, N, + N, N, N, B, _, _, _, + _, _, _, B, _, _, _, + _, _, N, B, N, _, _, + _, _, _, B, _, _, _, + _, _, _, B, N, N, N, + N, N, B, B, _, _, _, + _, _, _, B, _, _, _, + _, _, _, B, B, N, N, + N, N, N, B, _, _, _, + _, _, _, B, _, _, _, + M, _, B, B, B, _, M, + N, _, B, _, B, _, N, + N, L, L, _, L, L, N, + N, L, L, L, L, L, N, + _, N, L, L, L, N, _, + + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + N, B, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, B, N, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + N, B, B, B, B, _, _, + _, _, B, B, B, _, _, + M, _, B, _, B, _, M, + N, _, _, _, _, _, N, + N, L, _, _, _, L, N, + N, L, L, L, L, L, N, + _, N, L, L, L, N, _, + + _, _, B, _, B, _, _, + _, B, B, _, B, B, _, + _, B, B, _, B, B, _, + _, B, B, _, B, B, _, + _, B, B, B, B, B, _, + _, B, B, B, B, B, _, + _, B, B, B, B, B, _, + _, B, B, B, B, B, _, + _, U, B, B, B, U, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, _, B, _, _, _, + N, N, N, B, _, _, _, + _, _, _, B, B, N, N, + _, _, _, B, _, _, _, + N, N, B, B, _, _, _, + _, _, _, B, N, N, N, + _, _, _, B, _, _, _, + _, _, N, B, N, _, _, + _, _, _, B, _, _, _, + N, N, N, B, _, _, _, + _, _, _, B, _, _, _, + M, _, B, B, B, _, M, + N, _, B, _, B, _, N, + N, L, L, _, L, L, N, + N, L, L, L, L, L, N, + _, N, L, L, L, N, _, + + _, _, _, _, _, _, _, + _, _, B, _, B, _, _, + _, B, B, _, B, B, _, + _, B, B, _, B, B, _, + _, B, B, _, B, B, _, + _, B, B, _, B, B, _, + _, B, B, _, B, B, _, + _, U, B, _, B, U, _, + _, _, U, _, U, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, N, B, N, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, N, B, N, + _, _, _, _, _, _, _, + N, B, N, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, N, B, N, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + M, _, _, _, _, _, M, + N, L, _, _, _, L, N, + N, B, L, L, L, B, N, + N, L, L, L, L, L, N, + _, N, N, N, N, N, _, + + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + B, _, _, _, _, _, B, + B, _, _, _, _, _, B, + B, _, _, _, _, _, B, + U, _, _, _, _, _, U, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, N, N, N, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, N, N, N, + _, _, _, _, _, _, _, + N, N, N, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, N, N, N, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, M, M, M, M, M, _, + _, N, N, N, N, N, _, + _, N, N, N, N, N, _, + _, N, N, N, N, N, _, + _, _, _, _, _, _, _, + }, + yslice_prob = { + {ypos = 13, prob = 127}, + {ypos = 14, prob = 127}, + {ypos = 15, prob = 127}, + {ypos = 16, prob = 127}, + {ypos = 17, prob = 127}, + {ypos = 18, prob = 127}, + {ypos = 19, prob = 127}, + {ypos = 20, prob = 127}, + {ypos = 21, prob = 127}, + {ypos = 22, prob = 127}, + {ypos = 23, prob = 127}, + {ypos = 24, prob = 127}, + }, +}) + + +-- Emergent jungle tree from sapling + +local L = {name = "default:jungleleaves", prob = 255} +local N = {name = "default:jungleleaves", prob = 223} +local M = {name = "default:jungleleaves", prob = 127} +local S = {name = "default:jungletree", prob = 255, force_place = true} +local B = {name = "default:jungletree", prob = 255} +local U = {name = "default:jungletree", prob = 127} + +mts_save("emergent_jungle_tree_from_sapling", { + size = {x = 7, y = 37, z = 7}, + data = { + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + B, _, _, _, _, _, B, + B, _, _, _, _, _, B, + B, _, _, _, _, _, B, + U, _, _, _, _, _, U, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + N, N, N, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, N, N, N, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, N, N, N, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + N, N, N, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, N, N, N, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, M, M, M, M, M, _, + _, N, N, N, N, N, _, + _, N, N, N, N, N, _, + _, N, N, N, N, N, _, + _, _, _, _, _, _, _, + + _, _, _, _, _, _, _, + _, _, B, _, B, _, _, + _, B, B, _, B, B, _, + _, B, B, _, B, B, _, + _, B, B, _, B, B, _, + _, B, B, _, B, B, _, + _, B, B, _, B, B, _, + _, U, B, _, B, U, _, + _, _, U, _, U, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + N, B, N, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, N, B, N, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, N, B, N, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + N, B, N, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, N, B, N, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + M, _, _, _, _, _, M, + N, L, _, _, _, L, N, + N, B, L, L, L, B, N, + N, L, L, L, L, L, N, + _, N, N, N, N, N, _, + + _, _, B, _, B, _, _, + _, B, B, _, B, B, _, + _, B, B, _, B, B, _, + _, B, B, _, B, B, _, + _, B, B, B, B, B, _, + _, B, B, B, B, B, _, + _, B, B, B, B, B, _, + _, B, B, B, B, B, _, + _, U, B, B, B, U, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + N, N, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, _, B, B, N, N, + N, N, N, B, _, _, _, + _, _, _, B, _, _, _, + _, _, N, B, N, _, _, + _, _, _, B, _, _, _, + _, _, _, B, N, N, N, + N, N, B, B, _, _, _, + _, _, _, B, _, _, _, + _, _, _, B, B, N, N, + N, N, N, B, _, _, _, + _, _, _, B, _, _, _, + M, _, B, B, B, _, M, + N, _, B, _, B, _, N, + N, L, L, _, L, L, N, + N, L, L, L, L, L, N, + _, N, L, L, L, N, _, + + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, B, B, B, _, _, + _, _, B, S, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + N, B, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, B, N, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + N, B, B, B, B, _, _, + _, _, B, B, B, _, _, + M, _, B, _, B, _, M, + N, _, _, _, _, _, N, + N, L, _, _, _, L, N, + N, L, L, L, L, L, N, + _, N, L, L, L, N, _, + + _, _, B, _, B, _, _, + _, B, B, _, B, B, _, + _, B, B, _, B, B, _, + _, B, B, _, B, B, _, + _, B, B, B, B, B, _, + _, B, B, B, B, B, _, + _, B, B, B, B, B, _, + _, B, B, B, B, B, _, + _, U, B, B, B, U, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, B, B, B, _, _, + _, _, _, B, _, _, _, + N, N, N, B, _, _, _, + _, _, _, B, B, N, N, + _, _, _, B, _, _, _, + N, N, B, B, _, _, _, + _, _, _, B, N, N, N, + _, _, _, B, _, _, _, + _, _, N, B, N, _, _, + _, _, _, B, _, _, _, + N, N, N, B, _, _, _, + _, _, _, B, _, _, _, + M, _, B, B, B, _, M, + N, _, B, _, B, _, N, + N, L, L, _, L, L, N, + N, L, L, L, L, L, N, + _, N, L, L, L, N, _, + + _, _, _, _, _, _, _, + _, _, B, _, B, _, _, + _, B, B, _, B, B, _, + _, B, B, _, B, B, _, + _, B, B, _, B, B, _, + _, B, B, _, B, B, _, + _, B, B, _, B, B, _, + _, U, B, _, B, U, _, + _, _, U, _, U, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, N, B, N, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, N, B, N, + _, _, _, _, _, _, _, + N, B, N, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, N, B, N, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + M, _, _, _, _, _, M, + N, L, _, _, _, L, N, + N, B, L, L, L, B, N, + N, L, L, L, L, L, N, + _, N, N, N, N, N, _, + + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + B, _, _, _, _, _, B, + B, _, _, _, _, _, B, + B, _, _, _, _, _, B, + U, _, _, _, _, _, U, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, N, N, N, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, N, N, N, + _, _, _, _, _, _, _, + N, N, N, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, N, N, N, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, _, _, _, _, _, _, + _, M, M, M, M, M, _, + _, N, N, N, N, N, _, + _, N, N, N, N, N, _, + _, N, N, N, N, N, _, + _, _, _, _, _, _, _, + }, + yslice_prob = { + {ypos = 13, prob = 127}, + {ypos = 14, prob = 127}, + {ypos = 15, prob = 127}, + {ypos = 16, prob = 127}, + {ypos = 17, prob = 127}, + {ypos = 18, prob = 127}, + {ypos = 19, prob = 127}, + {ypos = 20, prob = 127}, + {ypos = 21, prob = 127}, + {ypos = 22, prob = 127}, + {ypos = 23, prob = 127}, + {ypos = 24, prob = 127}, + }, +}) + + +-- Mapgen small pine tree + +local L = {name = "default:pine_needles", prob = 255} +local M = {name = "default:pine_needles", prob = 223} +local N = {name = "default:pine_needles", prob = 191} +local T = {name = "default:pine_tree", prob = 255, force_place = true} +local B = {name = "default:pine_tree", prob = 255} +local S = {name = "default:snow", prob = 255} + +mts_save("small_pine_tree", { + size = {x = 5, y = 12, z = 5}, + data = { + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, L, L, L, _, + _, _, L, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + L, L, _, L, L, + _, L, L, L, _, + _, L, L, L, _, + _, L, L, L, _, + _, _, L, _, _, + _, _, L, _, _, + _, _, _, _, _, + _, _, _, _, _, + + _, _, T, _, _, + _, _, T, _, _, + _, _, T, _, _, + _, _, T, _, _, + L, _, T, _, L, + L, L, T, L, L, + _, L, T, L, _, + _, L, T, L, _, + _, L, T, L, _, + _, L, L, L, _, + _, _, L, _, _, + _, _, L, _, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + L, L, _, L, L, + _, L, L, L, _, + _, L, L, L, _, + _, L, L, L, _, + _, _, L, _, _, + _, _, L, _, _, + _, _, _, _, _, + _, _, _, _, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, L, L, L, _, + _, _, L, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + }, + yslice_prob = { + {ypos = 2, prob = 127}, + {ypos = 3, prob = 127}, + {ypos = 4, prob = 127}, + }, +}) + + +-- Small pine tree from sapling + +mts_save("small_pine_tree_from_sapling", { + size = {x = 5, y = 12, z = 5}, + data = { + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, L, L, L, _, + _, _, L, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + L, L, _, L, L, + _, L, L, L, _, + _, L, L, L, _, + _, L, L, L, _, + _, _, L, _, _, + _, _, L, _, _, + _, _, _, _, _, + _, _, _, _, _, + + _, _, B, _, _, + _, _, T, _, _, + _, _, B, _, _, + _, _, B, _, _, + L, _, B, _, L, + L, L, B, L, L, + _, L, B, L, _, + _, L, B, L, _, + _, L, B, L, _, + _, L, L, L, _, + _, _, L, _, _, + _, _, L, _, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + L, L, _, L, L, + _, L, L, L, _, + _, L, L, L, _, + _, L, L, L, _, + _, _, L, _, _, + _, _, L, _, _, + _, _, _, _, _, + _, _, _, _, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, L, L, L, _, + _, _, L, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + }, + yslice_prob = { + {ypos = 2, prob = 127}, + {ypos = 3, prob = 127}, + {ypos = 4, prob = 127}, + }, +}) + + +-- Snowy small pine tree from sapling + +mts_save("snowy_small_pine_tree_from_sapling", { + size = {x = 5, y = 13, z = 5}, + data = { + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, L, L, L, _, + _, S, L, S, _, + _, _, S, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + L, L, _, L, L, + S, L, L, L, S, + _, L, L, L, _, + _, L, L, L, _, + _, S, L, S, _, + _, _, L, _, _, + _, _, S, _, _, + _, _, _, _, _, + _, _, _, _, _, + + _, _, B, _, _, + _, _, T, _, _, + _, _, B, _, _, + _, _, B, _, _, + L, _, B, _, L, + L, L, B, L, L, + S, L, B, L, S, + _, L, B, L, _, + _, L, B, L, _, + _, L, L, L, _, + _, S, L, S, _, + _, _, L, _, _, + _, _, S, _, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + L, L, _, L, L, + S, L, L, L, S, + _, L, L, L, _, + _, L, L, L, _, + _, S, L, S, _, + _, _, L, _, _, + _, _, S, _, _, + _, _, _, _, _, + _, _, _, _, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, L, L, L, _, + _, S, L, S, _, + _, _, S, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + }, + yslice_prob = { + {ypos = 2, prob = 127}, + {ypos = 3, prob = 127}, + }, +}) + + +-- Apple tree log + +mts_save("apple_log", { + size = {x = 4, y = 2, z = 1}, + data = { + {name = "default:tree", param2 = 12, prob = 127}, + {name = "default:tree", param2 = 12}, + {name = "default:tree", param2 = 12}, + {name = "default:tree", param2 = 12}, + {name = "air", prob = 0}, + {name = "flowers:mushroom_brown", prob = 63}, + {name = "air", prob = 0}, + {name = "air", prob = 0}, + }, +}) + + +-- Jungletree log + +mts_save("jungle_log", { + size = {x = 5, y = 2, z = 1}, + data = { + {name = "default:jungletree", param2 = 12, prob = 127}, + {name = "default:jungletree", param2 = 12}, + {name = "default:jungletree", param2 = 12}, + {name = "default:jungletree", param2 = 12}, + {name = "default:jungletree", param2 = 12, prob = 127}, + {name = "air", prob = 0}, + {name = "air", prob = 0}, + {name = "flowers:mushroom_brown", prob = 127}, + {name = "air", prob = 0}, + {name = "air", prob = 0}, + }, +}) + + +-- Pine tree log + +mts_save("pine_log", { + size = {x = 5, y = 2, z = 1}, + data = { + {name = "default:pine_tree", param2 = 12, prob = 127}, + {name = "default:pine_tree", param2 = 12}, + {name = "default:pine_tree", param2 = 12}, + {name = "default:pine_tree", param2 = 12}, + {name = "default:pine_tree", param2 = 12, prob = 127}, + {name = "air", prob = 0}, + {name = "air", prob = 0}, + {name = "flowers:mushroom_red", prob = 63}, + {name = "air", prob = 0}, + {name = "air", prob = 0}, + }, +}) + + +-- Acacia tree log + +mts_save("acacia_log", { + size = {x = 5, y = 1, z = 1}, + data = { + {name = "default:acacia_tree", param2 = 12, prob = 127}, + {name = "default:acacia_tree", param2 = 12}, + {name = "default:acacia_tree", param2 = 12}, + {name = "default:acacia_tree", param2 = 12}, + {name = "default:acacia_tree", param2 = 12, prob = 127}, + }, +}) + + +-- Aspen tree log + +mts_save("aspen_log", { + size = {x = 5, y = 2, z = 1}, + data = { + {name = "default:aspen_tree", param2 = 12, prob = 127}, + {name = "default:aspen_tree", param2 = 12}, + {name = "default:aspen_tree", param2 = 12}, + {name = "default:aspen_tree", param2 = 12}, + {name = "default:aspen_tree", param2 = 12, prob = 127}, + {name = "air", prob = 0}, + {name = "flowers:mushroom_red", prob = 63}, + {name = "flowers:mushroom_brown", prob = 63}, + {name = "air", prob = 0}, + {name = "air", prob = 0}, + }, +}) + + +-- Large cactus + +local C = {name = "default:cactus", prob = 255, param2 = 20} +local R = {name = "default:cactus", prob = 255, param2 = 20, force_place = true} +local E = {name = "default:cactus", prob = 127, param2 = 20} + +mts_save("large_cactus", { + size = {x = 5, y = 7, z = 5}, + data = { + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + + _, _, C, _, _, + _, _, R, _, _, + _, _, C, _, _, + C, C, C, C, C, + C, _, C, _, C, + E, _, C, _, E, + _, _, C, _, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + _, _, _, _, _, + }, + yslice_prob = { + {ypos = 2, prob = 127}, + }, +}) + + +-- Papyrus + +mts_save("papyrus_on_dirt", { + size = {x = 1, y = 7, z = 1}, + data = { + {name = "default:dirt", prob = 255, force_place = true}, + {name = "default:dirt", prob = 255, force_place = true}, + {name = "default:papyrus", prob = 255}, + {name = "default:papyrus", prob = 255}, + {name = "default:papyrus", prob = 255}, + {name = "default:papyrus", prob = 255}, + {name = "default:papyrus", prob = 255}, + }, + yslice_prob = { + {ypos = 2, prob = 127}, + {ypos = 3, prob = 127}, + }, +}) + +mts_save("papyrus_on_dry_dirt", { + size = {x = 1, y = 7, z = 1}, + data = { + {name = "default:dry_dirt", prob = 255, force_place = true}, + {name = "default:dry_dirt", prob = 255, force_place = true}, + {name = "default:papyrus", prob = 255}, + {name = "default:papyrus", prob = 255}, + {name = "default:papyrus", prob = 255}, + {name = "default:papyrus", prob = 255}, + {name = "default:papyrus", prob = 255}, + }, + yslice_prob = { + {ypos = 2, prob = 127}, + {ypos = 3, prob = 127}, + }, +}) + + +-- Bush + +local L = {name = "default:bush_leaves", prob = 255} +local M = {name = "default:bush_leaves", prob = 191} +local N = {name = "default:bush_leaves", prob = 127} +local S = {name = "default:bush_stem", prob = 255, force_place = true} + +mts_save("bush", { + size = {x = 3, y = 3, z = 3}, + data = { + _, _, _, + M, L, M, + N, M, N, + + _, _, _, + L, S, L, + M, L, M, + + _, _, _, + M, L, M, + N, M, N, + }, +}) + + +-- Blueberry bush + +local L = {name = "default:blueberry_bush_leaves_with_berries", prob = 255, force_place = true} +local M = {name = "default:blueberry_bush_leaves_with_berries", prob = 223} +local N = {name = "default:blueberry_bush_leaves_with_berries", prob = 95} + +mts_save("blueberry_bush", { + size = {x = 3, y = 1, z = 3}, + data = { + N, M, N, + + M, L, M, + + N, M, N, + }, +}) + + +-- Acacia bush + +local L = {name = "default:acacia_bush_leaves", prob = 255} +local M = {name = "default:acacia_bush_leaves", prob = 191} +local N = {name = "default:acacia_bush_leaves", prob = 127} +local S = {name = "default:acacia_bush_stem", prob = 255, force_place = true} + +mts_save("acacia_bush", { + size = {x = 3, y = 3, z = 3}, + data = { + _, _, _, + N, M, N, + M, L, M, + + _, _, _, + M, S, M, + L, L, L, + + _, _, _, + N, M, N, + M, L, M, + }, +}) + + +-- Pine bush + +local L = {name = "default:pine_bush_needles", prob = 255} +local M = {name = "default:pine_bush_needles", prob = 191} +local N = {name = "default:pine_bush_needles", prob = 127} +local S = {name = "default:pine_bush_stem", prob = 255, force_place = true} + +mts_save("pine_bush", { + size = {x = 3, y = 3, z = 3}, + data = { + _, _, _, + M, L, M, + N, M, N, + + _, _, _, + L, S, L, + M, L, M, + + _, _, _, + M, L, M, + N, M, N, + }, +}) diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 00000000..d648ea4b Binary files /dev/null and b/screenshot.png differ diff --git a/settingtypes.txt b/settingtypes.txt new file mode 100644 index 00000000..445510ff --- /dev/null +++ b/settingtypes.txt @@ -0,0 +1,80 @@ +# This file contains settings of minetest_game that can be changed in +# minetest.conf + +# In creative mode players are able to dig all kind of blocks nearly +# instantly, and have access to unlimited resources. +# Some of the functionality is only available if this setting is present +# at startup. +creative_mode (Creative mode) bool false + +# Flammable nodes will be ignited by nearby igniters. Spreading fire may +# cause severe destruction. +# Spreading fire nodes will disappear when fire is disabled, but +# 'permanent_flame' nodes are unaffected. +enable_fire (Fire) bool true + +# Enable flame sound. +flame_sound (Flame sound) bool true + +# Enable lavacooling. +enable_lavacooling (Lavacooling) bool true + +# If enabled, steel tools, torches and cobblestone will be given to new +# players. +give_initial_stuff (Give initial items) bool false + +# If enabled, players respawn at the bed they last lay on instead of normal +# spawn. +# This setting is only read at startup. +enable_bed_respawn (Respawn at bed) bool true + +# If enabled, the night can be skipped if more than half of the players are +# in beds. +enable_bed_night_skip (Skip night when sleeping) bool true + +# If enabled, fences and walls cannot be jumped over. +enable_fence_tall (Tall fences and walls) bool false + +# When TNT explodes, it destroys nearby nodes and damages nearby players. +# This setting is disabled by default on servers. +enable_tnt (TNT) bool true + +# The radius in which nodes will be destroyed by a TNT explosion. +tnt_radius (TNT radius) int 3 0 + +# Sets the behaviour of the inventory items when a player dies. +# bones: Store items in a bone node but drop items if inside protected area. +# drop: Drop items on the ground. +# keep: Player keeps items. +bones_mode (Bones mode) enum bones bones,drop,keep + +# The time in seconds after which the bones of a dead player can be looted +# by everyone. +# Setting this to 0 will disable sharing of bones completely. +share_bones_time (Bones share time) int 1200 0 + +# How much earlier the bones of a dead player can be looted by +# everyone if the player dies in a protected area they don't own. +# 0 to disable. By default it is "share_bones_time" divide by four. +share_bones_time_early (Earlier bones share time) int 300 0 + +# Inform player of condition and location of new bones. +bones_position_message (Inform player about bones) bool false + +# Replaces old stairs with new ones. Only required for older worlds. +enable_stairs_replace_abm (Replace old stairs) bool false + +# If enabled, use the engine's spawn search which does not check for a +# suitable starting biome. +engine_spawn (Use engine spawn search) bool false + +# Whether river water source nodes create flowing sounds. +# Helps rivers create more sound, especially on level sections. +river_source_sounds (River source node sounds) bool false + +# Enable cloud and shadow intensity variation by the 'weather' mod. +# Non-functional in V6 or Singlenode mapgens. +enable_weather (Enable weather) bool true + +# If enabled, non-player actions are logged +log_non_player_actions (Log non-player action) bool false diff --git a/utils/optimize_textures.sh b/utils/optimize_textures.sh new file mode 100644 index 00000000..2f9a6da5 --- /dev/null +++ b/utils/optimize_textures.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +# Colors with 0 alpha need to be preserved, because opaque leaves ignore alpha. +# For that purpose, the use of indexed colors is disabled (-nc). + +find -name '../*.png' -print0 | xargs -0 optipng -o7 -zm1-9 -nc -strip all -clobber