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/.gitlab-ci.yml b/.gitlab-ci.yml index 00059617..77868c1c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,6 +1,18 @@ -syntax: +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: - - git submodule init - - git submodule sync - - git submodule update - - luac5.1 -s -p mods/*/*.lua + - luarocks install luacheck + - luacheck mods diff --git a/.gitmodules b/.gitmodules old mode 100644 new mode 100755 index d00ac2a2..8f236303 --- a/.gitmodules +++ b/.gitmodules @@ -1,80 +1,329 @@ [submodule "mods/illuna"] path = mods/illuna - url = https://git.tchncs.de/Illuna-Minetest/illuna.git + url = ../../Illuna-Minetest/illuna.git [submodule "mods/wine"] path = mods/wine - url = https://github.com/tenplus1/wine + url = https://notabug.org/TenPlus1/wine [submodule "mods/death_messages"] path = mods/death_messages - url = https://git.tchncs.de/Illuna-Minetest/death_messages.git -[submodule "mods/mobs_redo"] - path = mods/mobs_redo - url = https://github.com/tenplus1/mobs_redo -[submodule "mods/mobs_animal"] - path = mods/mobs_animal - url = https://git.tchncs.de/Illuna-Minetest/mobs_animal.git + url = ../../Illuna-Minetest/death_messages.git [submodule "mods/worldedit"] path = mods/worldedit url = https://github.com/Uberi/Minetest-WorldEdit -[submodule "mods/3d_armor"] - path = mods/3d_armor - url = https://github.com/stujones11/minetest-3d_armor -[submodule "mods/plantlife_modpack"] - path = mods/plantlife_modpack - url = https://git.tchncs.de/Illuna-Minetest/plantlife_modpack.git -[submodule "mods/darkage"] - path = mods/darkage - url = https://git.tchncs.de/Illuna-Minetest/darkage.git -[submodule "mods/hudbars"] - path = mods/hudbars - url = https://git.tchncs.de/Illuna-Minetest/hudbars.git [submodule "mods/xdecor"] path = mods/xdecor - url = https://git.tchncs.de/Illuna-Minetest/xdecor.git -[submodule "mods/caverealms"] - path = mods/caverealms - url = https://git.tchncs.de/Illuna-Minetest/caverealms.git + url = ../../Illuna-Minetest/xdecor.git [submodule "mods/wardrobe"] path = mods/wardrobe - url = https://git.tchncs.de/Illuna-Minetest/wardrobe.git + url = ../../Illuna-Minetest/wardrobe.git [submodule "mods/ctravelnet"] path = mods/ctravelnet - url = https://git.tchncs.de/Illuna-Minetest/ctravelnet.git + url = ../../Illuna-Minetest/ctravelnet.git [submodule "mods/cottages"] path = mods/cottages - url = https://git.tchncs.de/Illuna-Minetest/cottages.git/ -[submodule "mods/horses"] - path = mods/horses - url = https://git.tchncs.de/Illuna-Minetest/horses.git + url = ../../Illuna-Minetest/cottages.git/ [submodule "mods/bows"] path = mods/bows - url = https://git.tchncs.de/Illuna-Minetest/bows - branch = illuna -[submodule "mods/mobs_monster"] - path = mods/mobs_monster - url = https://git.tchncs.de/Illuna-Minetest/mobs_monster + url = ../../Illuna-Minetest/bows + branch = master [submodule "mods/pkarcs"] path = mods/pkarcs - url = https://git.tchncs.de/Illuna-Minetest/pkarcs -[submodule "mods/farming"] - path = mods/farming - url = https://git.tchncs.de/Illuna-Minetest/farming -[submodule "mods/boats"] - path = mods/boats - url = https://git.tchncs.de/Illuna-Minetest/boats -[submodule "mods/technic_chests"] - path = mods/technic_chests - url = https://git.tchncs.de/Illuna-Minetest/technic_chests + url = ../../Illuna-Minetest/pkarcs [submodule "mods/columnia"] path = mods/columnia - url = https://git.tchncs.de/Illuna-Minetest/columnia -[submodule "mods/hemp"] - path = mods/hemp - url = https://github.com/pithydon/hemp.git -[submodule "mods/coloured_nametag"] - path = mods/coloured_nametag - url = https://github.com/Amaz1/coloured_nametag - -[submodule "mods/bags"] - path = mods/bags - url = https://git.tchncs.de/Illuna-Minetest/bags + 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 index f087d303..72c7582f 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -1,17 +1,60 @@ -unused_args = false -allow_defined_top = true +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 -read_globals = { - "DIR_DELIM", - "minetest", "core", - "dump", - "vector", "nodeupdate", - "VoxelManip", "VoxelArea", - "PseudoRandom", "ItemStack", + --"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. } --- Overwrites minetest.handle_node_drops -files["mods/creative/init.lua"].globals = { "minetest" } --- Don't report on legacy definitions of globals. -files["mods/default/legacy.lua"].global = false + diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 805fe08c..00000000 --- a/.travis.yml +++ /dev/null @@ -1,14 +0,0 @@ -language: generic - -branches: - only: - - master - -sudo: required - -before_install: - - sudo apt-get update - - sudo apt-get install -y luarocks - - sudo luarocks install luacheck - -script: luacheck --no-color ./mods 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/game.conf b/game.conf index 317180e6..5bb625df 100644 --- a/game.conf +++ b/game.conf @@ -1 +1,3 @@ -name = Illuna +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 index 2f0715f8..c8b4cec3 100644 --- a/game_api.txt +++ b/game_api.txt @@ -2,10 +2,11 @@ Minetest Game API ================= GitHub Repo: https://github.com/minetest/minetest_game + Introduction ------------ -The Minetest Game subgame offers multiple new possibilities in addition to the Minetest engine's built-in API, +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: @@ -14,21 +15,28 @@ Please note: * [#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 + {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 -------- @@ -37,6 +45,7 @@ Beds API 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 @@ -62,16 +71,106 @@ Beds API } } + +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 ------------ -A global string called `creative.formspec_add` was added which allows mods to add additional formspec elements onto the default creative inventory formspec to be drawn after each update. +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 @@ -107,37 +206,104 @@ The doors mod allows modders to register custom doors and trapdoors. 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 tiles of the four side parts 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", + 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 --------- @@ -160,6 +326,7 @@ Allows creation of new fences with "fencelike" drawtype. groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, sounds = default.node_sound_wood_defaults(), + Walls API --------- @@ -172,6 +339,7 @@ walls.register(name, desc, texture, mat, sounds) ^ mat = "default:stone". Used to auto-generate crafting recipe. ^ sounds = sounds: see [#Default sounds] + Farming API ----------- @@ -183,6 +351,9 @@ The farming API allows you to easily register plants and hoes. `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 @@ -202,6 +373,8 @@ The farming API allows you to easily register plants and hoes. { 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) @@ -209,9 +382,12 @@ The farming API allows you to easily register plants and hoes. 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)` @@ -219,6 +395,14 @@ New node def property: * 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 ---------------------- @@ -250,21 +434,89 @@ Give Initial Stuff API ^ str is a comma separated list of initial stuff ^ Adds items to the list of items to be given -Nyancat API ------------ -`nyancat.place(pos, facedir, length)` +Player API +---------- -^ Place a cat at `pos` facing `facedir` with tail length `length` - Only accepts facedir 0-3, if facedir > 3 then it will be interpreted as facedir = 0 +The player API can register player models and update the player's appearance. -`nyancat.generate(minp, maxp, seed)` +* `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 + } -^ Called by `minetest.register_on_generated`. To disable nyancat generation, - you can redefine nyancat.generate() to be an empty function TNT API ----------- +------- `tnt.register_tnt(definition)` @@ -274,6 +526,7 @@ TNT API * `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. @@ -283,17 +536,20 @@ TNT API * `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)` +`tnt.boom(position[, definition])` ^ Create an explosion. * `position` The center of explosion. -* `definition` The TNT definion as passed to `tnt.register` +* `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)` - -^ Ignite TNT at position +`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': @@ -375,38 +631,186 @@ set a players home position and teleport a player to 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. -`stairs.register_stair(subname, recipeitem, groups, images, description, sounds)` +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. - * Registers a stair. +`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] + * `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)` +`stairs.register_slab(subname, recipeitem, groups, images, description, sounds, worldaligntex)` - * Registers a slabs - * `subname`: Basically the material name (e.g. cobble) used for the stair name. Nodename pattern: "stairs:stair_subname" + * 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 stair's definition - * `sounds`: see [#Default sounds] + * `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_and_slab(subname, recipeitem, groups, images, desc_stair, desc_slab, sounds)` +`stairs.register_stair_inner(subname, recipeitem, groups, images, description, sounds, worldaligntex, full_description)` - * A wrapper for stairs.register_stair and stairs.register_slab + * 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 node + * `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 ---------- @@ -421,12 +825,18 @@ Creates panes that automatically connect to each other ### Pane definition { - textures = {"texture_Bottom_top", "texture_left_right", "texture_front_back"}, -- More tiles aren't supported + 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 -------------------- @@ -458,151 +868,121 @@ Sounds inside the default table can be used within the sounds field of node defi * `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) -Player API ----------- -The player API can register player models and update the player's appearence +GUI and formspecs +----------------- -`default.player_register_model(name, def)` +`default.get_hotbar_bg(x, y)` - * Register a new model to be used by players. - * name: model filename such as "character.x", "foo.b3d", etc. - * def: See [#Model definition] + * Get the hotbar background as string, containing the formspec elements + * x: Horizontal position in the formspec + * y: Vertical position in the formspec -`default.registered_player_models[name]` +`default.gui_bg` - * Get a model's definition - * see [#Model definition] + * Deprecated, remove from mods. -`default.player_set_model(player, model_name)` +`default.gui_bg_img` - * Change a player's model - * `player`: PlayerRef - * `model_name`: model registered with player_register_model() + * Deprecated, remove from mods. -`default.player_set_animation(player, anim_name [, speed])` +`default.gui_slots` - * Applies an animation to a player - * anim_name: name of the animation. - * speed: frames per second. If nil, default from the model is used + * Deprecated, remove from mods. -`default.player_set_textures(player, textures)` +`default.gui_survival_form` - * Sets player textures - * `player`: PlayerRef - * `textures`: array of textures, If `textures` is nil, the default textures from the model def are used + * Entire formspec for the survival inventory -default.player_get_animation(player) +`default.get_furnace_active_formspec(fuel_percent, item_percent)` - * Returns a table containing fields `model`, `textures` and `animation`. - * Any of the fields of the returned table may be nil. - * player: PlayerRef + * 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 -### Model Definition +`default.get_furnace_inactive_formspec()` + + * Get the inactive furnace formspec using the defined GUI elements - { - animation_speed = 30, -- Default animation speed, in FPS. - textures = {"character.png", }, -- Default array of textures. - visual_size = {x = 1, y = 1}, -- Used to scale the model. - animations = { - -- = {x = , y = }, - foo = {x = 0, y = 19}, - bar = {x = 20, y = 39}, - -- ... - }, - } Leafdecay --------- -To enable leaf decay for a node, add it to the `leafdecay` group. +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. -The rating of the group determines how far from a node in the group `tree` -the node can be without decaying. +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. -If `param2` of the 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)). -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. -If the node is in the `leafdecay_drop` group then it will always be dropped as an -item. Dyes ---- -To make recipes that will work with any dye ever made by anybody, define -them based on groups. You can select any group of groups, based on your need for -amount of colors. +Minetest Game dyes are registered with: -### Color groups + groups = {dye = 1, color_ = 1}, -Base color groups: +To make recipes that will work with dyes from many mods, define them using the +dye group and the color groups. - * `basecolor_white` - * `basecolor_grey` - * `basecolor_black` - * `basecolor_red` - * `basecolor_yellow` - * `basecolor_green` - * `basecolor_cyan` - * `basecolor_blue` - * `basecolor_magenta` +Dye color groups: -Extended color groups ( * means also base color ) + * `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` - * `excolor_white` * - * `excolor_lightgrey` - * `excolor_grey` * - * `excolor_darkgrey` - * `excolor_black` * - * `excolor_red` * - * `excolor_orange` - * `excolor_yellow` * - * `excolor_lime` - * `excolor_green` * - * `excolor_aqua` - * `excolor_cyan` * - * `excolor_sky_blue` - * `excolor_blue` * - * `excolor_violet` - * `excolor_magenta` * - * `excolor_red_violet` - -The whole unifieddyes palette as groups: - - * `unicolor_` - -For the following, no white/grey/black is allowed: - - * `unicolor_medium_` - * `unicolor_dark_` - * `unicolor_light_` - * `unicolor__s50` - * `unicolor_medium__s50` - * `unicolor_dark__s50` - -Example of one shapeless recipe using a color group: +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:basecolor_yellow'}, + output = ":item_yellow", + recipe = {":item_no_color", "group:dye,color_yellow"}, }) -### Color lists - - * `dye.basecolors` are an array containing the names of available base colors - - * `dye.excolors` are an array containing the names of the available extended colors Trees ----- @@ -625,11 +1005,143 @@ Trees * `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_new_snowy_pine_tree(pos)` - * Grows a new design snowy pine 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 index 2ecda837..ecd861f8 100644 Binary files a/menu/header.png and b/menu/header.png differ diff --git a/menu/icon.png b/menu/icon.png index bf90c829..323149bc 100644 Binary files a/menu/icon.png and b/menu/icon.png differ diff --git a/minetest.conf.example b/minetest.conf.example index f5e4e85d..bb6eb644 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -1,18 +1,21 @@ -# This file contains settings of Minetest Game that can be changed in minetest.conf +# 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 +# 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 all items inside a bone node but drop items if inside protected area -# "drop": Drop all items on the ground -# "keep": Player keeps all items -#bones_mode = "bones" +# 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 +# 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 @@ -20,28 +23,58 @@ # 0 to disable. By default it is "share_bones_time" divide by four. #share_bones_time_early = 300 -# Whether fire should be enabled. If disabled, 'basic flame' nodes will disappear. -# 'permanent flame' nodes will remain with either setting. +# 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 -# 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 +# Enable flame sound. +#flame_sound = true -# Whether the TNT mod should be enabled +# 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 +# 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 you allow respawning in beds -# Default value is true +# 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 +# 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 index 456c84e9..1fd6a10b 160000 --- a/mods/3d_armor +++ b/mods/3d_armor @@ -1 +1 @@ -Subproject commit 456c84e93ea03fcae24e53145d45808ec70d6896 +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/bags b/mods/bags deleted file mode 160000 index 78067127..00000000 --- a/mods/bags +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 78067127510351651e0bf578d1556466da0bcb16 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 index 9710c459..7b35e141 100644 --- a/mods/beds/README.txt +++ b/mods/beds/README.txt @@ -1,30 +1,30 @@ Minetest Game mod: beds ======================= -by BlockMen (c) 2014-2015 +See license.txt for license information. -Version: 1.1.1 +Authors of source code +---------------------- +Originally by BlockMen (MIT) +Various Minetest developers and contributors (MIT) -About -~~~~~ -This mod adds a bed to Minetest which allows to skip the night. To sleep rightclick the bed, if playing -in singleplayer mode the night gets skipped imideatly. If playing on server you get shown how many other -players are in bed too. If all players are sleeping the night gets skipped aswell. Also the night skip can be forced -if more than 50% of the players are lying in bed and use this option. +Authors of media (textures) +--------------------------- +BlockMen (CC BY-SA 3.0) + All textures unless otherwise noted -Another feature is a controled 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 also disable the night skip feature by setting "enable_bed_night_skip = false" in minetest.conf or by using -the /set command ingame. +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. -License of source code, textures: WTFPL ---------------------------------------- -(c) Copyright BlockMen (2014-2015) - - -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://sam.zoy.org/wtfpl/COPYING for more details. +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 index 3624ea45..4a9c6679 100644 --- a/mods/beds/api.lua +++ b/mods/beds/api.lua @@ -16,7 +16,9 @@ local function destruct_bed(pos, n) if reverse then reverse = not reverse minetest.remove_node(other) - nodeupdate(other) + minetest.check_for_falling(other) + beds.remove_spawns_at(pos) + beds.remove_spawns_at(other) else reverse = not reverse end @@ -29,12 +31,13 @@ function beds.register_bed(name, def) 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 = {snappy = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 1}, - sounds = default.node_sound_wood_defaults(), + 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, @@ -46,16 +49,27 @@ function beds.register_bed(name, def) 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 minetest.registered_items[minetest.get_node(under).name].buildable_to then + if udef and udef.buildable_to then pos = under else pos = pointed_thing.above end - if minetest.is_protected(pos, placer:get_player_name()) and - not minetest.check_player_privs(placer, "protection_bypass") then - minetest.record_protection_violation(pos, placer:get_player_name()) + 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 @@ -64,12 +78,13 @@ function beds.register_bed(name, def) return itemstack end - local dir = minetest.dir_to_facedir(placer:get_look_dir()) + 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, placer:get_player_name()) and - not minetest.check_player_privs(placer, "protection_bypass") then - minetest.record_protection_violation(botpos, placer:get_player_name()) + 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 @@ -81,7 +96,7 @@ function beds.register_bed(name, def) minetest.set_node(pos, {name = name .. "_bottom", param2 = dir}) minetest.set_node(botpos, {name = name .. "_top", param2 = dir}) - if not minetest.setting_getbool("creative_mode") then + if not minetest.is_creative_enabled(player_name) then itemstack:take_item() end return itemstack @@ -96,7 +111,7 @@ function beds.register_bed(name, def) return itemstack end, - on_rotate = function(pos, node, user, mode, new_param2) + 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) @@ -108,7 +123,7 @@ function beds.register_bed(name, def) minetest.record_protection_violation(p, user:get_player_name()) return false end - if mode ~= screwdriver.ROTATE_FACE then + if new_param2 % 32 > 3 then return false end local newp = vector.add(pos, minetest.facedir_to_dir(new_param2)) @@ -128,17 +143,22 @@ function beds.register_bed(name, def) 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 = {snappy = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 2}, - sounds = default.node_sound_wood_defaults(), + 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", @@ -147,6 +167,12 @@ function beds.register_bed(name, def) 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") diff --git a/mods/beds/beds.lua b/mods/beds/beds.lua index 5f31f136..dc044a35 100644 --- a/mods/beds/beds.lua +++ b/mods/beds/beds.lua @@ -1,25 +1,30 @@ +-- beds/beds.lua + +-- support for MT game translation. +local S = beds.get_translator + -- Fancy shaped bed beds.register_bed("beds:fancy_bed", { - description = "Fancy Bed", + description = S("Fancy Bed"), inventory_image = "beds_bed_fancy.png", wield_image = "beds_bed_fancy.png", tiles = { bottom = { "beds_bed_top1.png", - "default_wood.png", + "beds_bed_under.png", "beds_bed_side1.png", "beds_bed_side1.png^[transformFX", - "default_wood.png", + "beds_bed_foot.png", "beds_bed_foot.png", }, top = { "beds_bed_top2.png", - "default_wood.png", + "beds_bed_under.png", "beds_bed_side2.png", "beds_bed_side2.png^[transformFX", "beds_bed_head.png", - "default_wood.png", + "beds_bed_head.png", } }, nodebox = { @@ -44,7 +49,7 @@ beds.register_bed("beds:fancy_bed", { selectionbox = {-0.5, -0.5, -0.5, 0.5, 0.06, 1.5}, recipe = { {"", "", "group:stick"}, - {"wool:red", "wool:red", "wool:white"}, + {"wool:white", "wool:white", "wool:white"}, {"group:wood", "group:wood", "group:wood"}, }, }) @@ -52,13 +57,13 @@ beds.register_bed("beds:fancy_bed", { -- Simple shaped bed beds.register_bed("beds:bed", { - description = "Simple Bed", + description = S("Simple Bed"), inventory_image = "beds_bed.png", wield_image = "beds_bed.png", tiles = { bottom = { "beds_bed_top_bottom.png^[transformR90", - "default_wood.png", + "beds_bed_under.png", "beds_bed_side_bottom_r.png", "beds_bed_side_bottom_r.png^[transformfx", "beds_transparent.png", @@ -66,7 +71,7 @@ beds.register_bed("beds:bed", { }, top = { "beds_bed_top_top.png^[transformR90", - "default_wood.png", + "beds_bed_under.png", "beds_bed_side_top_r.png", "beds_bed_side_top_r.png^[transformfx", "beds_bed_side_top.png", @@ -74,12 +79,12 @@ beds.register_bed("beds:bed", { } }, nodebox = { - bottom = {-0.5, -0.5, -0.5, 0.5, 0.06, 0.5}, - top = {-0.5, -0.5, -0.5, 0.5, 0.06, 0.5}, + 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.06, 1.5}, + selectionbox = {-0.5, -0.5, -0.5, 0.5, 0.0625, 1.5}, recipe = { - {"wool:red", "wool:red", "wool:white"}, + {"wool:white", "wool:white", "wool:white"}, {"group:wood", "group:wood", "group:wood"} }, }) @@ -88,3 +93,17 @@ beds.register_bed("beds:bed", { 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/depends.txt b/mods/beds/depends.txt deleted file mode 100644 index 470ec30b..00000000 --- a/mods/beds/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -default -wool diff --git a/mods/beds/functions.lua b/mods/beds/functions.lua index b1c2c977..409aa376 100644 --- a/mods/beds/functions.lua +++ b/mods/beds/functions.lua @@ -1,28 +1,33 @@ local pi = math.pi -local player_in_bed = 0 local is_sp = minetest.is_singleplayer() -local enable_respawn = minetest.setting_getbool("enable_bed_respawn") +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 n = minetest.get_node(pos) - if n.param2 == 1 then - return pi / 2, n.param2 - elseif n.param2 == 3 then - return -pi / 2, n.param2 - elseif n.param2 == 0 then - return pi, n.param2 + 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, n.param2 + return 0, rotation end end local function is_night_skip_enabled() - local enable_night_skip = minetest.setting_getbool("enable_bed_night_skip") + local enable_night_skip = minetest.settings:get_bool("enable_bed_night_skip") if enable_night_skip == nil then enable_night_skip = true end @@ -55,61 +60,105 @@ local function lay_down(player, pos, bed_pos, state, skip) -- stand up if state ~= nil and not state then - local p = beds.pos[name] or nil - if beds.player[name] ~= nil then - beds.player[name] = nil - player_in_bed = player_in_bed - 1 + 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 - if p then - player:setpos(p) - 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) - default.player_attached[name] = false - player:set_physics_override(1, 1, 1) + player_api.player_attached[name] = false hud_flags.wielditem = true - default.player_set_animation(player, "stand" , 30) + player_api.set_animation(player, "stand" , 30) -- lay down else - beds.player[name] = 1 - beds.pos[name] = pos - player_in_bed = player_in_bed + 1 - -- physics, eye_offset, etc - player:set_eye_offset({x = 0, y = -13, z = 0}, {x = 0, y = 0, z = 0}) + -- 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) - local p = {x = bed_pos.x + dir.x / 2, y = bed_pos.y, z = bed_pos.z + dir.z / 2} - player:set_physics_override(0, 0, 0) - player:setpos(p) - default.player_attached[name] = true + -- 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 - default.player_set_animation(player, "lay" , 0) + 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 form_n + 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,11; Good morning.]" + form_n = beds.formspec .. "label[2.7,9;" .. esc(S("Good morning.")) .. "]" else - form_n = beds.formspec .. "label[2.2,11;" .. tostring(player_in_bed) .. - " of " .. tostring(ges) .. " players are in bed]" + 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,8;4,0.75;force;Force night skip]" + form_n = form_n .. "button_exit[2,6;4,0.75;force;" .. + esc(S("Force night skip")) .. "]" end end @@ -134,14 +183,14 @@ end function beds.on_rightclick(pos, player) local name = player:get_player_name() - local ppos = player:getpos() + 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, "You can only sleep at night.") + minetest.chat_send_player(name, S("You can only sleep at night.")) return end @@ -171,16 +220,25 @@ function beds.on_rightclick(pos, player) 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 +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:setpos(pos) + player:set_pos(pos) return true end end) @@ -201,20 +259,42 @@ minetest.register_on_leaveplayer(function(player) 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 - update_formspecs(is_night_skip_enabled()) - if is_night_skip_enabled() 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 index 8b258901..a1a46ce9 100644 --- a/mods/beds/init.lua +++ b/mods/beds/init.lua @@ -1,11 +1,20 @@ +-- 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,15;true]" .. - "bgcolor[#080808BB; true]" .. - "button_exit[2,12;4,0.75;leave;Leave Bed]" +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") 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 index 6b1f4041..1a2ce810 100644 --- a/mods/beds/spawns.lua +++ b/mods/beds/spawns.lua @@ -53,7 +53,7 @@ end function beds.set_spawns() for name,_ in pairs(beds.player) do local player = minetest.get_player_by_name(name) - local p = player:getpos() + 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 @@ -61,3 +61,12 @@ function beds.set_spawns() 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 index 5c0054c6..d4b02e77 100644 Binary files a/mods/beds/textures/beds_bed.png 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 index 4f9e8a74..1c9fde9a 100644 Binary files a/mods/beds/textures/beds_bed_fancy.png 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 index 74d84c86..af510bb6 100644 Binary files a/mods/beds/textures/beds_bed_foot.png 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 index 763f5e14..b98b1104 100644 Binary files a/mods/beds/textures/beds_bed_head.png 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 index 1ed8158e..8ded54fd 100644 Binary files a/mods/beds/textures/beds_bed_side1.png 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 index 9d1384d4..a6bdb99d 100644 Binary files a/mods/beds/textures/beds_bed_side2.png 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 index 99ff309f..ed80f752 100644 Binary files a/mods/beds/textures/beds_bed_side_bottom.png 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 index 6f870e80..2d86532d 100644 Binary files a/mods/beds/textures/beds_bed_side_bottom_r.png 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 index b2807c5f..04b2ba1e 100644 Binary files a/mods/beds/textures/beds_bed_side_top.png 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 index 429ad7db..c3c07b1b 100644 Binary files a/mods/beds/textures/beds_bed_side_top_r.png 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 index b6fcc2c5..2b3ae8dc 100644 Binary files a/mods/beds/textures/beds_bed_top1.png 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 index 2fe5bf2b..b80353cb 100644 Binary files a/mods/beds/textures/beds_bed_top2.png 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 index 9b78be63..43dcc649 100644 Binary files a/mods/beds/textures/beds_bed_top_bottom.png 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 index e877c808..9b3d08fa 100644 Binary files a/mods/beds/textures/beds_bed_top_top.png 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 index 2dc0e3dc..bd36820b 100644 Binary files a/mods/beds/textures/beds_transparent.png 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 b/mods/boats deleted file mode 160000 index a7534e93..00000000 --- a/mods/boats +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a7534e938834c1a0322e49df796f613ca1f55880 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 index cf99bc8b..91bcd109 100644 --- a/mods/bones/README.txt +++ b/mods/bones/README.txt @@ -1,17 +1,12 @@ Minetest Game mod: bones ======================== +See license.txt for license information. -License of source code: ------------------------ -Copyright (C) 2012 PilzAdam - -WTFPL - -License of media (textures and sounds) --------------------------------------- -Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) -http://creativecommons.org/licenses/by-sa/3.0/ - -Authors of media files +Authors of source code ---------------------- -All textures: paramat +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 index 20ae55e0..708e7107 100644 --- a/mods/bones/init.lua +++ b/mods/bones/init.lua @@ -1,6 +1,13 @@ +-- 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 @@ -11,9 +18,6 @@ end local bones_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]" .. @@ -21,11 +25,11 @@ local bones_formspec = "listring[current_player;main]" .. default.get_hotbar_bg(0,4.85) -local share_bones_time = tonumber(minetest.setting_get("share_bones_time")) or 1200 -local share_bones_time_early = tonumber(minetest.setting_get("share_bones_time_early")) or share_bones_time / 4 +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 = "Bones", + description = S("Bones"), tiles = { "bones_top.png^[transform2", "bones_bottom.png", @@ -68,6 +72,12 @@ minetest.register_node("bones:bones", { 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, @@ -111,7 +121,7 @@ minetest.register_node("bones:bones", { local meta = minetest.get_meta(pos) local time = meta:get_int("time") + elapsed if time >= share_bones_time then - meta:set_string("infotext", meta:get_string("owner") .. "'s old bones") + meta:set_string("infotext", S("@1's old bones", meta:get_string("owner"))) meta:set_string("owner", "") else meta:set_int("time", time) @@ -131,8 +141,18 @@ local function may_replace(pos, player) return false end - -- allow replacing air and liquids - if node_name == "air" or node_definition.liquidtype ~= "none" then + -- 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 @@ -144,14 +164,13 @@ local function may_replace(pos, player) -- 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 - -- exception are of course any protected buildable_to - return node_definition.buildable_to and not minetest.is_protected(pos, player:get_player_name()) + 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:setvelocity({ + obj:set_velocity({ x = math.random(-10, 10) / 9, y = 5, z = math.random(-10, 10) / 9, @@ -159,52 +178,72 @@ local drop = function(pos, itemstack) end end -minetest.register_on_dieplayer(function(player) +local player_inventory_lists = { "main", "craft" } +bones.player_inventory_lists = player_inventory_lists - local bones_mode = minetest.setting_get("bones_mode") or "bones" +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.setting_getbool("creative_mode") then + 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 player_inv:is_empty("main") and - player_inv:is_empty("craft") then + 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 - local pos = vector.round(player:getpos()) - local player_name = player:get_player_name() - - -- check if it's possible to place bones, if not go 1 higher + -- 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 - pos.y = pos.y + 1 - end - - -- still cannot place bones? change mode to 'drop' - if bones_mode == "bones" and not may_replace(pos, player) then - bones_mode = "drop" + 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 - - -- drop inventory items - for i = 1, player_inv:get_size("main") do - drop(pos, player_inv:get_stack("main", i)) + 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 - player_inv:set_list("main", {}) - - -- drop crafting grid items - for i = 1, player_inv:get_size("craft") do - drop(pos, player_inv:get_stack("craft", i)) - end - player_inv:set_list("craft", {}) - 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 @@ -213,29 +252,33 @@ minetest.register_on_dieplayer(function(player) 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) - inv:set_list("main", player_inv:get_list("main")) - for i = 1, player_inv:get_size("craft") do - local stack = player_inv:get_stack("craft", i) - if inv:room_for_item("main", stack) then - inv:add_item("main", stack) - else - --drop if no space left - drop(pos, stack) + 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 - player_inv:set_list("main", {}) - player_inv:set_list("craft", {}) - meta:set_string("formspec", bones_formspec) meta:set_string("owner", player_name) if share_bones_time ~= 0 then - meta:set_string("infotext", player_name .. "'s fresh bones") + 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) @@ -245,6 +288,6 @@ minetest.register_on_dieplayer(function(player) minetest.get_node_timer(pos):start(10) else - meta:set_string("infotext", player_name.."'s bones") + 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 index 859c6bbe..d3d5d322 100644 Binary files a/mods/bones/textures/bones_bottom.png 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 index 1e524370..1617d8f7 100644 Binary files a/mods/bones/textures/bones_front.png 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 index 4cfe236d..05ee2a12 100644 Binary files a/mods/bones/textures/bones_rear.png 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 index a07595f4..c8ac5053 100644 Binary files a/mods/bones/textures/bones_side.png 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 index 198a8a2d..63786da7 100644 Binary files a/mods/bones/textures/bones_top.png and b/mods/bones/textures/bones_top.png differ diff --git a/mods/bows b/mods/bows index 5013537e..f7bbb90b 160000 --- a/mods/bows +++ b/mods/bows @@ -1 +1 @@ -Subproject commit 5013537e24f526fbae97a6693a08d6eff7f8cd9b +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 index a6674b43..58997b26 100644 --- a/mods/bucket/README.txt +++ b/mods/bucket/README.txt @@ -1,26 +1,13 @@ Minetest Game mod: bucket ========================= +See license.txt for license information. -License of source code: ------------------------ -Copyright (C) 2011-2012 Kahrl -Copyright (C) 2011-2012 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 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/ - -Authors of media files ------------------------ -Everything not listed in here: -Copyright (C) 2010-2012 celeron55, Perttu Ahola - +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 index a7cb0f27..ebdf2e74 100644 --- a/mods/bucket/init.lua +++ b/mods/bucket/init.lua @@ -1,15 +1,19 @@ -- 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', + output = "bucket:bucket_empty 1", recipe = { - {'default:steel_ingot', '', 'default:steel_ingot'}, - {'', 'default:steel_ingot', ''}, + {"default:steel_ingot", "", "default:steel_ingot"}, + {"", "default:steel_ingot", ""}, } }) @@ -36,12 +40,17 @@ end -- 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) +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] @@ -64,7 +73,8 @@ function bucket.register_liquid(source, flowing, itemname, inventory_image, name -- Call on_rightclick if the pointed node defines it if ndef and ndef.on_rightclick and - user and not user:get_player_control().sneak then + not (user and user:is_player() and + user:get_player_control().sneak) then return ndef.on_rightclick( pointed_thing.under, node, user, @@ -105,13 +115,16 @@ function bucket.register_liquid(source, flowing, itemname, inventory_image, name end minetest.register_craftitem("bucket:bucket_empty", { - description = "Empty Bucket", + description = S("Empty Bucket"), inventory_image = "bucket.png", - stack_max = 99, + groups = {tool = 1}, liquids_pointable = true, on_use = function(itemstack, user, pointed_thing) - -- Must be pointing to node - if pointed_thing.type ~= "node" then + 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 @@ -139,7 +152,7 @@ minetest.register_craftitem("bucket:bucket_empty", { if inv:room_for_item("main", {name=liquiddef.itemname}) then inv:add_item("main", liquiddef.itemname) else - local pos = user:getpos() + local pos = user:get_pos() pos.y = math.floor(pos.y + 0.5) minetest.add_item(pos, liquiddef.itemname) end @@ -149,9 +162,24 @@ minetest.register_craftitem("bucket:bucket_empty", { end - minetest.add_node(pointed_thing.under, {name="air"}) + -- 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, }) @@ -161,17 +189,24 @@ bucket.register_liquid( "default:water_flowing", "bucket:bucket_water", "bucket_water.png", - "Water Bucket", - {water_bucket = 1} + 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", - "River Water Bucket", - {water_bucket = 1} + S("River Water Bucket"), + {tool = 1, water_bucket = 1}, + true ) bucket.register_liquid( @@ -179,7 +214,8 @@ bucket.register_liquid( "default:lava_flowing", "bucket:bucket_lava", "bucket_lava.png", - "Lava Bucket" + S("Lava Bucket"), + {tool = 1} ) minetest.register_craft({ @@ -189,3 +225,16 @@ minetest.register_craft({ 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 old mode 100755 new mode 100644 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 index be67d107..dfc42637 160000 --- a/mods/caverealms +++ b/mods/caverealms @@ -1 +1 @@ -Subproject commit be67d10792ce97dfddf29dfc0fb0180a24cfd955 +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/coloured_nametag b/mods/coloured_nametag deleted file mode 160000 index c50a4ca8..00000000 --- a/mods/coloured_nametag +++ /dev/null @@ -1 +0,0 @@ -Subproject commit c50a4ca893e5383d75ff274533327a5faf20b1b7 diff --git a/mods/cottages b/mods/cottages index e40a4ee8..876ff2de 160000 --- a/mods/cottages +++ b/mods/cottages @@ -1 +1 @@ -Subproject commit e40a4ee8389e54db44bf0cdba21a298bfeae77c3 +Subproject commit 876ff2de08bd2135b69040cebc6aaedf22fd4509 diff --git a/mods/creative/README.txt b/mods/creative/README.txt index fa735524..32e8d22a 100644 --- a/mods/creative/README.txt +++ b/mods/creative/README.txt @@ -1,23 +1,17 @@ Minetest Game mod: creative =========================== +See license.txt for license information. -Implements creative mode. - -Switch on by using the "creative_mode" setting. - -Registered items that -- have a description, and -- do not have the group not_in_creative_inventory -are added to the creative inventory. - -License of source code and media files: ---------------------------------------- -Copyright (C) 2012 Perttu Ahola (celeron55) -Copyright (C) 2016 Jean-Patrick G. (kilbith) - -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://sam.zoy.org/wtfpl/COPYING for more details. +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 index cc7f81c8..f3134858 100644 --- a/mods/creative/init.lua +++ b/mods/creative/init.lua @@ -1,234 +1,62 @@ --- minetest/creative/init.lua +-- creative/init.lua + +-- Load support for MT game translation. +local S = minetest.get_translator("creative") creative = {} -local player_inventory = {} -local creative_mode = minetest.setting_getbool("creative_mode") +creative.get_translator = S --- Create detached creative inventory after loading all mods -creative.init_creative_inventory = function(owner) - local owner_name = owner:get_player_name() - player_inventory[owner_name] = { - size = 0, - filter = "", - start_i = 1, - tab_id = 2, - } - - minetest.create_detached_inventory("creative_" .. owner_name, { - allow_move = function(inv, from_list, from_index, to_list, to_index, count, player) - if creative_mode and not to_list == "main" then - return count +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 - return 0 + sfinv.set_player_inventory_formspec(player) end - end, - allow_put = function(inv, listname, index, stack, player) - return 0 - end, - allow_take = function(inv, listname, index, stack, player) - if creative_mode then - return -1 - else - return 0 - end - end, - on_move = function(inv, from_list, from_index, to_list, to_index, count, player) - end, - on_put = function(inv, listname, index, stack, player) - end, - on_take = function(inv, listname, index, stack, player) - local player_name, stack_name = player:get_player_name(), stack:get_name() - --print(player_name .. " takes item from creative inventory; listname = " .. listname .. ", index = " .. index .. ", stack = " .. dump(stack:to_table())) - if stack then - minetest.log("action", player_name .. " takes " .. stack_name .. " from creative inventory") - --print("Stack name: " .. stack_name .. ", Stack count: " .. stack:get_count()) - end - end, - }) - - creative.update_creative_inventory(owner_name) - --print("creative inventory size: " .. player_inventory[player_name].size) -end - -local function tab_category(tab_id) - local id_category = { - nil, -- Reserved for crafting tab. - minetest.registered_items, - minetest.registered_nodes, - minetest.registered_tools, - minetest.registered_craftitems - } - - -- If index out of range, show default ("All") page. - return id_category[tab_id] or id_category[2] -end - -function creative.update_creative_inventory(player_name) - local creative_list = {} - local player_inv = minetest.get_inventory({type = "detached", name = "creative_" .. player_name}) - local inv = player_inventory[player_name] - - for name, def in pairs(tab_category(inv.tab_id)) do - if not (def.groups.not_in_creative_inventory == 1) and - def.description and def.description ~= "" and - (def.name:find(inv.filter, 1, true) or - def.description:lower():find(inv.filter, 1, true)) then - creative_list[#creative_list+1] = name end - end - - table.sort(creative_list) - player_inv:set_size("main", #creative_list) - player_inv:set_list("main", creative_list) - inv.size = #creative_list + end) end --- Create the trash field -local trash = minetest.create_detached_inventory("creative_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) - if creative_mode then - return stack:get_count() - else - return 0 - end - end, - on_put = function(inv, listname) - inv:set_list(listname, {}) - 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, }) -trash:set_size("main", 1) -creative.formspec_add = "" +-- Override the engine's creative mode function +local old_is_creative_enabled = minetest.is_creative_enabled -creative.set_creative_formspec = function(player, start_i) - local player_name = player:get_player_name() - local inv = player_inventory[player_name] - local pagenum = math.floor(start_i / (3*8) + 1) - local pagemax = math.ceil(inv.size / (3*8)) - - player:set_inventory_formspec([[ - size[8,8.6] - image[4.06,3.4;0.8,0.8;creative_trash_icon.png] - list[current_player;main;0,4.7;8,1;] - list[current_player;main;0,5.85;8,3;8] - list[detached:creative_trash;main;4,3.3;1,1;] - listring[] - tablecolumns[color;text;color;text] - tableoptions[background=#00000000;highlight=#00000000;border=false] - button[5.4,3.2;0.8,0.9;creative_prev;<] - button[7.25,3.2;0.8,0.9;creative_next;>] - button[2.1,3.4;0.8,0.5;creative_search;?] - button[2.75,3.4;0.8,0.5;creative_clear;X] - tooltip[creative_search;Search] - tooltip[creative_clear;Reset] - listring[current_player;main] - ]] .. - "field[0.3,3.5;2.2,1;creative_filter;;" .. minetest.formspec_escape(inv.filter) .. ";false]" .. - "listring[detached:creative_" .. player_name .. ";main]" .. - "tabheader[0,0;creative_tabs;Crafting,All,Nodes,Tools,Items;" .. tostring(inv.tab_id) .. ";true;false]" .. - "list[detached:creative_" .. player_name .. ";main;0,0;8,3;" .. tostring(start_i) .. "]" .. - "table[6.05,3.35;1.15,0.5;pagenum;#FFFF00," .. tostring(pagenum) .. ",#FFFFFF,/ " .. tostring(pagemax) .. "]" .. - default.get_hotbar_bg(0,4.7) .. - default.gui_bg .. default.gui_bg_img .. default.gui_slots - .. creative.formspec_add - ) +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 -creative.set_crafting_formspec = function(player) - player:set_inventory_formspec([[ - size[8,8.6] - list[current_player;craft;2,0.75;3,3;] - list[current_player;craftpreview;6,1.75;1,1;] - list[current_player;main;0,4.7;8,1;] - list[current_player;main;0,5.85;8,3;8] - list[detached:creative_trash;main;0,2.75;1,1;] - image[0.06,2.85;0.8,0.8;creative_trash_icon.png] - image[5,1.75;1,1;gui_furnace_arrow_bg.png^[transformR270] - tabheader[0,0;creative_tabs;Crafting,All,Nodes,Tools,Items;1;true;false] - listring[current_player;main] - listring[current_player;craft] - ]] .. - default.get_hotbar_bg(0,4.7) .. - default.gui_bg .. default.gui_bg_img .. default.gui_slots - ) +-- For backwards compatibility: +function creative.is_enabled_for(name) + return minetest.is_creative_enabled(name) end -minetest.register_on_joinplayer(function(player) - -- If in creative mode, modify player's inventory forms - if not creative_mode then - return - end - creative.init_creative_inventory(player) - creative.set_creative_formspec(player, 0) -end) +dofile(minetest.get_modpath("creative") .. "/inventory.lua") -minetest.register_on_player_receive_fields(function(player, formname, fields) - if formname ~= "" or not creative_mode then - return - end +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} - local player_name = player:get_player_name() - local inv = player_inventory[player_name] - - if fields.quit then - if inv.tab_id == 1 then - creative.set_crafting_formspec(player) - end - elseif fields.creative_tabs then - local tab = tonumber(fields.creative_tabs) - inv.tab_id = tab - player_inventory[player_name].start_i = 1 - - if tab == 1 then - creative.set_crafting_formspec(player) - else - creative.update_creative_inventory(player_name) - creative.set_creative_formspec(player, 0) - end - elseif fields.creative_clear then - player_inventory[player_name].start_i = 1 - inv.filter = "" - creative.update_creative_inventory(player_name) - creative.set_creative_formspec(player, 0) - elseif fields.creative_search or - fields.key_enter_field == "creative_filter" then - player_inventory[player_name].start_i = 1 - inv.filter = fields.creative_filter:lower() - creative.update_creative_inventory(player_name) - creative.set_creative_formspec(player, 0) - else - local start_i = player_inventory[player_name].start_i or 0 - - if fields.creative_prev then - start_i = start_i - 3*8 - if start_i < 0 then - start_i = inv.size - (inv.size % (3*8)) - if inv.size == start_i then - start_i = math.max(0, inv.size - (3*8)) - end - end - elseif fields.creative_next then - start_i = start_i + 3*8 - if start_i >= inv.size then - start_i = 0 - end - end - - player_inventory[player_name].start_i = start_i - creative.set_creative_formspec(player, start_i) - end -end) - -if creative_mode then - local digtime = 0.5 - local caps = {times = {digtime, digtime, digtime}, uses = 0, maxlevel = 3} - - minetest.register_item(":", { - type = "none", - wield_image = "wieldhand.png", - wield_scale = {x = 1, y = 1, z = 2.5}, + -- Override the hand tool + minetest.override_item("", { range = 10, tool_capabilities = { full_punch_interval = 0.5, @@ -239,26 +67,34 @@ if creative_mode then 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 - minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack) - return true - 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) - function minetest.handle_node_drops(pos, drops, digger) - if not digger or not digger:is_player() then - return - end - local inv = digger:get_inventory() - if inv then - for _, item in ipairs(drops) do - item = ItemStack(item):get_name() - if not inv:contains_item("main", item) then - inv:add_item("main", item) - 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 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 index e789ad63..a0f6d237 100644 Binary files a/mods/creative/textures/creative_trash_icon.png and b/mods/creative/textures/creative_trash_icon.png differ diff --git a/mods/darkage b/mods/darkage deleted file mode 160000 index 3d7d76d4..00000000 --- a/mods/darkage +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3d7d76d4b4becaa00bb658769fa6dde4e2eafe96 diff --git a/mods/death_messages b/mods/death_messages index 32f96793..d6f359ed 160000 --- a/mods/death_messages +++ b/mods/death_messages @@ -1 +1 @@ -Subproject commit 32f967935fa71c6bd103d107117168a86a3ec21e +Subproject commit d6f359ed0c297b400f6aaa50e686b826b88f8200 diff --git a/mods/default/README.txt b/mods/default/README.txt index 85c5a4ef..949b9402 100644 --- a/mods/default/README.txt +++ b/mods/default/README.txt @@ -1,98 +1,73 @@ Minetest Game mod: default ========================== +See license.txt for license information. -License of source code: ------------------------ -Copyright (C) 2011-2012 celeron55, Perttu Ahola +Authors of source code +---------------------- +Originally by celeron55, Perttu Ahola (LGPLv2.1+) +Various Minetest developers and contributors (LGPLv2.1+) -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. +The torch code was derived by sofar from the 'torches' mod by +BlockMen (LGPLv2.1+) -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/ - -Authors of media files ------------------------ +Authors of media (textures, sounds, models and schematics) +---------------------------------------------------------- Everything not listed in here: -Copyright (C) 2010-2012 celeron55, Perttu Ahola +celeron55, Perttu Ahola (CC BY-SA 3.0) -Cisoun's WTFPL texture pack: + +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 -Cisoun's conifers mod (WTFPL): - default_pine_needles.png +RealBadAngel's animated water (CC BY-SA 3.0): + default_water_source_animated.png + default_water_flowing_animated.png -Originating from G4JC's Almost MC Texture Pack: - default_torch.png - default_torch_on_ceiling.png - default_torch_on_floor.png - -VanessaE's animated torches (WTFPL): +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 - -RealBadAngel's animated water (WTFPL): - default_water_source_animated.png - default_water_flowing_animated.png - -VanessaE (WTFPL): default_desert_sand.png default_desert_stone.png default_sand.png default_mese_crystal.png default_mese_crystal_fragment.png -Calinou (CC BY-SA): +Calinou (CC BY-SA 3.0): default_brick.png default_papyrus.png default_mineral_copper.png - default_glass_detail.png -MirceaKitsune (WTFPL): - character.x - -Jordach (CC BY-SA 3.0): - character.png - -PilzAdam (WTFPL): +PilzAdam (CC BY-SA 3.0): default_jungleleaves.png default_junglesapling.png default_obsidian_glass.png default_obsidian_shard.png default_mineral_gold.png - default_snowball.png -jojoa1997 (WTFPL): +jojoa1997 (CC BY-SA 3.0): default_obsidian.png -InfinityProject (WTFPL): +InfinityProject (CC BY-SA 3.0): default_mineral_diamond.png Splizard (CC BY-SA 3.0): - default_snow.png default_pine_sapling.png + default_pine_needles.png Zeg9 (CC BY-SA 3.0): default_coal_block.png - default_steel_block.png - default_copper_block.png - default_bronze_block.png - default_gold_block.png paramat (CC BY-SA 3.0): wieldhand.png -- Copied from character.png by Jordach (CC BY-SA 3.0) @@ -100,10 +75,16 @@ paramat (CC BY-SA 3.0): 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 @@ -120,22 +101,46 @@ paramat (CC BY-SA 3.0): default_dry_grass.png default_dry_grass_side.png default_dry_grass_*.png - default_grass.png - default_grass_side.png - default_snow_side.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 -brunob.santos (CC BY-SA 4.0): - default_desert_cobble.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_book.png default_tool_*.png default_lava_source_animated.png default_lava_flowing_animated.png @@ -146,84 +151,257 @@ BlockMen (CC BY-SA 3.0): default_chest_top.png default_mineral_mese.png default_meselamp.png - bubble.png - gui_*.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_book_written.png, based on default_book.png default_aspen_sapling - default_aspen_leaves 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 (WTFPL): +sofar (CC0 1.0): default_gravel.png -- Derived from Gambit's PixelBOX texture pack light gravel -Neuromancer (CC BY-SA 2.0): +Neuromancer (CC BY-SA 3.0): default_cobble.png, based on texture by Brane praefect default_mossycobble.png, based on texture by Brane praefect -Neuromancer (CC BY-SA 3.0): - default_dirt.png default_furnace_*.png -Gambit (WTFPL): +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.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 (WTFPL): +asl97 (CC BY-SA 3.0): default_ice.png -KevDoy (CC BY-SA 3.0) - heart.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): - default_dig_choppy.ogg - default_dig_cracky.ogg - default_dig_crumbly.1.ogg - default_dig_crumbly.2.ogg +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.1.ogg - default_dug_node.2.ogg + default_dug_node.*.ogg default_grass_footstep.1.ogg default_grass_footstep.2.ogg default_grass_footstep.3.ogg - default_gravel_footstep.1.ogg - default_gravel_footstep.2.ogg - default_gravel_footstep.3.ogg - default_gravel_footstep.4.ogg - default_grass_footstep.1.ogg - default_place_node.1.ogg - default_place_node.2.ogg - default_place_node.3.ogg - default_place_node_hard.1.ogg - default_place_node_hard.2.ogg - default_snow_footstep.1.ogg - default_snow_footstep.2.ogg - default_hard_footstep.1.ogg - default_hard_footstep.2.ogg - default_hard_footstep.3.ogg - default_sand_footstep.1.ogg - default_sand_footstep.2.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/default/aliases.lua b/mods/default/aliases.lua index 1a877ecf..c871a800 100644 --- a/mods/default/aliases.lua +++ b/mods/default/aliases.lua @@ -23,7 +23,7 @@ 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("rail", "carts:rail") minetest.register_alias("ladder", "default:ladder_wood") minetest.register_alias("default:ladder_wood", "default:ladder") minetest.register_alias("wood", "default: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 index 1151f47b..af7e6cb9 100644 --- a/mods/default/crafting.lua +++ b/mods/default/crafting.lua @@ -1,723 +1,410 @@ -- mods/default/crafting.lua minetest.register_craft({ - output = 'default:wood 4', + output = "default:wood 4", recipe = { - {'default:tree'}, + {"default:tree"}, } }) minetest.register_craft({ - output = 'default:junglewood 4', + output = "default:junglewood 4", recipe = { - {'default:jungletree'}, + {"default:jungletree"}, } }) minetest.register_craft({ - output = 'default:pine_wood 4', + output = "default:pine_wood 4", recipe = { - {'default:pine_tree'}, + {"default:pine_tree"}, } }) minetest.register_craft({ - output = 'default:acacia_wood 4', + output = "default:acacia_wood 4", recipe = { - {'default:acacia_tree'}, + {"default:acacia_tree"}, } }) minetest.register_craft({ - output = 'default:aspen_wood 4', + output = "default:aspen_wood 4", recipe = { - {'default:aspen_tree'}, + {"default:aspen_tree"}, } }) minetest.register_craft({ - output = 'default:stick 4', + output = "default:wood", recipe = { - {'group:wood'}, + {"default:bush_stem"}, } }) minetest.register_craft({ - output = 'default:sign_wall_steel 3', + output = "default:acacia_wood", recipe = { - {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - {'', 'group:stick', ''}, + {"default:acacia_bush_stem"}, } }) minetest.register_craft({ - output = 'default:sign_wall_wood 3', + output = "default:pine_wood", recipe = { - {'group:wood', 'group:wood', 'group:wood'}, - {'group:wood', 'group:wood', 'group:wood'}, - {'', 'group:stick', ''}, + {"default:pine_bush_stem"}, } }) minetest.register_craft({ - output = 'default:torch 4', + output = "default:sign_wall_steel 1", recipe = { - {'default:coal_lump'}, - {'group:stick'}, + {"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:pick_wood', + output = "default:sign_wall_wood 3", recipe = { - {'group:wood', 'group:wood', 'group:wood'}, - {'', 'group:stick', ''}, - {'', 'group:stick', ''}, + {"group:wood", "group:wood", "group:wood"}, + {"group:wood", "group:wood", "group:wood"}, + {"", "group:stick", ""}, } }) minetest.register_craft({ - output = 'default:pick_stone', + output = "default:coalblock", recipe = { - {'group:stone', 'group:stone', 'group:stone'}, - {'', 'group:stick', ''}, - {'', 'group:stick', ''}, + {"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:pick_steel', + output = "default:steelblock", recipe = { - {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - {'', 'group:stick', ''}, - {'', 'group:stick', ''}, + {"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:pick_bronze', + output = "default:copperblock", recipe = { - {'default:bronze_ingot', 'default:bronze_ingot', 'default:bronze_ingot'}, - {'', 'group:stick', ''}, - {'', 'group:stick', ''}, + {"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:pick_mese', + output = "default:tinblock", recipe = { - {'default:mese_crystal', 'default:mese_crystal', 'default:mese_crystal'}, - {'', 'group:stick', ''}, - {'', 'group:stick', ''}, + {"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:pick_diamond', + output = "default:bronzeblock", recipe = { - {'default:diamond', 'default:diamond', 'default:diamond'}, - {'', 'group:stick', ''}, - {'', 'group:stick', ''}, + {"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:shovel_wood', + output = "default:bronze_ingot 9", recipe = { - {'group:wood'}, - {'group:stick'}, - {'group:stick'}, + {"default:bronzeblock"}, } }) minetest.register_craft({ - output = 'default:shovel_stone', + output = "default:goldblock", recipe = { - {'group:stone'}, - {'group:stick'}, - {'group:stick'}, + {"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:shovel_steel', + output = "default:diamondblock", recipe = { - {'default:steel_ingot'}, - {'group:stick'}, - {'group:stick'}, + {"default:diamond", "default:diamond", "default:diamond"}, + {"default:diamond", "default:diamond", "default:diamond"}, + {"default:diamond", "default:diamond", "default:diamond"}, } }) minetest.register_craft({ - output = 'default:shovel_bronze', + output = "default:sandstone", recipe = { - {'default:bronze_ingot'}, - {'group:stick'}, - {'group:stick'}, + {"default:sand", "default:sand"}, + {"default:sand", "default:sand"}, } }) minetest.register_craft({ - output = 'default:shovel_mese', + output = "default:sand 4", recipe = { - {'default:mese_crystal'}, - {'group:stick'}, - {'group:stick'}, + {"default:sandstone"}, } }) minetest.register_craft({ - output = 'default:shovel_diamond', + output = "default:sandstonebrick 4", recipe = { - {'default:diamond'}, - {'group:stick'}, - {'group:stick'}, + {"default:sandstone", "default:sandstone"}, + {"default:sandstone", "default:sandstone"}, } }) minetest.register_craft({ - output = 'default:axe_wood', + output = "default:sandstone_block 9", recipe = { - {'group:wood', 'group:wood'}, - {'group:wood', 'group:stick'}, - {'', 'group:stick'}, + {"default:sandstone", "default:sandstone", "default:sandstone"}, + {"default:sandstone", "default:sandstone", "default:sandstone"}, + {"default:sandstone", "default:sandstone", "default:sandstone"}, } }) minetest.register_craft({ - output = 'default:axe_stone', + output = "default:desert_sandstone", recipe = { - {'group:stone', 'group:stone'}, - {'group:stone', 'group:stick'}, - {'', 'group:stick'}, + {"default:desert_sand", "default:desert_sand"}, + {"default:desert_sand", "default:desert_sand"}, } }) minetest.register_craft({ - output = 'default:axe_steel', + output = "default:desert_sand 4", recipe = { - {'default:steel_ingot', 'default:steel_ingot'}, - {'default:steel_ingot', 'group:stick'}, - {'', 'group:stick'}, + {"default:desert_sandstone"}, } }) minetest.register_craft({ - output = 'default:axe_bronze', + output = "default:desert_sandstone_brick 4", recipe = { - {'default:bronze_ingot', 'default:bronze_ingot'}, - {'default:bronze_ingot', 'group:stick'}, - {'', 'group:stick'}, + {"default:desert_sandstone", "default:desert_sandstone"}, + {"default:desert_sandstone", "default:desert_sandstone"}, } }) minetest.register_craft({ - output = 'default:axe_mese', + output = "default:desert_sandstone_block 9", recipe = { - {'default:mese_crystal', 'default:mese_crystal'}, - {'default:mese_crystal', 'group:stick'}, - {'', 'group:stick'}, + {"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:axe_diamond', + output = "default:silver_sandstone", recipe = { - {'default:diamond', 'default:diamond'}, - {'default:diamond', 'group:stick'}, - {'', 'group:stick'}, + {"default:silver_sand", "default:silver_sand"}, + {"default:silver_sand", "default:silver_sand"}, } }) minetest.register_craft({ - output = 'default:axe_wood', + output = "default:silver_sand 4", recipe = { - {'group:wood', 'group:wood'}, - {'group:stick', 'group:wood'}, - {'group:stick',''}, + {"default:silver_sandstone"}, } }) minetest.register_craft({ - output = 'default:axe_stone', + output = "default:silver_sandstone_brick 4", recipe = { - {'group:stone', 'group:stone'}, - {'group:stick', 'group:stone'}, - {'group:stick', ''}, + {"default:silver_sandstone", "default:silver_sandstone"}, + {"default:silver_sandstone", "default:silver_sandstone"}, } }) minetest.register_craft({ - output = 'default:axe_steel', + output = "default:silver_sandstone_block 9", recipe = { - {'default:steel_ingot', 'default:steel_ingot'}, - {'group:stick', 'default:steel_ingot'}, - {'group:stick', ''}, + {"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:axe_bronze', + output = "default:clay", recipe = { - {'default:bronze_ingot', 'default:bronze_ingot'}, - {'group:stick', 'default:bronze_ingot'}, - {'group:stick', ''}, + {"default:clay_lump", "default:clay_lump"}, + {"default:clay_lump", "default:clay_lump"}, } }) - -minetest.register_craft({ - output = 'default:axe_mese', - recipe = { - {'default:mese_crystal', 'default:mese_crystal'}, - {'group:stick', 'default:mese_crystal'}, - {'group:stick', ''}, - } -}) - -minetest.register_craft({ - output = 'default:axe_diamond', - recipe = { - {'default:diamond', 'default:diamond'}, - {'group:stick', 'default:diamond'}, - {'group:stick', ''}, - } -}) - -minetest.register_craft({ - output = 'default:sword_wood', - recipe = { - {'group:wood'}, - {'group:wood'}, - {'group:stick'}, - } -}) - -minetest.register_craft({ - output = 'default:sword_stone', - recipe = { - {'group:stone'}, - {'group:stone'}, - {'group:stick'}, - } -}) - -minetest.register_craft({ - output = 'default:sword_steel', - recipe = { - {'default:steel_ingot'}, - {'default:steel_ingot'}, - {'group:stick'}, - } -}) - +--[[ minetest.register_craft({ - output = 'default:sword_bronze', + output = "default:brick", recipe = { - {'default:bronze_ingot'}, - {'default:bronze_ingot'}, - {'group:stick'}, + {"default:clay_brick", "default:clay_brick"}, + {"default:clay_brick", "default:clay_brick"}, } }) - +]] minetest.register_craft({ - output = 'default:sword_mese', + output = "default:bookshelf", recipe = { - {'default:mese_crystal'}, - {'default:mese_crystal'}, - {'group:stick'}, + {"group:wood", "group:wood", "group:wood"}, + {"default:book", "default:book", "default:book"}, + {"group:wood", "group:wood", "group:wood"}, } }) minetest.register_craft({ - output = 'default:sword_diamond', + output = "default:ladder_wood 5", recipe = { - {'default:diamond'}, - {'default:diamond'}, - {'group:stick'}, + {"group:stick", "", "group:stick"}, + {"group:stick", "group:stick", "group:stick"}, + {"group:stick", "", "group:stick"}, } }) minetest.register_craft({ - output = 'default:rail 24', + output = "default:ladder_steel 15", recipe = { - {'default:steel_ingot', '', 'default:steel_ingot'}, - {'default:steel_ingot', 'group:stick', '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", "", "default:steel_ingot"}, } }) minetest.register_craft({ - output = 'default:chest', + output = "default:mese", recipe = { - {'group:wood', 'group:wood', 'group:wood'}, - {'group:wood', '', 'group:wood'}, - {'group:wood', 'group:wood', 'group:wood'}, + {"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:chest_locked', + output = "default:meselamp", recipe = { - {'group:wood', 'group:wood', 'group:wood'}, - {'group:wood', 'default:steel_ingot', 'group:wood'}, - {'group:wood', 'group:wood', 'group:wood'}, + {"default:glass"}, + {"default:mese_crystal"}, } }) -minetest.register_craft( { - type = "shapeless", - output = "default:chest_locked", - recipe = {"default:chest", "default:steel_ingot"}, -}) - minetest.register_craft({ - output = 'default:furnace', + output = "default:obsidian", recipe = { - {'group:stone', 'group:stone', 'group:stone'}, - {'group:stone', '', 'group:stone'}, - {'group:stone', 'group:stone', 'group:stone'}, + {"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({ - type = "shapeless", - output = "default:bronze_ingot", - recipe = {"default:steel_ingot", "default:copper_ingot"}, -}) - -minetest.register_craft({ - output = 'default:coalblock', + output = "default:obsidianbrick 4", 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'}, + {"default:obsidian", "default:obsidian"}, + {"default:obsidian", "default:obsidian"} } }) minetest.register_craft({ - output = 'default:coal_lump 9', + output = "default:obsidian_block 9", recipe = { - {'default:coalblock'}, + {"default:obsidian", "default:obsidian", "default:obsidian"}, + {"default:obsidian", "default:obsidian", "default:obsidian"}, + {"default:obsidian", "default:obsidian", "default:obsidian"}, } }) minetest.register_craft({ - output = 'default:steelblock', + output = "default:stonebrick 4", 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'}, + {"default:stone", "default:stone"}, + {"default:stone", "default:stone"}, } }) minetest.register_craft({ - output = 'default:steel_ingot 9', + output = "default:stone_block 9", recipe = { - {'default:steelblock'}, + {"default:stone", "default:stone", "default:stone"}, + {"default:stone", "default:stone", "default:stone"}, + {"default:stone", "default:stone", "default:stone"}, } }) minetest.register_craft({ - output = 'default:copperblock', + output = "default:desert_stonebrick 4", 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'}, + {"default:desert_stone", "default:desert_stone"}, + {"default:desert_stone", "default:desert_stone"}, } }) minetest.register_craft({ - output = 'default:copper_ingot 9', + output = "default:desert_stone_block 9", recipe = { - {'default:copperblock'}, + {"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:bronzeblock', + output = "default:snowblock", 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'}, + {"default:snow", "default:snow", "default:snow"}, + {"default:snow", "default:snow", "default:snow"}, + {"default:snow", "default:snow", "default:snow"}, } }) minetest.register_craft({ - output = 'default:bronze_ingot 9', + output = "default:snow 9", recipe = { - {'default:bronzeblock'}, + {"default:snowblock"}, } }) minetest.register_craft({ - output = 'default:goldblock', + output = "default:emergent_jungle_sapling", 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'}, + {"default:junglesapling", "default:junglesapling", "default:junglesapling"}, + {"default:junglesapling", "default:junglesapling", "default:junglesapling"}, + {"default:junglesapling", "default:junglesapling", "default:junglesapling"}, } }) minetest.register_craft({ - output = 'default:gold_ingot 9', + output = "default:large_cactus_seedling", recipe = { - {'default:goldblock'}, + {"", "default:cactus", ""}, + {"default:cactus", "default:cactus", "default:cactus"}, + {"", "default:cactus", ""}, } }) -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:diamond 9', - recipe = { - {'default:diamondblock'}, - } -}) - -minetest.register_craft({ - output = 'default:sandstone', - recipe = { - {'group:sand', 'group:sand'}, - {'group:sand', 'group: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:clay', - recipe = { - {'default:clay_lump', 'default:clay_lump'}, - {'default:clay_lump', 'default:clay_lump'}, - } -}) - -minetest.register_craft({ - output = 'default:clay_lump 4', - recipe = { - {'default:clay'}, - } -}) - -minetest.register_craft({ - output = 'default:brick', - recipe = { - {'default:clay_brick', 'default:clay_brick'}, - {'default:clay_brick', 'default:clay_brick'}, - } -}) - -minetest.register_craft({ - output = 'default:clay_brick 4', - recipe = { - {'default:brick'}, - } -}) - -minetest.register_craft({ - output = 'default:paper', - recipe = { - {'default:papyrus', 'default:papyrus', 'default:papyrus'}, - } -}) - -minetest.register_craft({ - output = 'default:book', - recipe = { - {'default:paper'}, - {'default:paper'}, - {'default:paper'}, - } -}) - -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 3', - 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:mese_crystal 9', - recipe = { - {'default:mese'}, - } -}) - -minetest.register_craft({ - output = 'default:mese_crystal_fragment 9', - recipe = { - {'default:mese_crystal'}, - } -}) - -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:meselamp 1', - recipe = { - {'', 'default:mese_crystal',''}, - {'default:mese_crystal', 'default:glass', 'default:mese_crystal'}, - } -}) - -minetest.register_craft({ - output = 'default:obsidian_shard 9', - recipe = { - {'default:obsidian'} - } -}) - -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'}, - } -}) -- -- Crafting (tool repair) -- + minetest.register_craft({ type = "toolrepair", additional_wear = -0.02, }) + -- -- Cooking recipes -- @@ -752,50 +439,223 @@ minetest.register_craft({ recipe = "default:desert_cobble", }) -minetest.register_craft({ - type = "cooking", - output = "default:steel_ingot", - recipe = "default:iron_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:clay_brick", - recipe = "default:clay_lump", -}) -- -- 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:junglegrass", + 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 = 1, + burntime = 4, }) minetest.register_craft({ @@ -804,10 +664,16 @@ minetest.register_craft({ burntime = 15, }) +minetest.register_craft({ + type = "fuel", + recipe = "default:large_cactus_seedling", + burntime = 5, +}) + minetest.register_craft({ type = "fuel", recipe = "default:papyrus", - burntime = 1, + burntime = 3, }) minetest.register_craft({ @@ -816,45 +682,9 @@ minetest.register_craft({ burntime = 30, }) -minetest.register_craft({ - type = "fuel", - recipe = "default:fence_wood", - burntime = 15, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:fence_acacia_wood", - burntime = 15, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:fence_junglewood", - burntime = 15, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:fence_pine_wood", - burntime = 15, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:fence_aspen_wood", - burntime = 15, -}) - minetest.register_craft({ type = "fuel", recipe = "default:ladder_wood", - burntime = 5, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "group:wood", burntime = 7, }) @@ -864,48 +694,12 @@ minetest.register_craft({ burntime = 60, }) -minetest.register_craft({ - type = "fuel", - recipe = "default:torch", - burntime = 4, -}) - minetest.register_craft({ type = "fuel", recipe = "default:sign_wall_wood", burntime = 10, }) -minetest.register_craft({ - type = "fuel", - recipe = "default:chest", - burntime = 30, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:chest_locked", - burntime = 30, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "group:sapling", - burntime = 10, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:apple", - burntime = 3, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:coal_lump", - burntime = 40, -}) - minetest.register_craft({ type = "fuel", recipe = "default:coalblock", @@ -923,3 +717,21 @@ minetest.register_craft({ 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 index d821af06..d2e827f4 100644 --- a/mods/default/craftitems.lua +++ b/mods/default/craftitems.lua @@ -1,26 +1,72 @@ -- mods/default/craftitems.lua -minetest.register_craftitem("default:stick", { - description = "Stick", - inventory_image = "default_stick.png", - groups = {stick = 1}, -}) +-- support for MT game translation. +local S = default.get_translator -minetest.register_craftitem("default:paper", { - description = "Paper", - inventory_image = "default_paper.png", -}) +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 data = minetest.deserialize(itemstack:get_metadata()) + local meta = itemstack:get_meta() local title, text, owner = "", "", player_name local page, page_max, lines, string = 1, 1, {}, "" - if data then - title = data.title - text = data.text + -- 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 @@ -30,48 +76,85 @@ local function book_on_use(itemstack, user) if data.page then page = data.page page_max = data.page_max - - for i = ((lpp * page) - lpp) + 1, lpp * page do - if not lines[i] then break end - string = string .. lines[i] .. "\n" - end + string = formspec_string(lpp, page, lines, string) end end local formspec - if owner == player_name then - formspec = "size[8,8]" .. default.gui_bg .. - default.gui_bg_img .. - "field[0.5,1;7.5,0;title;Title:;" .. - minetest.formspec_escape(title) .. "]" .. - "textarea[0.5,1.5;7.5,7;text;Contents:;" .. - minetest.formspec_escape(text) .. "]" .. - "button_exit[2.5,7.5;3,1;save;Save]" + 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 = "size[8,8]" .. default.gui_bg .. - default.gui_bg_img .. - "label[0.5,0.5;by " .. owner .. "]" .. - "tablecolumns[color;text]" .. - "tableoptions[background=#00000000;highlight=#00000000;border=false]" .. - "table[0.4,0;7,0.5;title;#FFFF00," .. minetest.formspec_escape(title) .. "]" .. - "textarea[0.5,1.5;7.5,7;;" .. - minetest.formspec_escape(string ~= "" and string or text) .. ";]" .. - "button[2.4,7.6;0.8,0.8;book_prev;<]" .. - "label[3.2,7.7;Page " .. page .. " of " .. page_max .. "]" .. - "button[4.9,7.6;0.8,0.8;book_next;>]" + formspec = formspec_read(owner, title, string, text, page, page_max) end - minetest.show_formspec(player_name, "default:book", formspec) + 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 + if formname ~= "default:book" then + return + end + local player_name = player:get_player_name() local inv = player:get_inventory() - local stack = player:get_wielded_item() + 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 - if fields.save and fields.title ~= "" and fields.text ~= "" then - local new_stack, data - if stack:get_name() ~= "default:book_written" then + 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") @@ -79,33 +162,44 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) stack:set_count(count - 1) new_stack = ItemStack("default:book_written") end - else - data = minetest.deserialize(stack:get_metadata()) + end + + if data.owner ~= player_name and title ~= "" and text ~= "" then + return end if not data then data = {} end - data.title = fields.title - data.text = fields.text - data.text_len = #data.text + 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) - data.owner = player:get_player_name() - local data_str = minetest.serialize(data) if new_stack then - new_stack:set_metadata(data_str) + 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:getpos(), new_stack) + minetest.add_item(player:get_pos(), new_stack) end else - stack:set_metadata(data_str) + stack:get_meta():from_table({ fields = data }) end elseif fields.book_next or fields.book_prev then - local data = minetest.deserialize(stack:get_metadata()) - if not data.page then return end + 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 @@ -119,131 +213,328 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end - local data_str = minetest.serialize(data) - stack:set_metadata(data_str) - book_on_use(stack, player) + stack:get_meta():from_table({fields = data}) + stack = book_on_use(stack, player) end - player:set_wielded_item(stack) + -- 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 = "Book", + description = S("Book"), inventory_image = "default_book.png", - groups = {book = 1}, + groups = {book = 1, flammable = 3}, on_use = book_on_use, }) minetest.register_craftitem("default:book_written", { - description = "Book With Text", + description = S("Book with Text"), inventory_image = "default_book_written.png", - groups = {book = 1, not_in_creative_inventory = 1}, + groups = {book = 1, not_in_creative_inventory = 1, flammable = 3}, stack_max = 1, on_use = book_on_use, }) -minetest.register_craft({ - type = "shapeless", - output = "default:book_written", - recipe = {"default:book", "default:book_written"} -}) - -minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) - if itemstack:get_name() ~= "default:book_written" then - return - end - - local original - local index - for i = 1, player:get_inventory():get_size("craft") do - if old_craft_grid[i]:get_name() == "default:book_written" then - original = old_craft_grid[i] - index = i - end - end - if not original then - return - end - local copymeta = original:get_metadata() - -- copy of the book held by player's mouse cursor - itemstack:set_metadata(copymeta) - -- put the book with metadata back in the craft grid - craft_inv:set_stack("craft", index, original) -end) - -minetest.register_craftitem("default:coal_lump", { - description = "Coal Lump", - inventory_image = "default_coal_lump.png", - groups = {coal = 1} -}) - -minetest.register_craftitem("default:iron_lump", { - description = "Iron Lump", - inventory_image = "default_iron_lump.png", -}) - -minetest.register_craftitem("default:copper_lump", { - description = "Copper Lump", - inventory_image = "default_copper_lump.png", -}) - -minetest.register_craftitem("default:mese_crystal", { - description = "Mese Crystal", - inventory_image = "default_mese_crystal.png", -}) - -minetest.register_craftitem("default:gold_lump", { - description = "Gold Lump", - inventory_image = "default_gold_lump.png", -}) - -minetest.register_craftitem("default:diamond", { - description = "Diamond", - inventory_image = "default_diamond.png", -}) - -minetest.register_craftitem("default:clay_lump", { - description = "Clay Lump", - inventory_image = "default_clay_lump.png", -}) - -minetest.register_craftitem("default:steel_ingot", { - description = "Steel Ingot", - inventory_image = "default_steel_ingot.png", -}) - -minetest.register_craftitem("default:copper_ingot", { - description = "Copper Ingot", - inventory_image = "default_copper_ingot.png", -}) - minetest.register_craftitem("default:bronze_ingot", { - description = "Bronze Ingot", - inventory_image = "default_bronze_ingot.png", -}) - -minetest.register_craftitem("default:gold_ingot", { - description = "Gold Ingot", - inventory_image = "default_gold_ingot.png" -}) - -minetest.register_craftitem("default:mese_crystal_fragment", { - description = "Mese Crystal Fragment", - inventory_image = "default_mese_crystal_fragment.png", + description = S("Bronze Ingot"), + inventory_image = "default_bronze_ingot.png" }) minetest.register_craftitem("default:clay_brick", { - description = "Clay Brick", + description = S("Clay Brick"), inventory_image = "default_clay_brick.png", }) -minetest.register_craftitem("default:obsidian_shard", { - description = "Obsidian Shard", - inventory_image = "default_obsidian_shard.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 = "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 index 867d6bc0..dbc72029 100644 --- a/mods/default/functions.lua +++ b/mods/default/functions.lua @@ -1,5 +1,3 @@ --- mods/default/functions.lua - -- -- Sounds -- @@ -18,7 +16,7 @@ end function default.node_sound_stone_defaults(table) table = table or {} table.footstep = table.footstep or - {name = "default_hard_footstep", gain = 0.5} + {name = "default_hard_footstep", gain = 0.2} table.dug = table.dug or {name = "default_hard_footstep", gain = 1.0} default.node_sound_defaults(table) @@ -28,9 +26,11 @@ end function default.node_sound_dirt_defaults(table) table = table or {} table.footstep = table.footstep or - {name = "default_dirt_footstep", gain = 1.0} + {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.5} + {name = "default_dirt_footstep", gain = 1.0} table.place = table.place or {name = "default_place_node", gain = 1.0} default.node_sound_defaults(table) @@ -40,9 +40,9 @@ end function default.node_sound_sand_defaults(table) table = table or {} table.footstep = table.footstep or - {name = "default_sand_footstep", gain = 0.12} + {name = "default_sand_footstep", gain = 0.05} table.dug = table.dug or - {name = "default_sand_footstep", gain = 0.24} + {name = "default_sand_footstep", gain = 0.15} table.place = table.place or {name = "default_place_node", gain = 1.0} default.node_sound_defaults(table) @@ -52,9 +52,11 @@ end function default.node_sound_gravel_defaults(table) table = table or {} table.footstep = table.footstep or - {name = "default_gravel_footstep", gain = 0.5} + {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_footstep", gain = 1.0} + {name = "default_gravel_dug", gain = 1.0} table.place = table.place or {name = "default_place_node", gain = 1.0} default.node_sound_defaults(table) @@ -64,7 +66,9 @@ end function default.node_sound_wood_defaults(table) table = table or {} table.footstep = table.footstep or - {name = "default_wood_footstep", gain = 0.5} + {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) @@ -74,11 +78,9 @@ end function default.node_sound_leaves_defaults(table) table = table or {} table.footstep = table.footstep or - {name = "default_grass_footstep", gain = 0.35} + {name = "default_grass_footstep", gain = 0.45} table.dug = table.dug or {name = "default_grass_footstep", gain = 0.7} - table.dig = table.dig or - {name = "default_dig_crumbly", gain = 0.4} table.place = table.place or {name = "default_place_node", gain = 1.0} default.node_sound_defaults(table) @@ -88,6 +90,8 @@ 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} @@ -95,6 +99,54 @@ function default.node_sound_glass_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 @@ -105,8 +157,12 @@ lavagen = { } -- thanks to ElectronLibre from Minetest IRC -if minetest.get_modpath("darkage") - then table.insert(lavagen, "darkage:basalt") +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) @@ -116,24 +172,26 @@ default.cool_lava = function(pos, node) 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.25}) + {pos = pos, max_hear_distance = 16, gain = 0.2}, true) end -minetest.register_abm({ - label = "Lava cooling", - nodenames = {"default:lava_source", "default:lava_flowing"}, - neighbors = {"group:water"}, - interval = 1, - chance = 1, - catch_up = false, - action = function(...) - default.cool_lava(...) - 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 +-- Optimized helper to put all items in an inventory into a drops list -- function default.get_inventory_drops(pos, inventory, drops) @@ -148,11 +206,12 @@ function default.get_inventory_drops(pos, inventory, drops) end end + -- -- Papyrus and cactus growing -- --- wrapping the functions in abm action is necessary to make overriding them possible +-- Wrapping the functions in ABM action is necessary to make overriding them possible function default.grow_cactus(pos, node) if node.param2 >= 4 then @@ -172,6 +231,9 @@ function default.grow_cactus(pos, node) 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 @@ -179,7 +241,12 @@ end function default.grow_papyrus(pos, node) pos.y = pos.y - 1 local name = minetest.get_node(pos).name - if name ~= "default:dirt_with_grass" and name ~= "default:dirt" then + 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 @@ -195,6 +262,9 @@ function default.grow_papyrus(pos, node) 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 @@ -213,7 +283,17 @@ minetest.register_abm({ minetest.register_abm({ label = "Grow papyrus", nodenames = {"default:papyrus"}, - neighbors = {"default:dirt", "default:dirt_with_grass"}, + -- 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(...) @@ -223,7 +303,7 @@ minetest.register_abm({ -- --- dig upwards +-- Dig upwards -- function default.dig_up(pos, node, digger) @@ -239,6 +319,7 @@ 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({ @@ -254,7 +335,32 @@ function default.register_fence(name, def) -- Allow almost everything to be overridden local default_fields = { paramtype = "light", - drawtype = "fencelike", + 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 }, @@ -267,7 +373,7 @@ function default.register_fence(name, def) groups = {}, } for k, v in pairs(default_fields) do - if not def[k] then + if def[k] == nil then def[k] = v end end @@ -282,6 +388,121 @@ function default.register_fence(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 -- @@ -289,104 +510,129 @@ end -- Prevent decay of placed leaves default.after_place_leaves = function(pos, placer, itemstack, pointed_thing) - if placer and not placer:get_player_control().sneak then + if placer and placer:is_player() then local node = minetest.get_node(pos) node.param2 = 1 minetest.set_node(pos, node) end end --- Leafdecay ABM - -minetest.register_abm({ - label = "Leaf decay", - nodenames = {"group:leafdecay"}, - neighbors = {"air"}, - interval = 2, - chance = 10, - catch_up = false, - - action = function(pos, node, _, _) - -- Check if leaf is placed - if node.param2 ~= 0 then - return +-- 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 rad = minetest.registered_nodes[node.name].groups.leafdecay - -- Assume ignore is a trunk, to make this - -- work at the border of a loaded area - if minetest.find_node_near(pos, rad, {"ignore", "group:tree"}) then - return - end - -- Drop stuff - local itemstacks = minetest.get_node_drops(node.name) - for _, itemname in ipairs(itemstacks) do - if itemname ~= node.name or - minetest.get_item_group(node.name, "leafdecay_drop") ~= 0 then - local p_drop = { - x = pos.x - 0.5 + math.random(), - y = pos.y - 0.5 + math.random(), - z = pos.z - 0.5 + math.random(), - } - minetest.add_item(p_drop, itemname) +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 - -- Remove node - minetest.remove_node(pos) - nodeupdate(pos) + 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 dirt to something that fits the environment +-- Convert default:dirt to something that fits the environment -- minetest.register_abm({ label = "Grass spread", nodenames = {"default:dirt"}, neighbors = { - "default:dirt_with_grass", - "default:dirt_with_dry_grass", - "default:dirt_with_snow", + "air", "group:grass", "group:dry_grass", "default:snow", }, interval = 6, - chance = 67, + chance = 50, catch_up = false, action = function(pos, node) - -- Most likely case, half the time it's too dark for this. + -- 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 likely neighbors. - local p2 = minetest.find_node_near(pos, 1, {"default:dirt_with_grass", - "default:dirt_with_dry_grass", "default:dirt_with_snow"}) + -- Look for spreading dirt-type neighbours + local p2 = minetest.find_node_near(pos, 1, "group:spreading_dirt_type") if p2 then - -- But the node needs to be under air in this case. - local n2 = minetest.get_node(above) - if n2 and n2.name == "air" then - local n3 = minetest.get_node(p2) - minetest.set_node(pos, {name = n3.name}) - return - end - end - - -- Anything on top? - local n2 = minetest.get_node(above) - if not n2 then + local n3 = minetest.get_node(p2) + minetest.set_node(pos, {name = n3.name}) return end - local name = n2.name - -- Snow check is cheapest, so comes first. + -- 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"}) - -- Most likely case first. 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 @@ -402,11 +648,7 @@ minetest.register_abm({ minetest.register_abm({ label = "Grass covered", - nodenames = { - "default:dirt_with_grass", - "default:dirt_with_dry_grass", - "default:dirt_with_snow", - }, + nodenames = {"group:spreading_dirt_type", "default:dry_dirt_with_dry_grass"}, interval = 8, chance = 50, catch_up = false, @@ -417,7 +659,11 @@ minetest.register_abm({ if name ~= "ignore" and nodedef and not ((nodedef.sunlight_propagates or nodedef.paramtype == "light") and nodedef.liquidtype == "none") then - minetest.set_node(pos, {name = "default:dirt"}) + 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 }) @@ -427,59 +673,144 @@ minetest.register_abm({ -- 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"}, + 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) - if node.name == "default:cobble" then - minetest.set_node(pos, {name = "default:mossycobble"}) - elseif node.name == "stairs:slab_cobble" then - minetest.set_node(pos, {name = "stairs:slab_mossycobble", param2 = node.param2}) - elseif node.name == "stairs:stair_cobble" then - minetest.set_node(pos, {name = "stairs:stair_mossycobble", param2 = node.param2}) + node.name = moss_correspondences[node.name] + if node.name then + minetest.set_node(pos, node) end end }) - -- --- Checks if specified volume intersects a protected volume +-- Register a craft to copy the metadata of items -- -function default.intersects_protection(minp, maxp, player_name, interval) - -- 'interval' is the largest allowed interval for the 3D lattice of checks +function default.register_craft_metadata_copy(ingredient, result) + minetest.register_craft({ + type = "shapeless", + output = result, + recipe = {ingredient, result} + }) - -- Compute the optimal float step 'd' for each axis so that all corners and - -- borders are checked. 'd' will be smaller or equal to 'interval'. - -- Subtracting 1e-4 ensures that the max co-ordinate will be reached by the - -- for loop (which might otherwise not be the case due to rounding errors). - local d = {} - for _, c in pairs({"x", "y", "z"}) do - if maxp[c] > minp[c] then - d[c] = (maxp[c] - minp[c]) / math.ceil((maxp[c] - minp[c]) / interval) - 1e-4 - elseif maxp[c] == minp[c] then - d[c] = 1 -- Any value larger than 0 to avoid division by zero - else -- maxp[c] < minp[c], print error and treat as protection intersected - minetest.log("error", "maxp < minp in 'default.intersects_protection()'") - return true + minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) + if itemstack:get_name() ~= result then + return end - end - for zf = minp.z, maxp.z, d.z do - local z = math.floor(zf + 0.5) - for yf = minp.y, maxp.y, d.y do - local y = math.floor(yf + 0.5) - for xf = minp.x, maxp.x, d.x do - local x = math.floor(xf + 0.5) - if minetest.is_protected({x = x, y = y, z = z}, player_name) then - return true - 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 diff --git a/mods/default/furnace.lua b/mods/default/furnace.lua index b5bca889..e4bc0568 100644 --- a/mods/default/furnace.lua +++ b/mods/default/furnace.lua @@ -1,48 +1,52 @@ +-- 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 -- -local function active_formspec(fuel_percent, item_percent) - local formspec = - "size[8,8.5]".. - default.gui_bg.. - default.gui_bg_img.. - default.gui_slots.. - "list[current_name;src;2.75,0.5;1,1;]".. - "list[current_name;fuel;2.75,2.5;1,1;]".. +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:".. - (100-fuel_percent)..":default_furnace_fire_fg.png]".. + (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[current_name;dst;4.75,0.96;2,2;]".. + "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[current_name;dst]".. + "listring[context;dst]".. "listring[current_player;main]".. - "listring[current_name;src]".. + "listring[context;src]".. + "listring[current_player;main]".. + "listring[context;fuel]".. "listring[current_player;main]".. default.get_hotbar_bg(0, 4.25) - return formspec end -local inactive_formspec = - "size[8,8.5]".. - default.gui_bg.. - default.gui_bg_img.. - default.gui_slots.. - "list[current_name;src;2.75,0.5;1,1;]".. - "list[current_name;fuel;2.75,2.5;1,1;]".. - "image[2.75,1.5;1,1;default_furnace_fire_bg.png]".. - "image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[transformR270]".. - "list[current_name;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[current_name;dst]".. - "listring[current_player;main]".. - "listring[current_name;src]".. - "listring[current_player;main]".. - default.get_hotbar_bg(0, 4.25) +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 @@ -63,7 +67,7 @@ local function allow_metadata_inventory_put(pos, listname, index, stack, player) 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", "Furnace is empty") + meta:set_string("infotext", S("Furnace is empty")) end return stack:get_count() else @@ -90,6 +94,17 @@ local function allow_metadata_inventory_take(pos, listname, index, stack, player 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 @@ -101,7 +116,7 @@ end local function furnace_node_timer(pos, elapsed) -- - -- Inizialize metadata + -- Initialize metadata -- local meta = minetest.get_meta(pos) local fuel_time = meta:get_float("fuel_time") or 0 @@ -109,104 +124,194 @@ local function furnace_node_timer(pos, elapsed) local fuel_totaltime = meta:get_float("fuel_totaltime") or 0 local inv = meta:get_inventory() - local srclist = inv:get_list("src") - local fuellist = inv:get_list("fuel") + local srclist, fuellist + local dst_full = false - -- - -- Cooking - -- + local timer_elapsed = meta:get_int("timer_elapsed") or 0 + meta:set_int("timer_elapsed", timer_elapsed + 1) - -- Check if we have cookable content - local cooked, aftercooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist}) - local cookable = true + local cookable, cooked + local fuel - if cooked.time == 0 then - cookable = false - end + local update = true + while elapsed > 0 and update do + update = false - -- 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 + 1 + srclist = inv:get_list("src") + fuellist = inv:get_list("fuel") - -- If there is a cookable item then check if it is ready yet - if cookable then - src_time = src_time + 1 - 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 = 0 + -- + -- 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 - end - else - -- Furnace ran out of fuel - if cookable then - -- We need to get new fuel - local 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 - fuel_time = 0 - src_time = 0 - else - -- Take fuel from fuel list - inv:set_stack("fuel", 1, afterfuel.items[1]) - - fuel_totaltime = fuel.time - fuel_time = 0 - end else - -- We don't need to get new fuel since there is no cookable item - fuel_totaltime = 0 + -- 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 - src_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 = inactive_formspec + local formspec local item_state local item_percent = 0 if cookable then item_percent = math.floor(src_time / cooked.time * 100) - item_state = item_percent .. "%" - else - if srclist[1]:is_empty() then - item_state = "Empty" + if dst_full then + item_state = S("100% (output full)") else - item_state = "Not cookable" + 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 = "Empty" - local active = "inactive " + local fuel_state = S("Empty") + local active = false local result = false - if fuel_time <= fuel_totaltime and fuel_totaltime ~= 0 then - active = "active " - local fuel_percent = math.floor(fuel_time / fuel_totaltime * 100) - fuel_state = fuel_percent .. "%" - formspec = active_formspec(fuel_percent, item_percent) + 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 - else - if not fuellist[1]:is_empty() then - fuel_state = "0%" + + -- 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 - local timer = minetest.get_node_timer(pos) - timer:stop() + minetest.get_node_timer(pos):stop() + meta:set_int("timer_elapsed", 0) + + stop_furnace_sound(pos) end - local infotext = "Furnace " .. active .. "(Item: " .. item_state .. "; Fuel: " .. fuel_state .. ")" + + 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 @@ -225,7 +330,7 @@ end -- minetest.register_node("default:furnace", { - description = "Furnace", + description = S("Furnace"), tiles = { "default_furnace_top.png", "default_furnace_bottom.png", "default_furnace_side.png", "default_furnace_side.png", @@ -243,21 +348,23 @@ minetest.register_node("default:furnace", { on_construct = function(pos) local meta = minetest.get_meta(pos) - meta:set_string("formspec", inactive_formspec) 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) - local timer = minetest.get_node_timer(pos) - timer:start(1.0) + 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. - local timer = minetest.get_node_timer(pos) - timer:start(1.0) + 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 = {} @@ -275,7 +382,7 @@ minetest.register_node("default:furnace", { }) minetest.register_node("default:furnace_active", { - description = "Furnace", + description = S("Furnace"), tiles = { "default_furnace_top.png", "default_furnace_bottom.png", "default_furnace_side.png", "default_furnace_side.png", @@ -299,6 +406,9 @@ minetest.register_node("default:furnace_active", { 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, @@ -307,3 +417,11 @@ minetest.register_node("default:furnace_active", { 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 index 594ea36a..993316b8 100644 --- a/mods/default/init.lua +++ b/mods/default/init.lua @@ -3,15 +3,45 @@ -- 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 -default.gui_bg = "bgcolor[#080808BB;true]" -default.gui_bg_img = "background[5,5;1,1;gui_formbg.png;true]" -default.gui_slots = "listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" +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 = "" @@ -22,9 +52,6 @@ function default.get_hotbar_bg(x,y) end default.gui_survival_form = "size[8,8.5]".. - default.gui_bg.. - default.gui_bg_img.. - default.gui_slots.. "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;]".. @@ -40,11 +67,13 @@ 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.."/player.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 index 76fcc8ed..a2d812d4 100644 --- a/mods/default/legacy.lua +++ b/mods/default/legacy.lua @@ -1,6 +1,6 @@ -- mods/default/legacy.lua --- Horrible crap to support old code registering falling nodes +-- 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) @@ -23,3 +23,27 @@ 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 index 52aa294c..f1cf3647 100644 --- a/mods/default/mapgen.lua +++ b/mods/default/mapgen.lua @@ -1,14 +1,19 @@ -- --- Aliases for map generator outputs +-- 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_water_source", "default:water_source") -minetest.register_alias("mapgen_river_water_source", "default:river_water_source") -minetest.register_alias("mapgen_lava_source", "default:lava_source") 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") @@ -16,9 +21,6 @@ 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_sandstone", "default:sandstone") - --- Flora minetest.register_alias("mapgen_tree", "default:tree") minetest.register_alias("mapgen_leaves", "default:leaves") @@ -29,21 +31,21 @@ 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") --- Dungeons - 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_sandstonebrick", "default:sandstonebrick") -minetest.register_alias("mapgen_stair_sandstonebrick", "stairs:stair_sandstonebrick") +minetest.register_alias("mapgen_stair_desert_stone", "stairs:stair_desert_stone") -- -- Register ores -- -function default.register_ores() - -- Blob ores +-- Mgv6 + +function default.register_mgv6_ores() + + -- Blob ore -- These first to avoid other ores in blobs -- Clay @@ -55,8 +57,8 @@ function default.register_ores() wherein = {"default:sand"}, clust_scarcity = 16 * 16 * 16, clust_size = 5, - y_min = -15, y_max = 0, + y_min = -15, noise_threshold = 0.0, noise_params = { offset = 0.5, @@ -73,12 +75,11 @@ function default.register_ores() minetest.register_ore({ ore_type = "blob", ore = "default:sand", - wherein = {"default:stone", "default:sandstone", - "default:desert_stone"}, + wherein = {"default:stone", "default:desert_stone"}, clust_scarcity = 16 * 16 * 16, clust_size = 5, - y_min = -31, y_max = 0, + y_min = -31, noise_threshold = 0.0, noise_params = { offset = 0.5, @@ -98,8 +99,8 @@ function default.register_ores() wherein = {"default:stone"}, clust_scarcity = 16 * 16 * 16, clust_size = 5, - y_min = -31, y_max = 31000, + y_min = -31, noise_threshold = 0.0, noise_params = { offset = 0.5, @@ -119,8 +120,8 @@ function default.register_ores() wherein = {"default:stone"}, clust_scarcity = 16 * 16 * 16, clust_size = 5, - y_min = -31000, y_max = 31000, + y_min = -31000, noise_threshold = 0.0, noise_params = { offset = 0.5, @@ -143,8 +144,8 @@ function default.register_ores() clust_scarcity = 8 * 8 * 8, clust_num_ores = 9, clust_size = 3, - y_min = 1025, y_max = 31000, + y_min = 1025, }) minetest.register_ore({ @@ -154,8 +155,8 @@ function default.register_ores() clust_scarcity = 8 * 8 * 8, clust_num_ores = 8, clust_size = 3, - y_min = -31000, y_max = 64, + y_min = -31000, }) minetest.register_ore({ @@ -165,8 +166,8 @@ function default.register_ores() clust_scarcity = 24 * 24 * 24, clust_num_ores = 27, clust_size = 6, - y_min = -31000, y_max = 0, + y_min = -31000, }) -- Iron @@ -178,8 +179,8 @@ function default.register_ores() clust_scarcity = 9 * 9 * 9, clust_num_ores = 12, clust_size = 3, - y_min = 1025, y_max = 31000, + y_min = 1025, }) minetest.register_ore({ @@ -189,8 +190,8 @@ function default.register_ores() clust_scarcity = 7 * 7 * 7, clust_num_ores = 5, clust_size = 3, - y_min = -31000, y_max = 0, + y_min = -31000, }) minetest.register_ore({ @@ -200,8 +201,8 @@ function default.register_ores() clust_scarcity = 24 * 24 * 24, clust_num_ores = 27, clust_size = 6, - y_min = -31000, y_max = -64, + y_min = -31000, }) -- Copper @@ -213,8 +214,8 @@ function default.register_ores() clust_scarcity = 9 * 9 * 9, clust_num_ores = 5, clust_size = 3, - y_min = 1025, y_max = 31000, + y_min = 1025, }) minetest.register_ore({ @@ -224,8 +225,8 @@ function default.register_ores() clust_scarcity = 12 * 12 * 12, clust_num_ores = 4, clust_size = 3, - y_min = -63, y_max = -16, + y_min = -63, }) minetest.register_ore({ @@ -235,8 +236,43 @@ function default.register_ores() clust_scarcity = 9 * 9 * 9, clust_num_ores = 5, clust_size = 3, - y_min = -31000, 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 @@ -248,8 +284,8 @@ function default.register_ores() clust_scarcity = 13 * 13 * 13, clust_num_ores = 5, clust_size = 3, - y_min = 1025, y_max = 31000, + y_min = 1025, }) minetest.register_ore({ @@ -259,8 +295,8 @@ function default.register_ores() clust_scarcity = 15 * 15 * 15, clust_num_ores = 3, clust_size = 2, - y_min = -255, y_max = -64, + y_min = -255, }) minetest.register_ore({ @@ -270,8 +306,8 @@ function default.register_ores() clust_scarcity = 13 * 13 * 13, clust_num_ores = 5, clust_size = 3, - y_min = -31000, y_max = -256, + y_min = -31000, }) -- Mese crystal @@ -283,8 +319,8 @@ function default.register_ores() clust_scarcity = 14 * 14 * 14, clust_num_ores = 5, clust_size = 3, - y_min = 1025, y_max = 31000, + y_min = 1025, }) minetest.register_ore({ @@ -294,8 +330,8 @@ function default.register_ores() clust_scarcity = 18 * 18 * 18, clust_num_ores = 3, clust_size = 2, - y_min = -255, y_max = -64, + y_min = -255, }) minetest.register_ore({ @@ -305,8 +341,8 @@ function default.register_ores() clust_scarcity = 14 * 14 * 14, clust_num_ores = 5, clust_size = 3, - y_min = -31000, y_max = -256, + y_min = -31000, }) -- Diamond @@ -318,8 +354,8 @@ function default.register_ores() clust_scarcity = 15 * 15 * 15, clust_num_ores = 4, clust_size = 3, - y_min = 1025, y_max = 31000, + y_min = 1025, }) minetest.register_ore({ @@ -329,8 +365,8 @@ function default.register_ores() clust_scarcity = 17 * 17 * 17, clust_num_ores = 4, clust_size = 3, - y_min = -255, y_max = -128, + y_min = -255, }) minetest.register_ore({ @@ -340,8 +376,8 @@ function default.register_ores() clust_scarcity = 15 * 15 * 15, clust_num_ores = 4, clust_size = 3, - y_min = -31000, y_max = -256, + y_min = -31000, }) -- Mese block @@ -353,8 +389,8 @@ function default.register_ores() clust_scarcity = 36 * 36 * 36, clust_num_ores = 3, clust_size = 2, - y_min = 1025, y_max = 31000, + y_min = 1025, }) minetest.register_ore({ @@ -364,8 +400,486 @@ function default.register_ores() clust_scarcity = 36 * 36 * 36, clust_num_ores = 3, clust_size = 2, - y_min = -31000, 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 @@ -374,113 +888,148 @@ end -- Register biomes -- --- All mapgens except mgv6 and singlenode +-- All mapgens except mgv6 function default.register_biomes() - minetest.clear_registered_biomes() - -- Permanent ice + -- Icesheet minetest.register_biome({ - name = "glacier", + name = "icesheet", node_dust = "default:snowblock", node_top = "default:snowblock", depth_top = 1, node_filler = "default:snowblock", depth_filler = 3, - node_stone = "default:ice", + node_stone = "default:cave_ice", node_water_top = "default:ice", depth_water_top = 10, - --node_water = "", node_river_water = "default:ice", node_riverbed = "default:gravel", depth_riverbed = 2, - y_min = -8, + node_dungeon = "default:ice", + node_dungeon_stair = "stairs:stair_ice", y_max = 31000, + y_min = -8, heat_point = 0, - humidity_point = 50, + humidity_point = 73, }) minetest.register_biome({ - name = "glacier_ocean", + name = "icesheet_ocean", node_dust = "default:snowblock", node_top = "default:sand", depth_top = 1, node_filler = "default:sand", depth_filler = 3, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", - y_min = -112, + 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 = 50, + humidity_point = 73, }) - -- Cold + 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_dust = "", - node_top = "default:dirt_with_snow", + node_top = "default:permafrost_with_stones", depth_top = 1, - node_filler = "default:dirt", + node_filler = "default:permafrost", depth_filler = 1, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", 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, - y_max = 31000, - heat_point = 15, - humidity_point = 35, + heat_point = 0, + humidity_point = 40, }) minetest.register_biome({ name = "tundra_beach", - --node_dust = "", node_top = "default:gravel", depth_top = 1, node_filler = "default:gravel", depth_filler = 2, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", node_riverbed = "default:gravel", depth_riverbed = 2, - y_min = -3, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + vertical_blend = 1, y_max = 1, - heat_point = 15, - humidity_point = 35, + y_min = -3, + heat_point = 0, + humidity_point = 40, }) minetest.register_biome({ name = "tundra_ocean", - --node_dust = "", node_top = "default:sand", depth_top = 1, node_filler = "default:sand", depth_filler = 3, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", node_riverbed = "default:gravel", depth_riverbed = 2, - y_min = -112, + 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, - heat_point = 15, - humidity_point = 35, + 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", @@ -489,466 +1038,583 @@ function default.register_biomes() depth_top = 1, node_filler = "default:dirt", depth_filler = 3, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", node_riverbed = "default:sand", depth_riverbed = 2, - y_min = 2, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", y_max = 31000, - heat_point = 15, - humidity_point = 65, + y_min = 4, + heat_point = 25, + humidity_point = 70, }) minetest.register_biome({ name = "taiga_ocean", - --node_dust = "", + node_dust = "default:snow", node_top = "default:sand", depth_top = 1, node_filler = "default:sand", depth_filler = 3, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", node_riverbed = "default:sand", depth_riverbed = 2, - y_min = -112, - y_max = 1, - heat_point = 15, - humidity_point = 65, + 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, }) - -- Temperate + 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 = "stone_grassland", - --node_dust = "", + 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_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", node_riverbed = "default:sand", depth_riverbed = 2, - y_min = 6, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", y_max = 31000, - heat_point = 40, + y_min = 6, + heat_point = 50, humidity_point = 35, }) minetest.register_biome({ - name = "stone_grassland_dunes", - --node_dust = "", + name = "grassland_dunes", node_top = "default:sand", depth_top = 1, node_filler = "default:sand", depth_filler = 2, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", node_riverbed = "default:sand", depth_riverbed = 2, - y_min = 5, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + vertical_blend = 1, y_max = 5, - heat_point = 40, + y_min = 4, + heat_point = 50, humidity_point = 35, }) minetest.register_biome({ - name = "stone_grassland_ocean", - --node_dust = "", + name = "grassland_ocean", node_top = "default:sand", depth_top = 1, node_filler = "default:sand", depth_filler = 3, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", node_riverbed = "default:sand", depth_riverbed = 2, - y_min = -112, - y_max = 4, - heat_point = 40, + 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_dust = "", - node_top = "default:dirt_with_grass", + node_top = "default:dirt_with_coniferous_litter", depth_top = 1, node_filler = "default:dirt", depth_filler = 3, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", node_riverbed = "default:sand", depth_riverbed = 2, - y_min = 6, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", y_max = 31000, - heat_point = 40, - humidity_point = 65, + y_min = 6, + heat_point = 45, + humidity_point = 70, }) minetest.register_biome({ name = "coniferous_forest_dunes", - --node_dust = "", node_top = "default:sand", depth_top = 1, node_filler = "default:sand", depth_filler = 3, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", node_riverbed = "default:sand", depth_riverbed = 2, - y_min = 5, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + vertical_blend = 1, y_max = 5, - heat_point = 40, - humidity_point = 65, + y_min = 4, + heat_point = 45, + humidity_point = 70, }) minetest.register_biome({ name = "coniferous_forest_ocean", - --node_dust = "", node_top = "default:sand", depth_top = 1, node_filler = "default:sand", depth_filler = 3, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", node_riverbed = "default:sand", depth_riverbed = 2, - y_min = -112, - y_max = 4, - heat_point = 40, - humidity_point = 65, - }) - - - minetest.register_biome({ - name = "sandstone_grassland", - --node_dust = "", - node_top = "default:dirt_with_grass", - depth_top = 1, - node_filler = "default:dirt", - depth_filler = 1, - node_stone = "default:sandstone", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", - node_riverbed = "default:sand", - depth_riverbed = 2, - y_min = 6, - y_max = 31000, - heat_point = 60, - humidity_point = 35, + 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 = "sandstone_grassland_dunes", - --node_dust = "", - node_top = "default:sand", - depth_top = 1, - node_filler = "default:sand", - depth_filler = 2, - node_stone = "default:sandstone", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", - node_riverbed = "default:sand", - depth_riverbed = 2, - y_min = 5, - y_max = 5, - heat_point = 60, - humidity_point = 35, - }) - - minetest.register_biome({ - name = "sandstone_grassland_ocean", - --node_dust = "", - node_top = "default:sand", - depth_top = 1, - node_filler = "default:sand", - depth_filler = 3, - node_stone = "default:sandstone", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", - node_riverbed = "default:sand", - depth_riverbed = 2, - y_min = -112, - y_max = 4, - heat_point = 60, - humidity_point = 35, + 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_dust = "", node_top = "default:dirt_with_grass", depth_top = 1, node_filler = "default:dirt", depth_filler = 3, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", node_riverbed = "default:sand", depth_riverbed = 2, - y_min = 1, + 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 = 65, + humidity_point = 68, }) minetest.register_biome({ - name = "deciduous_forest_swamp", - --node_dust = "", + name = "deciduous_forest_shore", node_top = "default:dirt", depth_top = 1, node_filler = "default:dirt", depth_filler = 3, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", node_riverbed = "default:sand", depth_riverbed = 2, - y_min = -3, + 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 = 65, + humidity_point = 68, }) minetest.register_biome({ name = "deciduous_forest_ocean", - --node_dust = "", node_top = "default:sand", depth_top = 1, node_filler = "default:sand", depth_filler = 3, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", node_riverbed = "default:sand", depth_riverbed = 2, - y_min = -112, - y_max = -4, + 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 = 65, + humidity_point = 68, }) - -- Hot + 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_dust = "", node_top = "default:desert_sand", depth_top = 1, node_filler = "default:desert_sand", depth_filler = 1, node_stone = "default:desert_stone", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", node_riverbed = "default:sand", depth_riverbed = 2, - y_min = 5, + node_dungeon = "default:desert_stone", + node_dungeon_stair = "stairs:stair_desert_stone", y_max = 31000, - heat_point = 85, - humidity_point = 20, + y_min = 4, + heat_point = 92, + humidity_point = 16, }) minetest.register_biome({ name = "desert_ocean", - --node_dust = "", node_top = "default:sand", depth_top = 1, node_filler = "default:sand", depth_filler = 3, node_stone = "default:desert_stone", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", node_riverbed = "default:sand", depth_riverbed = 2, - y_min = -112, - y_max = 4, - heat_point = 85, - humidity_point = 20, + 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_dust = "", - node_top = "default:dirt_with_dry_grass", + node_top = "default:dry_dirt_with_dry_grass", depth_top = 1, - node_filler = "default:dirt", + node_filler = "default:dry_dirt", depth_filler = 1, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", node_riverbed = "default:sand", depth_riverbed = 2, - y_min = 1, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", y_max = 31000, - heat_point = 85, - humidity_point = 50, + y_min = 1, + heat_point = 89, + humidity_point = 42, }) minetest.register_biome({ - name = "savanna_swamp", - --node_dust = "", - node_top = "default:dirt", + name = "savanna_shore", + node_top = "default:dry_dirt", depth_top = 1, - node_filler = "default:dirt", + node_filler = "default:dry_dirt", depth_filler = 3, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", node_riverbed = "default:sand", depth_riverbed = 2, - y_min = -3, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", y_max = 0, - heat_point = 85, - humidity_point = 50, + y_min = -1, + heat_point = 89, + humidity_point = 42, }) minetest.register_biome({ name = "savanna_ocean", - --node_dust = "", node_top = "default:sand", depth_top = 1, node_filler = "default:sand", depth_filler = 3, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", node_riverbed = "default:sand", depth_riverbed = 2, - y_min = -112, - y_max = -4, - heat_point = 85, - humidity_point = 50, + 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_dust = "", - node_top = "default:dirt_with_grass", + node_top = "default:dirt_with_rainforest_litter", depth_top = 1, node_filler = "default:dirt", depth_filler = 3, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", node_riverbed = "default:sand", depth_riverbed = 2, - y_min = 1, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", y_max = 31000, - heat_point = 85, - humidity_point = 80, + y_min = 1, + heat_point = 86, + humidity_point = 65, }) minetest.register_biome({ name = "rainforest_swamp", - --node_dust = "", node_top = "default:dirt", depth_top = 1, node_filler = "default:dirt", depth_filler = 3, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", node_riverbed = "default:sand", depth_riverbed = 2, - y_min = -3, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", y_max = 0, - heat_point = 85, - humidity_point = 80, + y_min = -1, + heat_point = 86, + humidity_point = 65, }) minetest.register_biome({ name = "rainforest_ocean", - --node_dust = "", node_top = "default:sand", depth_top = 1, node_filler = "default:sand", depth_filler = 3, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", node_riverbed = "default:sand", depth_riverbed = 2, - y_min = -112, - y_max = -4, - heat_point = 85, - humidity_point = 80, + 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, }) - -- Underground - minetest.register_biome({ - name = "underground", - --node_dust = "", - --node_top = "", - --depth_top = , - --node_filler = "", - --depth_filler = , - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", + 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, - y_max = -113, - heat_point = 50, - humidity_point = 50, + heat_point = 86, + humidity_point = 65, }) end @@ -960,11 +1626,11 @@ end -- Mgv6 function default.register_mgv6_decorations() - minetest.clear_registered_decorations() -- Papyrus minetest.register_decoration({ + name = "default:papyrus", deco_type = "simple", place_on = {"default:dirt_with_grass"}, sidelen = 16, @@ -976,8 +1642,8 @@ function default.register_mgv6_decorations() octaves = 3, persist = 0.7 }, - y_min = 1, y_max = 1, + y_min = 1, decoration = "default:papyrus", height = 2, height_max = 4, @@ -988,6 +1654,7 @@ function default.register_mgv6_decorations() -- Cacti minetest.register_decoration({ + name = "default:cactus", deco_type = "simple", place_on = {"default:desert_sand"}, sidelen = 16, @@ -999,8 +1666,8 @@ function default.register_mgv6_decorations() octaves = 3, persist = 0.6 }, - y_min = 1, y_max = 30, + y_min = 1, decoration = "default:cactus", height = 3, height_max = 4, @@ -1010,6 +1677,7 @@ function default.register_mgv6_decorations() for length = 1, 5 do minetest.register_decoration({ + name = "default:grass_"..length, deco_type = "simple", place_on = {"default:dirt_with_grass"}, sidelen = 16, @@ -1021,8 +1689,8 @@ function default.register_mgv6_decorations() octaves = 3, persist = 0.6 }, - y_min = 1, y_max = 30, + y_min = 1, decoration = "default:grass_"..length, }) end @@ -1030,6 +1698,7 @@ function default.register_mgv6_decorations() -- Dry shrubs minetest.register_decoration({ + name = "default:dry_shrub", deco_type = "simple", place_on = {"default:desert_sand", "default:dirt_with_snow"}, sidelen = 16, @@ -1041,18 +1710,21 @@ function default.register_mgv6_decorations() octaves = 3, persist = 0.6 }, - y_min = 1, y_max = 30, + y_min = 1, decoration = "default:dry_shrub", + param2 = 4, }) end --- All mapgens except mgv6 and singlenode + +-- 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", "default:sand"}, + place_on = {"default:dirt_with_grass"}, sidelen = 16, noise_params = { offset = offset, @@ -1062,20 +1734,18 @@ local function register_grass_decoration(offset, scale, length) octaves = 3, persist = 0.6 }, - biomes = {"stone_grassland", "sandstone_grassland", - "deciduous_forest", "coniferous_forest", - "stone_grassland_dunes", "sandstone_grassland_dunes", - "coniferous_forest_dunes"}, - y_min = 1, + biomes = {"grassland", "deciduous_forest"}, y_max = 31000, - decoration = "default:grass_"..length, + 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:dirt_with_dry_grass"}, + place_on = {"default:dry_dirt_with_dry_grass"}, sidelen = 16, noise_params = { offset = offset, @@ -1086,169 +1756,258 @@ local function register_dry_grass_decoration(offset, scale, length) persist = 0.6 }, biomes = {"savanna"}, - y_min = 1, y_max = 31000, - decoration = "default:dry_grass_"..length, + 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() - minetest.clear_registered_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.036, - scale = 0.022, + offset = 0.024, + scale = 0.015, spread = {x = 250, y = 250, z = 250}, seed = 2, octaves = 3, persist = 0.66 }, biomes = {"deciduous_forest"}, - y_min = 1, y_max = 31000, - schematic = minetest.get_modpath("default").."/schematics/apple_tree.mts", + 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.0018, - scale = 0.0011, + offset = 0.0012, + scale = 0.0007, spread = {x = 250, y = 250, z = 250}, seed = 2, octaves = 3, persist = 0.66 }, biomes = {"deciduous_forest"}, - y_min = 1, y_max = 31000, - schematic = { - size = {x = 3, y = 3, z = 1}, - data = { - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "default:tree", param2 = 12, prob = 191}, - {name = "default:tree", param2 = 12}, - {name = "default:tree", param2 = 12, prob = 127}, - {name = "air", prob = 0}, - {name = "flowers:mushroom_brown", prob = 63}, - {name = "air", prob = 0}, - }, - }, + 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_grass", "default:dirt"}, + place_on = {"default:dirt_with_rainforest_litter"}, sidelen = 80, fill_ratio = 0.1, - biomes = {"rainforest", "rainforest_swamp"}, - y_min = 0, + biomes = {"rainforest"}, y_max = 31000, - schematic = minetest.get_modpath("default").."/schematics/jungle_tree.mts", + 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_grass", "default:dirt"}, + place_on = {"default:dirt_with_rainforest_litter"}, + place_offset_y = 1, sidelen = 80, fill_ratio = 0.005, - biomes = {"rainforest", "rainforest_swamp"}, - y_min = 1, + biomes = {"rainforest"}, y_max = 31000, - schematic = { - size = {x = 3, y = 3, z = 1}, - data = { - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "default:jungletree", param2 = 12, prob = 191}, - {name = "default:jungletree", param2 = 12}, - {name = "default:jungletree", param2 = 12, prob = 127}, - {name = "air", prob = 0}, - {name = "flowers:mushroom_brown", prob = 127}, - {name = "air", prob = 0}, - }, - }, + 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 and log + -- 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_grass"}, + place_on = {"default:dirt_with_snow", "default:dirt_with_coniferous_litter"}, sidelen = 16, noise_params = { - offset = 0.036, - scale = 0.022, + 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_min = 2, y_max = 31000, - schematic = minetest.get_modpath("default").."/schematics/pine_tree.mts", + 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_grass"}, - sidelen = 80, + place_on = {"default:dirt_with_snow", "default:dirt_with_coniferous_litter"}, + sidelen = 16, noise_params = { - offset = 0.0018, - scale = 0.0011, + 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_min = 1, y_max = 31000, - schematic = { - size = {x = 3, y = 3, z = 1}, - data = { - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "default:pine_tree", param2 = 12, prob = 191}, - {name = "default:pine_tree", param2 = 12}, - {name = "default:pine_tree", param2 = 12, prob = 127}, - {name = "air", prob = 0}, - {name = "flowers:mushroom_red", prob = 63}, - {name = "air", prob = 0}, - }, - }, + 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:dirt_with_dry_grass"}, + place_on = {"default:dry_dirt_with_dry_grass"}, sidelen = 16, noise_params = { offset = 0, @@ -1259,16 +2018,18 @@ function default.register_decorations() persist = 0.66 }, biomes = {"savanna"}, - y_min = 1, y_max = 31000, - schematic = minetest.get_modpath("default").."/schematics/acacia_tree.mts", + 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:dirt_with_dry_grass"}, + place_on = {"default:dry_dirt_with_dry_grass"}, + place_offset_y = 1, sidelen = 16, noise_params = { offset = 0, @@ -1279,26 +2040,19 @@ function default.register_decorations() persist = 0.66 }, biomes = {"savanna"}, - y_min = 1, y_max = 31000, - schematic = { - size = {x = 3, y = 2, z = 1}, - data = { - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "default:acacia_tree", param2 = 12, prob = 191}, - {name = "default:acacia_tree", param2 = 12}, - {name = "default:acacia_tree", param2 = 12, prob = 127}, - }, - }, + 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, @@ -1311,15 +2065,17 @@ function default.register_decorations() persist = 0.66 }, biomes = {"deciduous_forest"}, - y_min = 1, y_max = 31000, - schematic = minetest.get_modpath("default").."/schematics/aspen_tree.mts", + 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, @@ -1330,28 +2086,19 @@ function default.register_decorations() persist = 0.66 }, biomes = {"deciduous_forest"}, - y_min = 1, y_max = 31000, - schematic = { - size = {x = 3, y = 3, z = 1}, - data = { - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "default:aspen_tree", param2 = 12}, - {name = "default:aspen_tree", param2 = 12}, - {name = "default:aspen_tree", param2 = 12, prob = 127}, - {name = "flowers:mushroom_red", prob = 63}, - {name = "flowers:mushroom_brown", prob = 63}, - {name = "air", prob = 0}, - }, - }, + 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, @@ -1364,16 +2111,17 @@ function default.register_decorations() persist = 0.6 }, biomes = {"desert"}, - y_min = 5, y_max = 31000, - schematic = minetest.get_modpath("default").."/schematics/large_cactus.mts", - flags = "place_center_x", + 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, @@ -1386,8 +2134,8 @@ function default.register_decorations() persist = 0.6 }, biomes = {"desert"}, - y_min = 5, y_max = 31000, + y_min = 4, decoration = "default:cactus", height = 2, height_max = 5, @@ -1395,7 +2143,10 @@ function default.register_decorations() -- Papyrus + -- Dirt version for rainforest swamp + minetest.register_decoration({ + name = "default:papyrus_on_dirt", deco_type = "schematic", place_on = {"default:dirt"}, sidelen = 16, @@ -1407,10 +2158,121 @@ function default.register_decorations() octaves = 3, persist = 0.7 }, - biomes = {"savanna_swamp"}, - y_min = 0, + biomes = {"rainforest_swamp"}, y_max = 0, - schematic = minetest.get_modpath("default").."/schematics/papyrus.mts", + 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 @@ -1429,24 +2291,33 @@ function default.register_decorations() 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_grass"}, + place_on = {"default:dirt_with_rainforest_litter"}, sidelen = 80, fill_ratio = 0.1, biomes = {"rainforest"}, - y_min = 1, 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:dirt_with_snow"}, + place_on = {"default:desert_sand", + "default:sand", "default:silver_sand"}, sidelen = 16, noise_params = { offset = 0, @@ -1456,10 +2327,147 @@ function default.register_decorations() octaves = 3, persist = 0.6 }, - biomes = {"desert", "tundra"}, - y_min = 2, + 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 @@ -1468,9 +2476,14 @@ 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_ores() + default.register_mgv6_ores() default.register_mgv6_decorations() else default.register_biomes() 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/character.b3d b/mods/default/models/character.b3d deleted file mode 100644 index 7558e6f8..00000000 Binary files a/mods/default/models/character.b3d and /dev/null differ diff --git a/mods/default/models/character.blend b/mods/default/models/character.blend deleted file mode 100644 index 7324325a..00000000 Binary files a/mods/default/models/character.blend and /dev/null differ 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 index 79aea5bb..2bbc03bc 100644 --- a/mods/default/nodes.lua +++ b/mods/default/nodes.lua @@ -1,5 +1,7 @@ -- mods/default/nodes.lua +-- support for MT game translation. +local S = default.get_translator --[[ Node name convention: @@ -30,6 +32,12 @@ 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 @@ -44,9 +52,18 @@ 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 @@ -54,8 +71,8 @@ default:clay default:snow default:snowblock - default:ice +default:cave_ice Trees ----- @@ -71,6 +88,7 @@ default:jungletree default:junglewood default:jungleleaves default:junglesapling +default:emergent_jungle_sapling default:pine_tree default:pine_wood @@ -99,6 +117,10 @@ default:steelblock default:stone_with_copper default:copperblock + +default:stone_with_tin +default:tinblock + default:bronzeblock default:stone_with_gold @@ -110,10 +132,12 @@ default:mese default:stone_with_diamond default:diamondblock -Plantlife (non-cubic) ---------------------- +Plantlife +--------- default:cactus +default:large_cactus_seedling + default:papyrus default:dry_shrub default:junglegrass @@ -130,6 +154,39 @@ 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) @@ -146,11 +203,6 @@ default:lava_flowing Tools / "Advanced" crafting / Non-"natural" ------------------------------------------- -default:torch - -default:chest -default:chest_locked - default:bookshelf default:sign_wall_wood @@ -165,14 +217,23 @@ 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:rail - 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 ---- @@ -181,21 +242,31 @@ 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 = "Stone", + description = S("Stone"), tiles = {"default_stone.png"}, groups = {cracky = 3, stone = 1}, - drop = 'default:cobble', + drop = "default:cobble", legacy_mineral = true, sounds = default.node_sound_stone_defaults(), }) minetest.register_node("default:cobble", { - description = "Cobblestone", + description = S("Cobblestone"), tiles = {"default_cobble.png"}, is_ground_content = false, groups = {cracky = 3, stone = 2}, @@ -203,7 +274,7 @@ minetest.register_node("default:cobble", { }) minetest.register_node("default:stonebrick", { - description = "Stone Brick", + description = S("Stone Brick"), paramtype2 = "facedir", place_param2 = 0, tiles = {"default_stone_brick.png"}, @@ -213,33 +284,48 @@ minetest.register_node("default:stonebrick", { }) minetest.register_node("default:stone_block", { - description = "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 = "Mossy Cobblestone", + 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 = "Desert Stone", + description = S("Desert Stone"), tiles = {"default_desert_stone.png"}, groups = {cracky = 3, stone = 1}, - drop = 'default:desert_cobble', + drop = "default:desert_cobble", legacy_mineral = true, sounds = default.node_sound_stone_defaults(), }) minetest.register_node("default:desert_cobble", { - description = "Desert Cobblestone", + description = S("Desert Cobblestone"), tiles = {"default_desert_cobble.png"}, is_ground_content = false, groups = {cracky = 3, stone = 2}, @@ -247,7 +333,7 @@ minetest.register_node("default:desert_cobble", { }) minetest.register_node("default:desert_stonebrick", { - description = "Desert Stone Brick", + description = S("Desert Stone Brick"), paramtype2 = "facedir", place_param2 = 0, tiles = {"default_desert_stone_brick.png"}, @@ -257,23 +343,22 @@ minetest.register_node("default:desert_stonebrick", { }) minetest.register_node("default:desert_stone_block", { - description = "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 = "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 = "Sandstone Brick", + description = S("Sandstone Brick"), paramtype2 = "facedir", place_param2 = 0, tiles = {"default_sandstone_brick.png"}, @@ -283,23 +368,72 @@ minetest.register_node("default:sandstonebrick", { }) minetest.register_node("default:sandstone_block", { - description = "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 = "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 = "Obsidian Brick", + description = S("Obsidian Brick"), paramtype2 = "facedir", place_param2 = 0, tiles = {"default_obsidian_brick.png"}, @@ -309,7 +443,7 @@ minetest.register_node("default:obsidianbrick", { }) minetest.register_node("default:obsidian_block", { - description = "Obsidian Block", + description = S("Obsidian Block"), tiles = {"default_obsidian_block.png"}, is_ground_content = false, sounds = default.node_sound_stone_defaults(), @@ -321,108 +455,198 @@ minetest.register_node("default:obsidian_block", { -- minetest.register_node("default:dirt", { - description = "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 = "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}, - drop = 'default:dirt', + 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 = "Dirt with Grass and 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', + 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 = "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}, - drop = 'default:dirt', + 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 = "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}, - drop = 'default:dirt', + 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.15}, + 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 = "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 = "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 = "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'}} + {items = {"default:flint"}, rarity = 16}, + {items = {"default:gravel"}} } } }) minetest.register_node("default:clay", { - description = "Clay", + description = S("Clay"), tiles = {"default_clay.png"}, groups = {crumbly = 3}, - drop = 'default:clay_lump 4', + drop = "default:clay_lump 4", sounds = default.node_sound_dirt_defaults(), }) minetest.register_node("default:snow", { - description = "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, - walkable = false, drawtype = "nodebox", node_box = { type = "fixed", @@ -430,12 +654,14 @@ minetest.register_node("default:snow", { {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, }, }, - groups = {crumbly = 3, falling_node = 1, puts_out_fire = 1}, - sounds = default.node_sound_dirt_defaults({ - footstep = {name = "default_snow_footstep", gain = 0.15}, - dug = {name = "default_snow_footstep", gain = 0.2}, - dig = {name = "default_snow_footstep", gain = 0.2} - }), + 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 @@ -446,23 +672,38 @@ minetest.register_node("default:snow", { }) minetest.register_node("default:snowblock", { - description = "Snow Block", + description = S("Snow Block"), tiles = {"default_snow.png"}, - groups = {crumbly = 3, puts_out_fire = 1}, - sounds = default.node_sound_dirt_defaults({ - footstep = {name = "default_snow_footstep", gain = 0.15}, - dug = {name = "default_snow_footstep", gain = 0.2}, - dig = {name = "default_snow_footstep", gain = 0.2} - }), + 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 = "Ice", + description = S("Ice"), tiles = {"default_ice.png"}, is_ground_content = false, paramtype = "light", - groups = {cracky = 3, puts_out_fire = 1}, - sounds = default.node_sound_glass_defaults(), + 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(), }) -- @@ -470,7 +711,7 @@ minetest.register_node("default:ice", { -- minetest.register_node("default:tree", { - description = "Tree", + description = S("Apple Tree"), tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"}, paramtype2 = "facedir", is_ground_content = false, @@ -481,7 +722,7 @@ minetest.register_node("default:tree", { }) minetest.register_node("default:wood", { - description = "Wooden Planks", + description = S("Apple Wood Planks"), paramtype2 = "facedir", place_param2 = 0, tiles = {"default_wood.png"}, @@ -491,26 +732,25 @@ minetest.register_node("default:wood", { }) minetest.register_node("default:sapling", { - description = "Sapling", + description = S("Apple Tree Sapling"), drawtype = "plantlike", - visual_scale = 1.0, tiles = {"default_sapling.png"}, inventory_image = "default_sapling.png", wield_image = "default_sapling.png", paramtype = "light", sunlight_propagates = true, walkable = false, - on_timer = default.grow_sapling, + on_timer = grow_sapling, selection_box = { type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} + 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(2400,4800)) + minetest.get_node_timer(pos):start(math.random(300, 1500)) end, on_place = function(itemstack, placer, pointed_thing) @@ -518,8 +758,8 @@ minetest.register_node("default:sapling", { "default: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 = 6, z = 2}, + {x = -3, y = 1, z = -3}, + {x = 3, y = 6, z = 3}, -- maximum interval of interior volume check 4) @@ -528,10 +768,9 @@ minetest.register_node("default:sapling", { }) minetest.register_node("default:leaves", { - description = "Leaves", + description = S("Apple Tree Leaves"), drawtype = "allfaces_optional", waving = 1, - visual_scale = 1.3, tiles = {"default_leaves.png"}, special_tiles = {"default_leaves_simple.png"}, paramtype = "light", @@ -542,25 +781,24 @@ minetest.register_node("default:leaves", { items = { { -- player will get sapling with 1/20 chance - items = {'default:sapling'}, + 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'}, + items = {"default:leaves"}, } } }, sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, + after_place_node = after_place_leaves, }) minetest.register_node("default:apple", { - description = "Apple", + description = S("Apple"), drawtype = "plantlike", - visual_scale = 1.0, tiles = {"default_apple.png"}, inventory_image = "default_apple.png", paramtype = "light", @@ -569,23 +807,52 @@ minetest.register_node("default:apple", { is_ground_content = false, selection_box = { type = "fixed", - fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2} + 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}, + 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) - if placer:is_player() then - minetest.set_node(pos, {name = "default:apple", param2 = 1}) + 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 = "Jungle Tree", + description = S("Jungle Tree"), tiles = {"default_jungletree_top.png", "default_jungletree_top.png", "default_jungletree.png"}, paramtype2 = "facedir", @@ -597,7 +864,7 @@ minetest.register_node("default:jungletree", { }) minetest.register_node("default:junglewood", { - description = "Junglewood Planks", + description = S("Jungle Wood Planks"), paramtype2 = "facedir", place_param2 = 0, tiles = {"default_junglewood.png"}, @@ -607,10 +874,9 @@ minetest.register_node("default:junglewood", { }) minetest.register_node("default:jungleleaves", { - description = "Jungle Leaves", + description = S("Jungle Tree Leaves"), drawtype = "allfaces_optional", waving = 1, - visual_scale = 1.3, tiles = {"default_jungleleaves.png"}, special_tiles = {"default_jungleleaves_simple.png"}, paramtype = "light", @@ -619,36 +885,35 @@ minetest.register_node("default:jungleleaves", { drop = { max_items = 1, items = { - {items = {'default:junglesapling'}, rarity = 20}, - {items = {'default:jungleleaves'}} + {items = {"default:junglesapling"}, rarity = 20}, + {items = {"default:jungleleaves"}} } }, sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, + after_place_node = after_place_leaves, }) minetest.register_node("default:junglesapling", { - description = "Jungle Sapling", + description = S("Jungle Tree Sapling"), drawtype = "plantlike", - visual_scale = 1.0, tiles = {"default_junglesapling.png"}, inventory_image = "default_junglesapling.png", wield_image = "default_junglesapling.png", paramtype = "light", sunlight_propagates = true, walkable = false, - on_timer = default.grow_sapling, + on_timer = grow_sapling, selection_box = { type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} + 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(2400,4800)) + minetest.get_node_timer(pos):start(math.random(300, 1500)) end, on_place = function(itemstack, placer, pointed_thing) @@ -665,9 +930,44 @@ minetest.register_node("default:junglesapling", { 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 = "Pine Tree", + description = S("Pine Tree"), tiles = {"default_pine_tree_top.png", "default_pine_tree_top.png", "default_pine_tree.png"}, paramtype2 = "facedir", @@ -679,7 +979,7 @@ minetest.register_node("default:pine_tree", { }) minetest.register_node("default:pine_wood", { - description = "Pine Wood Planks", + description = S("Pine Wood Planks"), paramtype2 = "facedir", place_param2 = 0, tiles = {"default_pine_wood.png"}, @@ -689,9 +989,8 @@ minetest.register_node("default:pine_wood", { }) minetest.register_node("default:pine_needles",{ - description = "Pine Needles", + description = S("Pine Needles"), drawtype = "allfaces_optional", - visual_scale = 1.3, tiles = {"default_pine_needles.png"}, waving = 1, paramtype = "light", @@ -706,30 +1005,29 @@ minetest.register_node("default:pine_needles",{ }, sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, + after_place_node = after_place_leaves, }) minetest.register_node("default:pine_sapling", { - description = "Pine Sapling", + description = S("Pine Tree Sapling"), drawtype = "plantlike", - visual_scale = 1.0, 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 = default.grow_sapling, + on_timer = grow_sapling, selection_box = { type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} + 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(2400,4800)) + minetest.get_node_timer(pos):start(math.random(300, 1500)) end, on_place = function(itemstack, placer, pointed_thing) @@ -738,7 +1036,7 @@ minetest.register_node("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 = 12, z = 2}, + {x = 2, y = 14, z = 2}, -- maximum interval of interior volume check 4) @@ -748,7 +1046,7 @@ minetest.register_node("default:pine_sapling", { minetest.register_node("default:acacia_tree", { - description = "Acacia Tree", + description = S("Acacia Tree"), tiles = {"default_acacia_tree_top.png", "default_acacia_tree_top.png", "default_acacia_tree.png"}, paramtype2 = "facedir", @@ -760,7 +1058,7 @@ minetest.register_node("default:acacia_tree", { }) minetest.register_node("default:acacia_wood", { - description = "Acacia Wood Planks", + description = S("Acacia Wood Planks"), paramtype2 = "facedir", place_param2 = 0, tiles = {"default_acacia_wood.png"}, @@ -770,10 +1068,10 @@ minetest.register_node("default:acacia_wood", { }) minetest.register_node("default:acacia_leaves", { - description = "Acacia Leaves", + description = S("Acacia Tree Leaves"), drawtype = "allfaces_optional", - visual_scale = 1.3, tiles = {"default_acacia_leaves.png"}, + special_tiles = {"default_acacia_leaves_simple.png"}, waving = 1, paramtype = "light", is_ground_content = false, @@ -787,30 +1085,29 @@ minetest.register_node("default:acacia_leaves", { }, sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, + after_place_node = after_place_leaves, }) minetest.register_node("default:acacia_sapling", { - description = "Acacia Tree Sapling", + description = S("Acacia Tree Sapling"), drawtype = "plantlike", - visual_scale = 1.0, 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 = default.grow_sapling, + on_timer = grow_sapling, selection_box = { type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} + 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(2400,4800)) + minetest.get_node_timer(pos):start(math.random(300, 1500)) end, on_place = function(itemstack, placer, pointed_thing) @@ -819,7 +1116,7 @@ minetest.register_node("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 = 6, z = 4}, + {x = 4, y = 7, z = 4}, -- maximum interval of interior volume check 4) @@ -828,7 +1125,7 @@ minetest.register_node("default:acacia_sapling", { }) minetest.register_node("default:aspen_tree", { - description = "Aspen Tree", + description = S("Aspen Tree"), tiles = {"default_aspen_tree_top.png", "default_aspen_tree_top.png", "default_aspen_tree.png"}, paramtype2 = "facedir", @@ -840,7 +1137,7 @@ minetest.register_node("default:aspen_tree", { }) minetest.register_node("default:aspen_wood", { - description = "Aspen Wood Planks", + description = S("Aspen Wood Planks"), paramtype2 = "facedir", place_param2 = 0, tiles = {"default_aspen_wood.png"}, @@ -850,9 +1147,8 @@ minetest.register_node("default:aspen_wood", { }) minetest.register_node("default:aspen_leaves", { - description = "Aspen Leaves", + description = S("Aspen Tree Leaves"), drawtype = "allfaces_optional", - visual_scale = 1.3, tiles = {"default_aspen_leaves.png"}, waving = 1, paramtype = "light", @@ -867,30 +1163,29 @@ minetest.register_node("default:aspen_leaves", { }, sounds = default.node_sound_leaves_defaults(), - after_place_node = default.after_place_leaves, + after_place_node = after_place_leaves, }) minetest.register_node("default:aspen_sapling", { - description = "Aspen Tree Sapling", + description = S("Aspen Tree Sapling"), drawtype = "plantlike", - visual_scale = 1.0, 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 = default.grow_sapling, + on_timer = grow_sapling, selection_box = { type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} + 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(2400,4800)) + minetest.get_node_timer(pos):start(math.random(300, 1500)) end, on_place = function(itemstack, placer, pointed_thing) @@ -912,15 +1207,15 @@ minetest.register_node("default:aspen_sapling", { -- minetest.register_node("default:stone_with_coal", { - description = "Coal Ore", + description = S("Coal Ore"), tiles = {"default_stone.png^default_mineral_coal.png"}, groups = {cracky = 3}, - drop = 'default:coal_lump', + drop = "default:coal_lump", sounds = default.node_sound_stone_defaults(), }) minetest.register_node("default:coalblock", { - description = "Coal Block", + description = S("Coal Block"), tiles = {"default_coal_block.png"}, is_ground_content = false, groups = {cracky = 3}, @@ -929,49 +1224,67 @@ minetest.register_node("default:coalblock", { minetest.register_node("default:stone_with_iron", { - description = "Iron Ore", + description = S("Iron Ore"), tiles = {"default_stone.png^default_mineral_iron.png"}, groups = {cracky = 2}, - drop = 'default:iron_lump', + drop = "default:iron_lump", sounds = default.node_sound_stone_defaults(), }) minetest.register_node("default:steelblock", { - description = "Steel Block", + description = S("Steel Block"), tiles = {"default_steel_block.png"}, is_ground_content = false, groups = {cracky = 1, level = 2}, - sounds = default.node_sound_stone_defaults(), + sounds = default.node_sound_metal_defaults(), }) minetest.register_node("default:stone_with_copper", { - description = "Copper Ore", + description = S("Copper Ore"), tiles = {"default_stone.png^default_mineral_copper.png"}, groups = {cracky = 2}, - drop = 'default:copper_lump', + drop = "default:copper_lump", sounds = default.node_sound_stone_defaults(), }) minetest.register_node("default:copperblock", { - description = "Copper Block", + 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 = "Bronze Block", + description = S("Bronze Block"), tiles = {"default_bronze_block.png"}, is_ground_content = false, groups = {cracky = 1, level = 2}, - sounds = default.node_sound_stone_defaults(), + sounds = default.node_sound_metal_defaults(), }) minetest.register_node("default:stone_with_mese", { - description = "Mese Ore", + description = S("Mese Ore"), tiles = {"default_stone.png^default_mineral_mese.png"}, groups = {cracky = 1}, drop = "default:mese_crystal", @@ -979,7 +1292,7 @@ minetest.register_node("default:stone_with_mese", { }) minetest.register_node("default:mese", { - description = "Mese Block", + description = S("Mese Block"), tiles = {"default_mese_block.png"}, paramtype = "light", groups = {cracky = 1, level = 2}, @@ -987,9 +1300,18 @@ minetest.register_node("default:mese", { 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 = "Gold Ore", + description = S("Gold Ore"), tiles = {"default_stone.png^default_mineral_gold.png"}, groups = {cracky = 2}, drop = "default:gold_lump", @@ -997,16 +1319,16 @@ minetest.register_node("default:stone_with_gold", { }) minetest.register_node("default:goldblock", { - description = "Gold Block", + description = S("Gold Block"), tiles = {"default_gold_block.png"}, is_ground_content = false, groups = {cracky = 1}, - sounds = default.node_sound_stone_defaults(), + sounds = default.node_sound_metal_defaults(), }) minetest.register_node("default:stone_with_diamond", { - description = "Diamond Ore", + description = S("Diamond Ore"), tiles = {"default_stone.png^default_mineral_diamond.png"}, groups = {cracky = 1}, drop = "default:diamond", @@ -1014,7 +1336,7 @@ minetest.register_node("default:stone_with_diamond", { }) minetest.register_node("default:diamondblock", { - description = "Diamond Block", + description = S("Diamond Block"), tiles = {"default_diamond_block.png"}, is_ground_content = false, groups = {cracky = 1, level = 3}, @@ -1026,17 +1348,88 @@ minetest.register_node("default:diamondblock", { -- minetest.register_node("default:cactus", { - description = "Cactus", + description = S("Cactus"), tiles = {"default_cactus_top.png", "default_cactus_top.png", "default_cactus_side.png"}, paramtype2 = "facedir", - groups = {snappy = 1, choppy = 3}, + 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 = "Papyrus", + description = S("Papyrus"), drawtype = "plantlike", tiles = {"default_papyrus.png"}, inventory_image = "default_papyrus.png", @@ -1046,7 +1439,7 @@ minetest.register_node("default:papyrus", { walkable = false, selection_box = { type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 0.5, 6 / 16}, }, groups = {snappy = 3, flammable = 2}, sounds = default.node_sound_leaves_defaults(), @@ -1057,14 +1450,15 @@ minetest.register_node("default:papyrus", { }) minetest.register_node("default:dry_shrub", { - description = "Dry Shrub", + description = S("Dry Shrub"), drawtype = "plantlike", waving = 1, - visual_scale = 1.0, 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, @@ -1072,15 +1466,15 @@ minetest.register_node("default:dry_shrub", { sounds = default.node_sound_leaves_defaults(), selection_box = { type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 4 / 16, 6 / 16}, }, }) minetest.register_node("default:junglegrass", { - description = "Jungle Grass", + description = S("Jungle Grass"), drawtype = "plantlike", waving = 1, - visual_scale = 1.3, + visual_scale = 1.69, tiles = {"default_junglegrass.png"}, inventory_image = "default_junglegrass.png", wield_image = "default_junglegrass.png", @@ -1088,17 +1482,17 @@ minetest.register_node("default:junglegrass", { sunlight_propagates = true, walkable = false, buildable_to = true, - groups = {snappy = 3, flora = 1, attached_node = 1, grass = 1}, + 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 = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 0.5, 6 / 16}, }, }) minetest.register_node("default:grass_1", { - description = "Grass", + description = S("Grass"), drawtype = "plantlike", waving = 1, tiles = {"default_grass_1.png"}, @@ -1109,11 +1503,12 @@ minetest.register_node("default:grass_1", { sunlight_propagates = true, walkable = false, buildable_to = true, - groups = {snappy = 3, flora = 1, attached_node = 1, grass = 1}, + 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 = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -5 / 16, 6 / 16}, }, on_place = function(itemstack, placer, pointed_thing) @@ -1127,7 +1522,7 @@ minetest.register_node("default:grass_1", { for i = 2, 5 do minetest.register_node("default:grass_" .. i, { - description = "Grass", + description = S("Grass"), drawtype = "plantlike", waving = 1, tiles = {"default_grass_" .. i .. ".png"}, @@ -1139,18 +1534,19 @@ for i = 2, 5 do buildable_to = true, drop = "default:grass_1", groups = {snappy = 3, flora = 1, attached_node = 1, - not_in_creative_inventory = 1, grass = 1}, + not_in_creative_inventory = 1, grass = 1, + normal_grass = 1, flammable = 1}, sounds = default.node_sound_leaves_defaults(), selection_box = { type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -3 / 16, 6 / 16}, }, }) end minetest.register_node("default:dry_grass_1", { - description = "Dry Grass", + description = S("Savanna Grass"), drawtype = "plantlike", waving = 1, tiles = {"default_dry_grass_1.png"}, @@ -1161,11 +1557,11 @@ minetest.register_node("default:dry_grass_1", { walkable = false, buildable_to = true, groups = {snappy = 3, flammable = 3, flora = 1, - attached_node = 1, dry_grass = 1}, + attached_node = 1, grass = 1, dry_grass = 1}, sounds = default.node_sound_leaves_defaults(), selection_box = { type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -3 / 16, 6 / 16}, }, on_place = function(itemstack, placer, pointed_thing) @@ -1179,7 +1575,7 @@ minetest.register_node("default:dry_grass_1", { for i = 2, 5 do minetest.register_node("default:dry_grass_" .. i, { - description = "Dry Grass", + description = S("Savanna Grass"), drawtype = "plantlike", waving = 1, tiles = {"default_dry_grass_" .. i .. ".png"}, @@ -1190,26 +1586,654 @@ for i = 2, 5 do walkable = false, buildable_to = true, groups = {snappy = 3, flammable = 3, flora = 1, attached_node = 1, - not_in_creative_inventory=1, dry_grass = 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 = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + 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 = "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, @@ -1217,21 +2241,18 @@ minetest.register_node("default:water_source", { length = 2.0, }, }, - }, - special_tiles = { - -- New-style water source material (mostly unused) { name = "default_water_source_animated.png", + backface_culling = true, animation = { type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 2.0, }, - backface_culling = false, }, }, - alpha = 160, + use_texture_alpha = "blend", paramtype = "light", walkable = false, pointable = false, @@ -1245,12 +2266,14 @@ minetest.register_node("default:water_source", { 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, puts_out_fire = 1}, + groups = {water = 3, liquid = 3, cools_lava = 1}, + sounds = default.node_sound_water_defaults(), }) minetest.register_node("default:water_flowing", { - description = "Flowing Water", + description = S("Flowing Water"), drawtype = "flowingliquid", + waving = 3, tiles = {"default_water.png"}, special_tiles = { { @@ -1260,7 +2283,7 @@ minetest.register_node("default:water_flowing", { type = "vertical_frames", aspect_w = 16, aspect_h = 16, - length = 0.8, + length = 0.5, }, }, { @@ -1270,11 +2293,11 @@ minetest.register_node("default:water_flowing", { type = "vertical_frames", aspect_w = 16, aspect_h = 16, - length = 0.8, + length = 0.5, }, }, }, - alpha = 160, + use_texture_alpha = "blend", paramtype = "light", paramtype2 = "flowingliquid", walkable = false, @@ -1289,17 +2312,19 @@ minetest.register_node("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, puts_out_fire = 1, - not_in_creative_inventory = 1}, + 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 = "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, @@ -1307,20 +2332,18 @@ minetest.register_node("default:river_water_source", { length = 2.0, }, }, - }, - special_tiles = { { name = "default_river_water_source_animated.png", + backface_culling = true, animation = { type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 2.0, }, - backface_culling = false, }, }, - alpha = 160, + use_texture_alpha = "blend", paramtype = "light", walkable = false, pointable = false, @@ -1333,14 +2356,19 @@ minetest.register_node("default:river_water_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, puts_out_fire = 1}, + groups = {water = 3, liquid = 3, cools_lava = 1}, + sounds = default.node_sound_water_defaults(), }) minetest.register_node("default:river_water_flowing", { - description = "Flowing River Water", + description = S("Flowing River Water"), drawtype = "flowingliquid", tiles = {"default_river_water.png"}, special_tiles = { @@ -1351,7 +2379,7 @@ minetest.register_node("default:river_water_flowing", { type = "vertical_frames", aspect_w = 16, aspect_h = 16, - length = 0.8, + length = 0.5, }, }, { @@ -1361,11 +2389,11 @@ minetest.register_node("default:river_water_flowing", { type = "vertical_frames", aspect_w = 16, aspect_h = 16, - length = 0.8, + length = 0.5, }, }, }, - alpha = 160, + use_texture_alpha = "blend", paramtype = "light", paramtype2 = "flowingliquid", walkable = false, @@ -1382,17 +2410,19 @@ minetest.register_node("default:river_water_flowing", { liquid_renewable = false, liquid_range = 2, post_effect_color = {a = 103, r = 30, g = 76, b = 90}, - groups = {water = 3, liquid = 3, puts_out_fire = 1, - not_in_creative_inventory = 1}, + 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 = "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, @@ -1400,18 +2430,15 @@ minetest.register_node("default:lava_source", { length = 3.0, }, }, - }, - special_tiles = { - -- New-style lava source material (mostly unused) { name = "default_lava_source_animated.png", + backface_culling = true, animation = { type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.0, }, - backface_culling = false, }, }, paramtype = "light", @@ -1434,7 +2461,7 @@ minetest.register_node("default:lava_source", { }) minetest.register_node("default:lava_flowing", { - description = "Flowing Lava", + description = S("Flowing Lava"), drawtype = "flowingliquid", tiles = {"default_lava.png"}, special_tiles = { @@ -1484,224 +2511,8 @@ minetest.register_node("default:lava_flowing", { -- Tools / "Advanced" crafting / Non-"natural" -- -minetest.register_node("default:torch", { - description = "Torch", - drawtype = "torchlike", - tiles = { - { - name = "default_torch_on_floor_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 3.0 - }, - }, - { - name="default_torch_on_ceiling_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 3.0 - }, - }, - { - name="default_torch_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 3.0 - }, - }, - }, - inventory_image = "default_torch_on_floor.png", - wield_image = "default_torch_on_floor.png", - paramtype = "light", - paramtype2 = "wallmounted", - sunlight_propagates = true, - is_ground_content = false, - walkable = false, - light_source = default.LIGHT_MAX - 1, - selection_box = { - type = "wallmounted", - wall_top = {-0.1, 0.5 - 0.6, -0.1, 0.1, 0.5, 0.1}, - wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5 + 0.6, 0.1}, - wall_side = {-0.5, -0.3, -0.1, -0.5 + 0.3, 0.3, 0.1}, - }, - groups = {choppy = 2, dig_immediate = 3, flammable = 1, attached_node = 1}, - legacy_wallmounted = true, - sounds = default.node_sound_defaults(), -}) - - -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 - -local function has_locked_chest_privilege(meta, player) - local name = "" - if player then - if minetest.check_player_privs(player, "protection_bypass") then - return true - end - name = player:get_player_name() - end - if name ~= meta:get_string("owner") then - return false - end - return true -end - -minetest.register_node("default:chest", { - description = "Chest", - tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png", - "default_chest_side.png", "default_chest_side.png", "default_chest_front.png"}, - paramtype2 = "facedir", - groups = {choppy = 2, oddly_breakable_by_hand = 2}, - legacy_facedir_simple = true, - is_ground_content = false, - sounds = default.node_sound_wood_defaults(), - - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", chest_formspec) - local inv = meta:get_inventory() - inv:set_size("main", 8*4) - 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 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 " .. stack:get_name() .. - " 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 " .. stack:get_name() .. - " from chest at " .. minetest.pos_to_string(pos)) - end, - on_blast = function(pos) - local drops = {} - default.get_inventory_drops(pos, "main", drops) - drops[#drops+1] = "default:chest" - minetest.remove_node(pos) - return drops - end, -}) - -minetest.register_node("default:chest_locked", { - description = "Locked Chest", - tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png", - "default_chest_side.png", "default_chest_side.png", "default_chest_lock.png"}, - paramtype2 = "facedir", - groups = {choppy = 2, oddly_breakable_by_hand = 2}, - legacy_facedir_simple = true, - is_ground_content = false, - sounds = default.node_sound_wood_defaults(), - - 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", "Locked Chest (owned by " .. - meta:get_string("owner") .. ")") - end, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("owner", "") - local inv = meta:get_inventory() - inv:set_size("main", 8 * 4) - end, - can_dig = function(pos,player) - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("main") and has_locked_chest_privilege(meta, player) - end, - allow_metadata_inventory_move = function(pos, from_list, from_index, - to_list, to_index, count, player) - local meta = minetest.get_meta(pos) - if not has_locked_chest_privilege(meta, player) then - return 0 - end - return count - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local meta = minetest.get_meta(pos) - if not has_locked_chest_privilege(meta, player) then - return 0 - end - return stack:get_count() - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - local meta = minetest.get_meta(pos) - if not has_locked_chest_privilege(meta, player) then - return 0 - end - return stack:get_count() - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name() .. - " moves " .. stack:get_name() .. - " to locked 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 " .. stack:get_name() .. - " from locked chest at " .. minetest.pos_to_string(pos)) - end, - on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - local meta = minetest.get_meta(pos) - if has_locked_chest_privilege(meta, clicker) then - minetest.show_formspec( - clicker:get_player_name(), - "default:chest_locked", - get_locked_chest_formspec(pos) - ) - end - return itemstack - end, - on_blast = function() end, -}) - - local bookshelf_formspec = "size[8,7;]" .. - default.gui_bg .. - default.gui_bg_img .. - default.gui_slots .. "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]" .. @@ -1709,8 +2520,44 @@ local bookshelf_formspec = "listring[current_player;main]" .. default.get_hotbar_bg(0,2.85) -minetest.register_node("default:bookshelf", { - description = "Bookshelf", +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", @@ -1720,9 +2567,9 @@ minetest.register_node("default:bookshelf", { on_construct = function(pos) local meta = minetest.get_meta(pos) - meta:set_string("formspec", bookshelf_formspec) 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() @@ -1734,18 +2581,6 @@ minetest.register_node("default:bookshelf", { end return 0 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 bookshelf 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 bookshelf 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 bookshelf at " .. minetest.pos_to_string(pos)) - end, on_blast = function(pos) local drops = {} default.get_inventory_drops(pos, "books", drops) @@ -1753,11 +2588,13 @@ minetest.register_node("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 .. " Sign", + description = desc, drawtype = "nodebox", tiles = {"default_sign_wall_" .. material .. ".png"}, inventory_image = "default_sign_" .. material .. ".png", @@ -1767,6 +2604,7 @@ local function register_sign(material, desc, def) 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}, @@ -1778,39 +2616,49 @@ local function register_sign(material, desc, def) sounds = def.sounds, on_construct = function(pos) - --local n = minetest.get_node(pos) local meta = minetest.get_meta(pos) meta:set_string("formspec", "field[text;;${text}]") end, on_receive_fields = function(pos, formname, fields, sender) - --print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields)) 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) - if not fields.text then return end - minetest.log("action", (player_name or "") .. " wrote \"" .. - fields.text .. "\" to sign at " .. minetest.pos_to_string(pos)) - meta:set_string("text", fields.text) - meta:set_string("infotext", '"' .. fields.text .. '"') + 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", "Wooden", { +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", "Steel", { - sounds = default.node_sound_defaults(), +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 = "Wooden Ladder", + description = S("Wooden Ladder"), drawtype = "signlike", tiles = {"default_ladder_wood.png"}, inventory_image = "default_ladder_wood.png", @@ -1833,7 +2681,7 @@ minetest.register_node("default:ladder_wood", { }) minetest.register_node("default:ladder_steel", { - description = "Steel Ladder", + description = S("Steel Ladder"), drawtype = "signlike", tiles = {"default_ladder_steel.png"}, inventory_image = "default_ladder_steel.png", @@ -1851,63 +2699,134 @@ minetest.register_node("default:ladder_steel", { --wall_side = = }, groups = {cracky = 2}, - sounds = default.node_sound_stone_defaults(), + sounds = default.node_sound_metal_defaults(), }) default.register_fence("default:fence_wood", { - description = "Wooden Fence", + 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", + 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 = "Acacia Fence", + 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", + 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 = "Junglewood Fence", + 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", + 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 = "Pine Fence", + 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", + 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 = "Aspen Fence", + 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", + 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 = "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, @@ -1916,9 +2835,10 @@ minetest.register_node("default:glass", { }) minetest.register_node("default:obsidian_glass", { - description = "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, @@ -1927,32 +2847,14 @@ minetest.register_node("default:obsidian_glass", { }) -minetest.register_node("default:rail", { - description = "Rail", - drawtype = "raillike", - tiles = {"default_rail.png", "default_rail_curved.png", - "default_rail_t_junction.png", "default_rail_crossing.png"}, - inventory_image = "default_rail.png", - wield_image = "default_rail.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - is_ground_content = false, - selection_box = { - type = "fixed", - -- but how to specify the dimensions for curved and sideways rails? - fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, - }, - groups = {dig_immediate = 2, attached_node = 1, - connect_to_raillike = minetest.raillike_group("rail")}, -}) - - minetest.register_node("default:brick", { - description = "Brick Block", + description = S("Brick Block"), paramtype2 = "facedir", place_param2 = 0, - tiles = {"default_brick.png"}, + tiles = { + "default_brick.png^[transformFX", + "default_brick.png", + }, is_ground_content = false, groups = {cracky = 3}, sounds = default.node_sound_stone_defaults(), @@ -1960,7 +2862,7 @@ minetest.register_node("default:brick", { minetest.register_node("default:meselamp", { - description = "Mese Lamp", + description = S("Mese Lamp"), drawtype = "glasslike", tiles = {"default_meselamp.png"}, paramtype = "light", @@ -1971,14 +2873,110 @@ minetest.register_node("default:meselamp", { 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 = "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/player.lua b/mods/default/player.lua deleted file mode 100644 index e4fb2adf..00000000 --- a/mods/default/player.lua +++ /dev/null @@ -1,159 +0,0 @@ --- Minetest 0.4 mod: player --- See README.txt for licensing and other information. - --- Player animation blending --- Note: This is currently broken due to a bug in Irrlicht, leave at 0 -local animation_blend = 0 - -default.registered_player_models = { } - --- Local for speed. -local models = default.registered_player_models - -function default.player_register_model(name, def) - models[name] = def -end - --- Default player appearance -default.player_register_model("character.b3d", { - animation_speed = 30, - textures = {"character.png", }, - animations = { - -- Standard animations. - stand = { x= 0, y= 79, }, - lay = { x=162, y=166, }, - walk = { x=168, y=187, }, - mine = { x=189, y=198, }, - walk_mine = { x=200, y=219, }, - -- Extra animations (not currently used by the game). - sit = { x= 81, y=160, }, - }, -}) - --- Player stats and animations -local player_model = {} -local player_textures = {} -local player_anim = {} -local player_sneak = {} -default.player_attached = {} - -function default.player_get_animation(player) - local name = player:get_player_name() - return { - model = player_model[name], - textures = player_textures[name], - animation = player_anim[name], - } -end - --- Called when a player's appearance needs to be updated -function default.player_set_model(player, model_name) - local name = player:get_player_name() - local model = models[model_name] - if model then - if player_model[name] == model_name then - return - end - player:set_properties({ - mesh = model_name, - textures = player_textures[name] or model.textures, - visual = "mesh", - visual_size = model.visual_size or {x=1, y=1}, - }) - default.player_set_animation(player, "stand") - else - player:set_properties({ - textures = { "player.png", "player_back.png", }, - visual = "upright_sprite", - }) - end - player_model[name] = model_name -end - -function default.player_set_textures(player, textures) - local name = player:get_player_name() - player_textures[name] = textures - player:set_properties({textures = textures,}) -end - -function default.player_set_animation(player, anim_name, speed) - local name = player:get_player_name() - if player_anim[name] == anim_name then - return - end - local model = player_model[name] and models[player_model[name]] - if not (model and model.animations[anim_name]) then - return - end - local anim = model.animations[anim_name] - player_anim[name] = anim_name - player:set_animation(anim, speed or model.animation_speed, animation_blend) -end - --- Update appearance when the player joins -minetest.register_on_joinplayer(function(player) - default.player_attached[player:get_player_name()] = false - default.player_set_model(player, "character.b3d") - player:set_local_animation({x=0, y=79}, {x=168, y=187}, {x=189, y=198}, {x=200, y=219}, 30) - - -- set GUI - if not minetest.setting_getbool("creative_mode") then - player:set_inventory_formspec(default.gui_survival_form) - end - player:hud_set_hotbar_image("gui_hotbar.png") - player:hud_set_hotbar_selected_image("gui_hotbar_selected.png") -end) - -minetest.register_on_leaveplayer(function(player) - local name = player:get_player_name() - player_model[name] = nil - player_anim[name] = nil - player_textures[name] = nil -end) - --- Localize for better performance. -local player_set_animation = default.player_set_animation -local player_attached = default.player_attached - --- Check each player and apply animations -minetest.register_globalstep(function(dtime) - for _, player in pairs(minetest.get_connected_players()) do - local name = player:get_player_name() - local model_name = player_model[name] - local model = model_name and models[model_name] - if model and not player_attached[name] then - local controls = player:get_player_control() - local walking = false - local animation_speed_mod = model.animation_speed or 30 - - -- Determine if the player is walking - if controls.up or controls.down or controls.left or controls.right then - walking = true - end - - -- 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 walking then - if player_sneak[name] ~= controls.sneak then - player_anim[name] = nil - player_sneak[name] = controls.sneak - end - if controls.LMB then - player_set_animation(player, "walk_mine", animation_speed_mod) - else - player_set_animation(player, "walk", animation_speed_mod) - end - elseif controls.LMB then - player_set_animation(player, "mine") - else - player_set_animation(player, "stand", animation_speed_mod) - end - end - end -end) 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 index 4732ade3..9b234981 100644 Binary files a/mods/default/schematics/acacia_tree.mts 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 index 23e8e4b3..c32a995c 100644 Binary files a/mods/default/schematics/acacia_tree_from_sapling.mts 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 index ac09b466..d56cd54b 100644 Binary files a/mods/default/schematics/apple_tree.mts 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 index 5d35a154..23251003 100644 Binary files a/mods/default/schematics/apple_tree_from_sapling.mts 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 index 724aae08..429a831c 100644 Binary files a/mods/default/schematics/aspen_tree.mts 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 index b7ca1619..b7ab3ee6 100644 Binary files a/mods/default/schematics/aspen_tree_from_sapling.mts 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 index 329364a8..fe93c8c1 100644 Binary files a/mods/default/schematics/jungle_tree.mts 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 index babaa45f..f32d312b 100644 Binary files a/mods/default/schematics/jungle_tree_from_sapling.mts 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 index b71077b3..cadcdccb 100644 Binary files a/mods/default/schematics/large_cactus.mts and b/mods/default/schematics/large_cactus.mts differ diff --git a/mods/default/schematics/papyrus.mts b/mods/default/schematics/papyrus.mts deleted file mode 100644 index a3b67776..00000000 Binary files a/mods/default/schematics/papyrus.mts and /dev/null 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 index 3a3fa7ad..c80532ae 100644 Binary files a/mods/default/schematics/pine_tree.mts 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 index 629c5da0..0800387c 100644 Binary files a/mods/default/schematics/pine_tree_from_sapling.mts 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 index 0692049a..3d502a3e 100644 Binary files a/mods/default/schematics/snowy_pine_tree_from_sapling.mts 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_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_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_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_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 index 84a197d2..201aa3b2 100644 Binary files a/mods/default/sounds/default_dirt_footstep.1.ogg 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 index 2e23b8a2..2667dbc2 100644 Binary files a/mods/default/sounds/default_dirt_footstep.2.ogg 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_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_grass_footstep.1.ogg b/mods/default/sounds/default_grass_footstep.1.ogg index 22d1ad6b..a04cdb47 100644 Binary files a/mods/default/sounds/default_grass_footstep.1.ogg 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 index 4ccd8a0f..d193068d 100644 Binary files a/mods/default/sounds/default_grass_footstep.2.ogg 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 index 20db84ed..e1897ea3 100644 Binary files a/mods/default/sounds/default_grass_footstep.3.ogg 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_hard_footstep.1.ogg b/mods/default/sounds/default_hard_footstep.1.ogg index 1748bc56..0a08efa8 100644 Binary files a/mods/default/sounds/default_hard_footstep.1.ogg 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 index fe39fd78..be52a870 100644 Binary files a/mods/default/sounds/default_hard_footstep.2.ogg 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 index 5030e060..a342787d 100644 Binary files a/mods/default/sounds/default_hard_footstep.3.ogg 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_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 index 65b68c7e..b92feabb 100644 Binary files a/mods/default/sounds/default_sand_footstep.1.ogg 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 index 57f35f30..6bc5da3e 100644 Binary files a/mods/default/sounds/default_sand_footstep.2.ogg 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 index 3260b915..97cc8252 100644 Binary files a/mods/default/sounds/default_snow_footstep.1.ogg 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 index 4aac1e7f..97a6baa4 100644 Binary files a/mods/default/sounds/default_snow_footstep.2.ogg 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 index cf4235b7..bde1f21d 100644 Binary files a/mods/default/sounds/default_snow_footstep.3.ogg and b/mods/default/sounds/default_snow_footstep.3.ogg differ diff --git a/mods/default/sounds/default_dig_choppy.ogg b/mods/default/sounds/default_snow_footstep.4.ogg similarity index 51% rename from mods/default/sounds/default_dig_choppy.ogg rename to mods/default/sounds/default_snow_footstep.4.ogg index e2ecd841..8ca6a590 100644 Binary files a/mods/default/sounds/default_dig_choppy.ogg 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_dig_cracky.ogg b/mods/default/sounds/player_damage.ogg similarity index 53% rename from mods/default/sounds/default_dig_cracky.ogg rename to mods/default/sounds/player_damage.ogg index da116791..78880871 100644 Binary files a/mods/default/sounds/default_dig_cracky.ogg and b/mods/default/sounds/player_damage.ogg differ diff --git a/mods/default/textures/bubble.png b/mods/default/textures/bubble.png index 100fe15f..30170d29 100644 Binary files a/mods/default/textures/bubble.png and b/mods/default/textures/bubble.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 index 626e1b30..da58c095 100644 Binary files a/mods/default/textures/default_acacia_leaves.png 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 index 07170a03..e34aec51 100644 Binary files a/mods/default/textures/default_acacia_sapling.png 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 index 169823d4..86ab6b15 100644 Binary files a/mods/default/textures/default_acacia_tree.png 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 index 2cf5ef0b..5dbe97be 100644 Binary files a/mods/default/textures/default_acacia_tree_top.png 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 index b5abf1e9..f2f8337e 100644 Binary files a/mods/default/textures/default_acacia_wood.png and b/mods/default/textures/default_acacia_wood.png differ diff --git a/mods/default/textures/default_aspen_leaves.png b/mods/default/textures/default_aspen_leaves.png index 17a708d1..68ef1884 100644 Binary files a/mods/default/textures/default_aspen_leaves.png 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 index f8d9136a..f4c772c0 100644 Binary files a/mods/default/textures/default_aspen_sapling.png 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 index 933b9cad..db2285e7 100644 Binary files a/mods/default/textures/default_aspen_tree.png 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 index fcca0380..61ac0096 100644 Binary files a/mods/default/textures/default_aspen_tree_top.png 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 index d16fdc97..f31ac30f 100644 Binary files a/mods/default/textures/default_aspen_wood.png 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 index 15af2b69..bcf1e6a0 100644 Binary files a/mods/default/textures/default_book.png 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 index d843e5f6..f23d1225 100644 Binary files a/mods/default/textures/default_book_written.png 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 index 10d64837..3407f758 100644 Binary files a/mods/default/textures/default_bookshelf.png 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 index ab191210..de98961e 100644 Binary files a/mods/default/textures/default_brick.png 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 index 1d0c9d5a..491fc78a 100644 Binary files a/mods/default/textures/default_bronze_block.png and b/mods/default/textures/default_bronze_block.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 index 8d6c40c1..e5c10c33 100644 Binary files a/mods/default/textures/default_cactus_side.png and b/mods/default/textures/default_cactus_side.png differ diff --git a/mods/default/textures/default_chest_front.png b/mods/default/textures/default_chest_front.png index 85227d8f..f4132794 100644 Binary files a/mods/default/textures/default_chest_front.png 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 index 73f46c78..b1885ea5 100644 Binary files a/mods/default/textures/default_chest_lock.png and b/mods/default/textures/default_chest_lock.png differ diff --git a/mods/default/textures/default_chest_top.png b/mods/default/textures/default_chest_top.png index f1a5cb59..1fbdbb94 100644 Binary files a/mods/default/textures/default_chest_top.png and b/mods/default/textures/default_chest_top.png differ diff --git a/mods/default/textures/default_clay_brick.png b/mods/default/textures/default_clay_brick.png index dc7a4317..b288ef0b 100644 Binary files a/mods/default/textures/default_clay_brick.png and b/mods/default/textures/default_clay_brick.png differ diff --git a/mods/default/textures/default_coal_block.png b/mods/default/textures/default_coal_block.png index 6fe9ed93..e92c5322 100644 Binary files a/mods/default/textures/default_coal_block.png and b/mods/default/textures/default_coal_block.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 index 85337546..e1b60f0a 100644 Binary files a/mods/default/textures/default_copper_block.png and b/mods/default/textures/default_copper_block.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 index 184a9d88..fa1af5d3 100644 Binary files a/mods/default/textures/default_desert_cobble.png 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 index 371b8c7e..75ade0b7 100644 Binary files a/mods/default/textures/default_desert_sand.png 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_block.png b/mods/default/textures/default_desert_stone_block.png index ef7ba5bc..e8e842bc 100644 Binary files a/mods/default/textures/default_desert_stone_block.png 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 index 941523ec..8e7208dc 100644 Binary files a/mods/default/textures/default_desert_stone_brick.png and b/mods/default/textures/default_desert_stone_brick.png differ diff --git a/mods/default/textures/default_dirt.png b/mods/default/textures/default_dirt.png index ca7e4aef..4ed965a9 100644 Binary files a/mods/default/textures/default_dirt.png 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 index 03455c3f..11def9c6 100644 Binary files a/mods/default/textures/default_dry_grass.png 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 index 5cf68a3b..d91174cc 100644 Binary files a/mods/default/textures/default_dry_grass_1.png 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 index c925aceb..b12bf547 100644 Binary files a/mods/default/textures/default_dry_grass_2.png 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 index 4e4d84e4..c37a8eb9 100644 Binary files a/mods/default/textures/default_dry_grass_3.png 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 index d315849e..c00c7027 100644 Binary files a/mods/default/textures/default_dry_grass_4.png 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 index 871d04cc..10a09316 100644 Binary files a/mods/default/textures/default_dry_grass_5.png 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 index ef375b7f..3ccbe418 100644 Binary files a/mods/default/textures/default_dry_grass_side.png 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 index e8a7f277..82c9cc58 100644 Binary files a/mods/default/textures/default_dry_shrub.png 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 index 3b973f34..0fb97cc9 100644 Binary files a/mods/default/textures/default_fence_acacia_wood.png 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 index 7fb624dc..fec97550 100644 Binary files a/mods/default/textures/default_fence_aspen_wood.png 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 index c390941c..b3b8549c 100644 Binary files a/mods/default/textures/default_fence_junglewood.png and b/mods/default/textures/default_fence_junglewood.png differ diff --git a/mods/default/textures/default_fence_pine_wood.png b/mods/default/textures/default_fence_pine_wood.png index 74609d99..5045d19a 100644 Binary files a/mods/default/textures/default_fence_pine_wood.png 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 index 1e76430d..7d161dce 100644 Binary files a/mods/default/textures/default_fence_wood.png 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 index 3211db15..9763f4b1 100644 Binary files a/mods/default/textures/default_flint.png 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 index 41d95463..24d3e944 100644 Binary files a/mods/default/textures/default_footprint.png 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 index b79ed063..92279ba3 100644 Binary files a/mods/default/textures/default_furnace_bottom.png and b/mods/default/textures/default_furnace_bottom.png differ diff --git a/mods/default/textures/default_furnace_fire_fg.png b/mods/default/textures/default_furnace_fire_fg.png index 63888f39..576f113b 100644 Binary files a/mods/default/textures/default_furnace_fire_fg.png 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 index 8c1798e4..f445d83d 100644 Binary files a/mods/default/textures/default_furnace_front.png 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 index ea43ed92..68c03f57 100644 Binary files a/mods/default/textures/default_furnace_front_active.png and b/mods/default/textures/default_furnace_front_active.png differ diff --git a/mods/default/textures/default_furnace_top.png b/mods/default/textures/default_furnace_top.png index b79ed063..92279ba3 100644 Binary files a/mods/default/textures/default_furnace_top.png 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 index da254028..74d6a025 100644 Binary files a/mods/default/textures/default_glass.png 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 index d38dbb7b..7eab49e0 100644 Binary files a/mods/default/textures/default_glass_detail.png and b/mods/default/textures/default_glass_detail.png differ diff --git a/mods/default/textures/default_grass.png b/mods/default/textures/default_grass.png index 0181fabd..5778caa1 100644 Binary files a/mods/default/textures/default_grass.png 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 index 5ed8388b..d16b307e 100644 Binary files a/mods/default/textures/default_grass_1.png 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 index 0ffa8fc2..6a1dac2c 100644 Binary files a/mods/default/textures/default_grass_2.png 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 index 101fefaa..e67727a4 100644 Binary files a/mods/default/textures/default_grass_3.png 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 index 72c721af..80269d7e 100644 Binary files a/mods/default/textures/default_grass_4.png 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 index 7fd68388..df457605 100644 Binary files a/mods/default/textures/default_grass_5.png 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 index bfd538df..77aa6557 100644 Binary files a/mods/default/textures/default_grass_side.png 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 index 25a78b64..37bf286d 100644 Binary files a/mods/default/textures/default_gravel.png 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 index be8eadd9..09b53f28 100644 Binary files a/mods/default/textures/default_ice.png 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_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_jungleleaves.png b/mods/default/textures/default_jungleleaves.png index 870b4bb2..252eee0a 100644 Binary files a/mods/default/textures/default_jungleleaves.png 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 index 689195f7..8e97f800 100644 Binary files a/mods/default/textures/default_jungleleaves_simple.png and b/mods/default/textures/default_jungleleaves_simple.png differ diff --git a/mods/default/textures/default_jungletree.png b/mods/default/textures/default_jungletree.png index bf0403e9..671b24dc 100644 Binary files a/mods/default/textures/default_jungletree.png 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 index 4844682b..4027d9e0 100644 Binary files a/mods/default/textures/default_jungletree_top.png 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 index 8d17917b..68d9e48a 100644 Binary files a/mods/default/textures/default_junglewood.png 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 index 1cc6dfde..87041262 100644 Binary files a/mods/default/textures/default_ladder_steel.png 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 index c167fff5..6e18e547 100644 Binary files a/mods/default/textures/default_ladder_wood.png 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 index b0d429eb..1d7039ff 100644 Binary files a/mods/default/textures/default_lava.png 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 index 2ec07463..ebb0ec17 100644 Binary files a/mods/default/textures/default_lava_flowing_animated.png 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 index 32267a6b..326af645 100644 Binary files a/mods/default/textures/default_lava_source_animated.png 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 index e39535c6..13a076cb 100644 Binary files a/mods/default/textures/default_leaves.png 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 index e492a32e..02679ec6 100644 Binary files a/mods/default/textures/default_leaves_simple.png 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 index e30994e2..77524faa 100644 Binary files a/mods/default/textures/default_mese_block.png and b/mods/default/textures/default_mese_block.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 index b227a254..d15c8b9b 100644 Binary files a/mods/default/textures/default_meselamp.png and b/mods/default/textures/default_meselamp.png differ diff --git a/mods/default/textures/default_mineral_diamond.png b/mods/default/textures/default_mineral_diamond.png index 39c0f83b..b817bd11 100644 Binary files a/mods/default/textures/default_mineral_diamond.png and b/mods/default/textures/default_mineral_diamond.png differ diff --git a/mods/default/textures/default_mineral_iron.png b/mods/default/textures/default_mineral_iron.png index bfec8b1f..5d630628 100644 Binary files a/mods/default/textures/default_mineral_iron.png 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 index 6952670a..56a447d0 100644 Binary files a/mods/default/textures/default_mineral_mese.png 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 index 1ae7c91f..1071cb46 100644 Binary files a/mods/default/textures/default_mossycobble.png 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 index 8f4a49c4..30e063fd 100644 Binary files a/mods/default/textures/default_obsidian.png 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 index 262cd37e..dd93f8d1 100644 Binary files a/mods/default/textures/default_obsidian_block.png 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 index 30c67caa..e4c8fe7f 100644 Binary files a/mods/default/textures/default_obsidian_brick.png and b/mods/default/textures/default_obsidian_brick.png differ diff --git a/mods/default/textures/default_obsidian_glass_detail.png b/mods/default/textures/default_obsidian_glass_detail.png index a8bbec98..1397ecc4 100644 Binary files a/mods/default/textures/default_obsidian_glass_detail.png and b/mods/default/textures/default_obsidian_glass_detail.png differ diff --git a/mods/default/textures/default_papyrus.png b/mods/default/textures/default_papyrus.png index a85e8090..982d589c 100644 Binary files a/mods/default/textures/default_papyrus.png 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 index 1a32f632..d1bcab6e 100644 Binary files a/mods/default/textures/default_pine_needles.png and b/mods/default/textures/default_pine_needles.png differ diff --git a/mods/default/textures/default_pine_tree_top.png b/mods/default/textures/default_pine_tree_top.png index 8705710e..e26a835d 100644 Binary files a/mods/default/textures/default_pine_tree_top.png 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 index 6844ceb8..29f9d6d2 100644 Binary files a/mods/default/textures/default_pine_wood.png and b/mods/default/textures/default_pine_wood.png differ diff --git a/mods/default/textures/default_rail.png b/mods/default/textures/default_rail.png deleted file mode 100644 index 26fed02e..00000000 Binary files a/mods/default/textures/default_rail.png and /dev/null differ diff --git a/mods/default/textures/default_rail_crossing.png b/mods/default/textures/default_rail_crossing.png deleted file mode 100644 index ba66e015..00000000 Binary files a/mods/default/textures/default_rail_crossing.png and /dev/null differ diff --git a/mods/default/textures/default_rail_curved.png b/mods/default/textures/default_rail_curved.png deleted file mode 100644 index 9084ac24..00000000 Binary files a/mods/default/textures/default_rail_curved.png and /dev/null differ diff --git a/mods/default/textures/default_rail_t_junction.png b/mods/default/textures/default_rail_t_junction.png deleted file mode 100644 index 486c416a..00000000 Binary files a/mods/default/textures/default_rail_t_junction.png and /dev/null 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 index 3b55c5f6..be57575b 100644 Binary files a/mods/default/textures/default_river_water.png 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 index 536acc53..52e6e8ec 100644 Binary files a/mods/default/textures/default_river_water_flowing_animated.png 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 index daa5653f..560078ee 100644 Binary files a/mods/default/textures/default_river_water_source_animated.png and b/mods/default/textures/default_river_water_source_animated.png differ diff --git a/mods/default/textures/default_sandstone_block.png b/mods/default/textures/default_sandstone_block.png index b97c8780..c3adfd97 100644 Binary files a/mods/default/textures/default_sandstone_block.png 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 index e7150e50..6326391b 100644 Binary files a/mods/default/textures/default_sandstone_brick.png and b/mods/default/textures/default_sandstone_brick.png differ diff --git a/mods/default/textures/default_sign_steel.png b/mods/default/textures/default_sign_steel.png index 5705c787..1ea3ec97 100644 Binary files a/mods/default/textures/default_sign_steel.png 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 index d8d4a5b0..9a9273db 100644 Binary files a/mods/default/textures/default_sign_wall_steel.png 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 index f25a67a8..eb91cf6d 100644 Binary files a/mods/default/textures/default_sign_wall_wood.png 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 index a25a4c34..07eb9846 100644 Binary files a/mods/default/textures/default_sign_wood.png 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 index 2a2439fb..6a12161d 100644 Binary files a/mods/default/textures/default_snow.png 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 index f13ec940..8465d80d 100644 Binary files a/mods/default/textures/default_snow_side.png 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 index ecdba9a3..13eb27af 100644 Binary files a/mods/default/textures/default_snowball.png 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 index 7f49f61f..5e421f02 100644 Binary files a/mods/default/textures/default_steel_block.png and b/mods/default/textures/default_steel_block.png differ diff --git a/mods/default/textures/default_stone.png b/mods/default/textures/default_stone.png index 63cb7c4e..d3f0ef80 100644 Binary files a/mods/default/textures/default_stone.png 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 index 3b771e72..2d098783 100644 Binary files a/mods/default/textures/default_stone_block.png 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 index 4312b5cb..3ae9602a 100644 Binary files a/mods/default/textures/default_stone_brick.png 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_diamondpick.png b/mods/default/textures/default_tool_diamondpick.png index f9883c66..5dcc9983 100644 Binary files a/mods/default/textures/default_tool_diamondpick.png and b/mods/default/textures/default_tool_diamondpick.png differ diff --git a/mods/default/textures/default_torch_on_ceiling_animated.png b/mods/default/textures/default_torch_on_ceiling_animated.png index 3a8b5ad9..5465217f 100644 Binary files a/mods/default/textures/default_torch_on_ceiling_animated.png and b/mods/default/textures/default_torch_on_ceiling_animated.png differ diff --git a/mods/default/textures/default_tree.png b/mods/default/textures/default_tree.png index 10e297b4..fe89963c 100644 Binary files a/mods/default/textures/default_tree.png 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 index da99bce7..9205ed98 100644 Binary files a/mods/default/textures/default_tree_top.png 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 index 00500e9b..47253db5 100644 Binary files a/mods/default/textures/default_water.png 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 index 070d7971..0dc0ef9f 100644 Binary files a/mods/default/textures/default_water_flowing_animated.png 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 index 7e7f9ff1..8041b036 100644 Binary files a/mods/default/textures/default_water_source_animated.png and b/mods/default/textures/default_water_source_animated.png differ diff --git a/mods/default/textures/gui_formbg.png b/mods/default/textures/gui_formbg.png index c543466c..e259fec2 100644 Binary files a/mods/default/textures/gui_formbg.png and b/mods/default/textures/gui_formbg.png differ diff --git a/mods/default/textures/gui_hotbar.png b/mods/default/textures/gui_hotbar.png index 73fb3ca8..7bc78875 100644 Binary files a/mods/default/textures/gui_hotbar.png 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 index 40bafe6b..7203e9a7 100644 Binary files a/mods/default/textures/gui_hotbar_selected.png and b/mods/default/textures/gui_hotbar_selected.png differ diff --git a/mods/default/textures/heart.png b/mods/default/textures/heart.png index 6d4e2289..4412cab5 100644 Binary files a/mods/default/textures/heart.png and b/mods/default/textures/heart.png differ diff --git a/mods/default/tools.lua b/mods/default/tools.lua index 26e3040a..fd6f4365 100644 --- a/mods/default/tools.lua +++ b/mods/default/tools.lua @@ -1,9 +1,11 @@ -- mods/default/tools.lua +-- support for MT game translation. +local S = default.get_translator + -- The hand -minetest.register_item(":", { - type = "none", - wield_image = "wieldhand.png", +-- 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, @@ -22,7 +24,7 @@ minetest.register_item(":", { -- minetest.register_tool("default:pick_wood", { - description = "Wooden Pickaxe", + description = S("Wooden Pickaxe"), inventory_image = "default_tool_woodpick.png", tool_capabilities = { full_punch_interval = 1.2, @@ -32,9 +34,12 @@ minetest.register_tool("default:pick_wood", { }, damage_groups = {fleshy=2}, }, + sound = {breaks = "default_tool_breaks"}, + groups = {pickaxe = 1, flammable = 2} }) + minetest.register_tool("default:pick_stone", { - description = "Stone Pickaxe", + description = S("Stone Pickaxe"), inventory_image = "default_tool_stonepick.png", tool_capabilities = { full_punch_interval = 1.3, @@ -44,9 +49,27 @@ minetest.register_tool("default:pick_stone", { }, 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 = "Steel Pickaxe", + description = S("Steel Pickaxe"), inventory_image = "default_tool_steelpick.png", tool_capabilities = { full_punch_interval = 1.0, @@ -56,21 +79,12 @@ minetest.register_tool("default:pick_steel", { }, damage_groups = {fleshy=4}, }, + sound = {breaks = "default_tool_breaks"}, + groups = {pickaxe = 1} }) -minetest.register_tool("default:pick_bronze", { - description = "Bronze Pickaxe", - inventory_image = "default_tool_bronzepick.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=30, maxlevel=2}, - }, - damage_groups = {fleshy=4}, - }, -}) + minetest.register_tool("default:pick_mese", { - description = "Mese Pickaxe", + description = S("Mese Pickaxe"), inventory_image = "default_tool_mesepick.png", tool_capabilities = { full_punch_interval = 0.9, @@ -80,9 +94,12 @@ minetest.register_tool("default:pick_mese", { }, damage_groups = {fleshy=5}, }, + sound = {breaks = "default_tool_breaks"}, + groups = {pickaxe = 1} }) + minetest.register_tool("default:pick_diamond", { - description = "Diamond Pickaxe", + description = S("Diamond Pickaxe"), inventory_image = "default_tool_diamondpick.png", tool_capabilities = { full_punch_interval = 0.9, @@ -92,6 +109,8 @@ minetest.register_tool("default:pick_diamond", { }, damage_groups = {fleshy=5}, }, + sound = {breaks = "default_tool_breaks"}, + groups = {pickaxe = 1} }) -- @@ -99,7 +118,7 @@ minetest.register_tool("default:pick_diamond", { -- minetest.register_tool("default:shovel_wood", { - description = "Wooden Shovel", + description = S("Wooden Shovel"), inventory_image = "default_tool_woodshovel.png", wield_image = "default_tool_woodshovel.png^[transformR90", tool_capabilities = { @@ -110,9 +129,12 @@ minetest.register_tool("default:shovel_wood", { }, damage_groups = {fleshy=2}, }, + sound = {breaks = "default_tool_breaks"}, + groups = {shovel = 1, flammable = 2} }) + minetest.register_tool("default:shovel_stone", { - description = "Stone Shovel", + description = S("Stone Shovel"), inventory_image = "default_tool_stoneshovel.png", wield_image = "default_tool_stoneshovel.png^[transformR90", tool_capabilities = { @@ -123,9 +145,28 @@ minetest.register_tool("default:shovel_stone", { }, 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 = "Steel Shovel", + description = S("Steel Shovel"), inventory_image = "default_tool_steelshovel.png", wield_image = "default_tool_steelshovel.png^[transformR90", tool_capabilities = { @@ -136,22 +177,12 @@ minetest.register_tool("default:shovel_steel", { }, damage_groups = {fleshy=3}, }, + sound = {breaks = "default_tool_breaks"}, + groups = {shovel = 1} }) -minetest.register_tool("default:shovel_bronze", { - description = "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.50, [2]=0.90, [3]=0.40}, uses=40, maxlevel=2}, - }, - damage_groups = {fleshy=3}, - }, -}) + minetest.register_tool("default:shovel_mese", { - description = "Mese Shovel", + description = S("Mese Shovel"), inventory_image = "default_tool_meseshovel.png", wield_image = "default_tool_meseshovel.png^[transformR90", tool_capabilities = { @@ -162,9 +193,12 @@ minetest.register_tool("default:shovel_mese", { }, damage_groups = {fleshy=4}, }, + sound = {breaks = "default_tool_breaks"}, + groups = {shovel = 1} }) + minetest.register_tool("default:shovel_diamond", { - description = "Diamond Shovel", + description = S("Diamond Shovel"), inventory_image = "default_tool_diamondshovel.png", wield_image = "default_tool_diamondshovel.png^[transformR90", tool_capabilities = { @@ -175,6 +209,8 @@ minetest.register_tool("default:shovel_diamond", { }, damage_groups = {fleshy=4}, }, + sound = {breaks = "default_tool_breaks"}, + groups = {shovel = 1} }) -- @@ -182,7 +218,7 @@ minetest.register_tool("default:shovel_diamond", { -- minetest.register_tool("default:axe_wood", { - description = "Wooden Axe", + description = S("Wooden Axe"), inventory_image = "default_tool_woodaxe.png", tool_capabilities = { full_punch_interval = 1.0, @@ -192,9 +228,12 @@ minetest.register_tool("default:axe_wood", { }, damage_groups = {fleshy=2}, }, + sound = {breaks = "default_tool_breaks"}, + groups = {axe = 1, flammable = 2} }) + minetest.register_tool("default:axe_stone", { - description = "Stone Axe", + description = S("Stone Axe"), inventory_image = "default_tool_stoneaxe.png", tool_capabilities = { full_punch_interval = 1.2, @@ -204,9 +243,27 @@ minetest.register_tool("default:axe_stone", { }, 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 = "Steel Axe", + description = S("Steel Axe"), inventory_image = "default_tool_steelaxe.png", tool_capabilities = { full_punch_interval = 1.0, @@ -216,21 +273,12 @@ minetest.register_tool("default:axe_steel", { }, damage_groups = {fleshy=4}, }, + sound = {breaks = "default_tool_breaks"}, + groups = {axe = 1} }) -minetest.register_tool("default:axe_bronze", { - description = "Bronze Axe", - inventory_image = "default_tool_bronzeaxe.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=30, maxlevel=2}, - }, - damage_groups = {fleshy=4}, - }, -}) + minetest.register_tool("default:axe_mese", { - description = "Mese Axe", + description = S("Mese Axe"), inventory_image = "default_tool_meseaxe.png", tool_capabilities = { full_punch_interval = 0.9, @@ -240,18 +288,23 @@ minetest.register_tool("default:axe_mese", { }, damage_groups = {fleshy=6}, }, + sound = {breaks = "default_tool_breaks"}, + groups = {axe = 1} }) + minetest.register_tool("default:axe_diamond", { - description = "Diamond Axe", + 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=2}, + 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} }) -- @@ -259,7 +312,7 @@ minetest.register_tool("default:axe_diamond", { -- minetest.register_tool("default:sword_wood", { - description = "Wooden Sword", + description = S("Wooden Sword"), inventory_image = "default_tool_woodsword.png", tool_capabilities = { full_punch_interval = 1, @@ -268,10 +321,13 @@ minetest.register_tool("default:sword_wood", { 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 = "Stone Sword", + description = S("Stone Sword"), inventory_image = "default_tool_stonesword.png", tool_capabilities = { full_punch_interval = 1.2, @@ -280,10 +336,28 @@ minetest.register_tool("default:sword_stone", { 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 = "Steel Sword", + description = S("Steel Sword"), inventory_image = "default_tool_steelsword.png", tool_capabilities = { full_punch_interval = 0.8, @@ -292,22 +366,13 @@ minetest.register_tool("default:sword_steel", { snappy={times={[1]=2.5, [2]=1.20, [3]=0.35}, uses=30, maxlevel=2}, }, damage_groups = {fleshy=6}, - } -}) -minetest.register_tool("default:sword_bronze", { - description = "Bronze Sword", - inventory_image = "default_tool_bronzesword.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=40, maxlevel=2}, - }, - damage_groups = {fleshy=6}, - } + }, + sound = {breaks = "default_tool_breaks"}, + groups = {sword = 1} }) + minetest.register_tool("default:sword_mese", { - description = "Mese Sword", + description = S("Mese Sword"), inventory_image = "default_tool_mesesword.png", tool_capabilities = { full_punch_interval = 0.7, @@ -316,10 +381,13 @@ minetest.register_tool("default:sword_mese", { 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 = "Diamond Sword", + description = S("Diamond Sword"), inventory_image = "default_tool_diamondsword.png", tool_capabilities = { full_punch_interval = 0.7, @@ -328,5 +396,82 @@ minetest.register_tool("default:sword_diamond", { 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 index 5cd7e156..24a96cf0 100644 --- a/mods/default/trees.lua +++ b/mods/default/trees.lua @@ -1,3 +1,8 @@ +-- default/trees.lua + +-- support for MT game translation. +local S = default.get_translator + local random = math.random -- @@ -11,9 +16,7 @@ function default.can_grow(pos) if not node_under then return false end - local name_under = node_under.name - local is_soil = minetest.get_item_group(name_under, "soil") - if is_soil == 0 then + if minetest.get_item_group(node_under.name, "soil") == 0 then return false end local light_level = minetest.get_node_light(pos) @@ -27,17 +30,16 @@ end -- 'is snow nearby' function local function is_snow_nearby(pos) - return minetest.find_node_near(pos, 1, - {"default:snow", "default:snowblock", "default:dirt_with_snow"}) + return minetest.find_node_near(pos, 1, {"group:snowy"}) end --- Sapling ABM +-- Grow sapling function default.grow_sapling(pos) if not default.can_grow(pos) then - -- try a bit later again - minetest.get_node_timer(pos):start(math.random(240, 600)) + -- try again 5 min later + minetest.get_node_timer(pos):start(300) return end @@ -78,6 +80,26 @@ function default.grow_sapling(pos) 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 @@ -87,7 +109,7 @@ minetest.register_lbm({ "default:pine_sapling", "default:acacia_sapling", "default:aspen_sapling"}, action = function(pos) - minetest.get_node_timer(pos):start(math.random(1200, 2400)) + minetest.get_node_timer(pos):start(math.random(300, 1500)) end }) @@ -372,8 +394,8 @@ end 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 - 2, y = pos.y - 1, z = pos.z - 2}, - path, "0", nil, false) + minetest.place_schematic({x = pos.x - 3, y = pos.y - 1, z = pos.z - 3}, + path, "random", nil, false) end @@ -387,11 +409,27 @@ function default.grow_new_jungle_tree(pos) 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 = minetest.get_modpath("default") .. - "/schematics/pine_tree_from_sapling.mts" + 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 @@ -400,8 +438,14 @@ end -- New snowy pine tree function default.grow_new_snowy_pine_tree(pos) - local path = minetest.get_modpath("default") .. - "/schematics/snowy_pine_tree_from_sapling.mts" + 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 @@ -427,6 +471,58 @@ function default.grow_new_aspen_tree(pos) 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 -- @@ -435,37 +531,75 @@ 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(pos) - local pdef = minetest.registered_nodes[node.name] + 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(pos) - pdef = minetest.registered_nodes[node.name] + 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:get_player_name() + 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 not default.intersects_protection( + if minetest.is_area_protected( vector.add(pos, minp_relative), vector.add(pos, maxp_relative), player_name, interval) then - minetest.set_node(pos, {name = sapling_name}) - if not minetest.setting_getbool("creative_mode") then - itemstack:take_item() - end - else minetest.record_protection_violation(pos, player_name) -- Print extra information to explain - minetest.chat_send_player(player_name, "Tree will intersect protection") +-- 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 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 index 6c036782..f9caaffc 100644 --- a/mods/doors/README.txt +++ b/mods/doors/README.txt @@ -1,62 +1,65 @@ Minetest Game mod: doors ======================== -version: 2.0 +See license.txt for license information. -License of source code: ------------------------ -Copyright (C) 2012 PilzAdam -modified by BlockMen (added sounds, glassdoors[glass, obsidian glass], trapdoor) -Steel trapdoor added by sofar. -Copyright (C) 2016 sofar@foo-projects.org -Re-implemented most of the door algorithms, added meshes, UV wrapped texture +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 +Added Fence Gate model, code, and sounds. -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://sam.zoy.org/wtfpl/COPYING for more details. +Various Minetest developers and contributors (MIT) -License of textures --------------------------------------- -following Textures created by Fernando Zapata (CC BY-SA 3.0): + +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 (WTFPL): +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): +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): +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) +Following textures created by sofar (CC-BY-SA-3.0): doors_trapdoor_steel.png - doors_trapdoor_steel_side.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: WTFPL +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 red-001 based on textures by celeron55: CC BY-SA 3.0 - door_glass.png -All other textures (created by PilzAdam): WTFPL +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. -Models: --------------------------------------- + +Authors of media (models) +------------------------- Door 3d models by sofar (CC-BY-SA-3.0) - door_a.obj - door_b.obj @@ -64,17 +67,18 @@ Fence gate models by sofar (CC-BY-SA-3.0) - fencegate_open.obj - fencegate_closed.obj -License of sounds --------------------------------------- + +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 + 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 + 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 diff --git a/mods/doors/depends.txt b/mods/doors/depends.txt deleted file mode 100644 index 5e28beeb..00000000 --- a/mods/doors/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -default -screwdriver? diff --git a/mods/doors/init.lua b/mods/doors/init.lua index 0888077f..c5fb4ece 100644 --- a/mods/doors/init.lua +++ b/mods/doors/init.lua @@ -1,23 +1,28 @@ ---[[ - -Copyright (C) 2012 PilzAdam - modified by BlockMen (added sounds, glassdoors[glass, obsidian glass], trapdoor) -Copyright (C) 2015 - Auke Kok - ---]] +-- doors/init.lua -- our API object doors = {} --- private data -local _doors = {} -_doors.registered_doors = {} -_doors.registered_trapdoors = {} +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 + if doors.registered_doors[node_name] then -- A normal upright door return { pos = pos, @@ -25,23 +30,23 @@ function doors.get(pos) if self:state() then return false end - return _doors.door_toggle(self.pos, nil, player) + 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) + return doors.door_toggle(self.pos, nil, player) end, toggle = function(self, player) - return _doors.door_toggle(self.pos, nil, 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 + elseif doors.registered_trapdoors[node_name] then -- A trapdoor return { pos = pos, @@ -49,16 +54,16 @@ function doors.get(pos) if self:state() then return false end - return _doors.trapdoor_toggle(self.pos, nil, player) + 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) + return doors.trapdoor_toggle(self.pos, nil, player) end, toggle = function(self, player) - return _doors.trapdoor_toggle(self.pos, nil, player) + return doors.trapdoor_toggle(self.pos, nil, player) end, state = function(self) return minetest.get_node(self.pos).name:sub(-5) == "_open" @@ -72,10 +77,10 @@ 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 = "Hidden Door Segment", - -- can't use airlike otherwise falling nodes will turn to entities - -- and will be forever stuck until door is removed. - drawtype = "nodebox", + 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, @@ -88,13 +93,7 @@ minetest.register_node("doors:hidden", { drop = "", groups = {not_in_creative_inventory = 1}, on_blast = function() end, - tiles = {"doors_blank.png"}, - -- 1px transparent block inside door hinge near node top. - nodebox = { - type = "fixed", - fixed = {-15/32, 13/32, -15/32, -13/32, 1/2, -13/32}, - }, - -- collision_box needed otherise selection box would be full node size + -- 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}, @@ -110,10 +109,10 @@ local transform = { {v = "_a", param2 = 2}, }, { - {v = "_b", param2 = 1}, - {v = "_b", param2 = 2}, - {v = "_b", param2 = 3}, - {v = "_b", param2 = 0}, + {v = "_c", param2 = 1}, + {v = "_c", param2 = 2}, + {v = "_c", param2 = 3}, + {v = "_c", param2 = 0}, }, { {v = "_b", param2 = 1}, @@ -122,14 +121,14 @@ local transform = { {v = "_b", param2 = 0}, }, { - {v = "_a", param2 = 3}, - {v = "_a", param2 = 0}, - {v = "_a", param2 = 1}, - {v = "_a", param2 = 2}, + {v = "_d", param2 = 3}, + {v = "_d", param2 = 0}, + {v = "_d", param2 = 1}, + {v = "_d", param2 = 2}, }, } -function _doors.door_toggle(pos, node, clicker) +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] @@ -147,13 +146,10 @@ function _doors.door_toggle(pos, node, clicker) state = tonumber(state) end - if clicker and not minetest.check_player_privs(clicker, "protection_bypass") then - local owner = meta:get_string("doors_owner") - if owner ~= "" then - if clicker:get_player_name() ~= owner then - return false - end - 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 :( @@ -164,12 +160,20 @@ function _doors.door_toggle(pos, node, clicker) 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 = 0.3, max_hear_distance = 10}) + {pos = pos, gain = def.door.gains[1], max_hear_distance = 10}, true) else minetest.sound_play(def.door.sounds[2], - {pos = pos, gain = 0.3, max_hear_distance = 10}) + {pos = pos, gain = def.door.gains[2], max_hear_distance = 10}, true) end minetest.swap_node(pos, { @@ -204,11 +208,8 @@ local function on_place_node(place_to, newnode, end local function can_dig_door(pos, digger) - local digger_name = digger and digger:get_player_name() - if digger_name and minetest.get_player_privs(digger_name).protection_bypass then - return true - end - return minetest.get_meta(pos):get_string("doors_owner") == digger_name + replace_old_owner_information(pos) + return default.can_interact_with_node(digger, pos) end function doors.register(name, def) @@ -254,17 +255,21 @@ function doors.register(name, def) 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 not pointed_thing.type == "node" then + 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 then + 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 @@ -288,12 +293,12 @@ function doors.register(name, def) return itemstack end - local pn = placer:get_player_name() + 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 = minetest.dir_to_facedir(placer:get_look_dir()) + local dir = placer and minetest.dir_to_facedir(placer:get_look_dir()) or 0 local ref = { {x = -1, y = 0, z = 0}, @@ -311,10 +316,10 @@ function doors.register(name, def) local state = 0 if minetest.get_item_group(minetest.get_node(aside).name, "door") == 1 then state = state + 2 - minetest.set_node(pos, {name = name .. "_b", param2 = dir}) + 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 = name .. "_a", param2 = dir}) + minetest.set_node(pos, {name = doorname .. "_a", param2 = dir}) minetest.set_node(above, {name = "doors:hidden", param2 = dir}) end @@ -322,14 +327,16 @@ function doors.register(name, def) meta:set_int("state", state) if def.protected then - meta:set_string("doors_owner", pn) - meta:set_string("infotext", "Owned by " .. pn) + meta:set_string("owner", pn) + meta:set_string("infotext", def.description .. "\n" .. S("Owned by @1", pn)) end - if not minetest.setting_getbool("creative_mode") then + 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) @@ -358,27 +365,65 @@ function doors.register(name, def) 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 }, + sounds = {def.sound_close, def.sound_open}, + gains = {def.gain_close, def.gain_open}, } - - def.on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - _doors.door_toggle(pos, node, clicker) - return itemstack + 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}) - nodeupdate({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 - def.on_rotate = screwdriver and screwdriver.rotate_simple or false 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) @@ -401,22 +446,33 @@ function doors.register(name, def) 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.obj" - minetest.register_node(":" .. name .. "_a", def) + def.mesh = "door_a.b3d" + minetest.register_node(":" .. name .. "_a", table.copy(def)) - def.mesh = "door_b.obj" - minetest.register_node(":" .. name .. "_b", def) + def.mesh = "door_b.b3d" + minetest.register_node(":" .. name .. "_b", table.copy(def)) - _doors.registered_doors[name .. "_a"] = true - _doors.registered_doors[name .. "_b"] = true + 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 = "Wooden Door", + description = S("Wooden Door"), inventory_image = "doors_item_wood.png", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + 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"}, @@ -426,13 +482,15 @@ doors.register("door_wood", { doors.register("door_steel", { tiles = {{name = "doors_door_steel.png", backface_culling = true}}, - description = "Steel Door", + description = S("Steel Door"), inventory_image = "doors_item_steel.png", protected = true, - groups = {cracky = 1, level = 2}, - sounds = default.node_sound_stone_defaults(), + 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"}, @@ -442,12 +500,14 @@ doors.register("door_steel", { doors.register("door_glass", { tiles = {"doors_door_glass.png"}, - description = "Glass Door", + description = S("Glass Door"), inventory_image = "doors_item_glass.png", - groups = {cracky=3, oddly_breakable_by_hand=3}, + 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"}, @@ -457,12 +517,14 @@ doors.register("door_glass", { doors.register("door_obsidian_glass", { tiles = {"doors_door_obsidian_glass.png"}, - description = "Obsidian Glass Door", + description = S("Obsidian Glass Door"), inventory_image = "doors_item_obsidian_glass.png", - groups = {cracky=3}, + 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"}, @@ -496,28 +558,25 @@ end ----trapdoor---- -function _doors.trapdoor_toggle(pos, node, clicker) +function doors.trapdoor_toggle(pos, node, clicker) node = node or minetest.get_node(pos) - if clicker and not minetest.check_player_privs(clicker, "protection_bypass") then - local meta = minetest.get_meta(pos) - local owner = meta:get_string("doors_owner") - if owner ~= "" then - if clicker:get_player_name() ~= owner then - return false - end - end + + 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 = 0.3, max_hear_distance = 10}) + {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 = 0.3, max_hear_distance = 10}) + {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 @@ -527,12 +586,12 @@ 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) + doors.trapdoor_toggle(pos, node, clicker) return itemstack end @@ -541,19 +600,46 @@ function doors.register_trapdoor(name, def) 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("doors_owner", pn) - meta:set_string("infotext", "Owned by "..pn) + meta:set_string("owner", pn) + meta:set_string("infotext", def.description .. "\n" .. S("Owned by @1", pn)) - return minetest.setting_getbool("creative_mode") + 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) @@ -573,35 +659,58 @@ function doors.register_trapdoor(name, def) 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) - def_closed.node_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -6/16, 0.5} - } + 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} - - def_opened.node_box = { - type = "fixed", - fixed = {-0.5, -0.5, 6/16, 0.5, 0.5, 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, - def.tile_side .. '^[transform3', - def.tile_side .. '^[transform1', - def.tile_front .. '^[transform46', - def.tile_front .. '^[transform6'} + 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 @@ -609,57 +718,62 @@ function doors.register_trapdoor(name, def) 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 + doors.registered_trapdoors[name_opened] = true + doors.registered_trapdoors[name_closed] = true end doors.register_trapdoor("doors:trapdoor", { - description = "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 = "Steel Trapdoor", + 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_stone_defaults(), + 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', + output = "doors:trapdoor 2", recipe = { - {'group:wood', 'group:wood', 'group:wood'}, - {'group:wood', 'group:wood', 'group:wood'}, + {'group:wood', 'group:wood', ''}, + {'group:wood', 'group:wood', ''}, {'', '', ''}, } }) minetest.register_craft({ - output = 'doors:trapdoor_steel', + output = "doors:trapdoor_steel", 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"}, } }) ----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 = {def.texture}, + tiles = {}, paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, @@ -670,17 +784,27 @@ function doors.register_fencegate(name, def) 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.sound, {pos = pos, gain = 0.3, - max_hear_distance = 8}) + 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}, + 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 @@ -689,22 +813,22 @@ function doors.register_fencegate(name, def) local fence_closed = table.copy(fence) fence_closed.mesh = "doors_fencegate_closed.obj" - fence_closed.gate = name .. "_open" - fence_closed.sound = "doors_fencegate_open" + fence_closed._gate = name .. "_open" + fence_closed._gate_sound = "doors_fencegate_open" fence_closed.collision_box = { type = "fixed", - fixed = {-1/2, -1/2, -1/4, 1/2, 1/2, 1/4}, + 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.sound = "doors_fencegate_close" + 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/4, -3/8, 1/2, 1/4}, - {-5/8, -3/8, -1/2, -3/8, 3/8, 0}}, + 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) @@ -713,43 +837,88 @@ function doors.register_fencegate(name, def) minetest.register_craft({ output = name .. "_closed", recipe = { - {"default:stick", def.material, "default:stick"}, - {"default:stick", def.material, "default:stick"} + {"group:stick", def.material, "group:stick"}, + {"group:stick", def.material, "group:stick"} } }) end doors.register_fencegate("doors:gate_wood", { - description = "Wooden Fence Gate", + 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 = "Acacia Fence Gate", + 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 = "Junglewood Fence Gate", + 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 = "Pine Fence Gate", + 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 = "Aspen Fence Gate", + 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_a.obj b/mods/doors/models/door_a.obj deleted file mode 100644 index bd5127b5..00000000 --- a/mods/doors/models/door_a.obj +++ /dev/null @@ -1,40 +0,0 @@ -# Blender v2.76 (sub 0) OBJ File: 'door_a.blend' -# www.blender.org -mtllib door_a.mtl -o Cube_Cube.001 -v 0.499000 -0.499000 -0.499000 -v 0.499000 1.499000 -0.499000 -v 0.499000 -0.499000 -0.375000 -v 0.499000 1.499000 -0.375000 -v -0.499000 -0.499000 -0.499000 -v -0.499000 1.499000 -0.499000 -v -0.499000 -0.499000 -0.375000 -v -0.499000 1.499000 -0.375000 -vt 0.842105 1.000000 -vt 0.894737 1.000000 -vt 0.894737 0.000000 -vt 0.842105 0.000000 -vt 0.421053 1.000000 -vt 0.421053 0.000000 -vt 0.947368 1.000000 -vt 0.947368 0.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 1.000000 0.500000 -vt 0.947368 0.500000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -vn 1.000000 0.000000 0.000000 -vn 0.000000 0.000000 1.000000 -vn -1.000000 0.000000 0.000000 -vn 0.000000 0.000000 -1.000000 -vn 0.000000 -1.000000 0.000000 -vn 0.000000 1.000000 0.000000 -usemtl None -s off -f 2/1/1 4/2/1 3/3/1 1/4/1 -f 4/5/2 8/1/2 7/4/2 3/6/2 -f 8/2/3 6/7/3 5/8/3 7/3/3 -f 6/9/4 2/5/4 1/6/4 5/10/4 -f 1/11/5 3/12/5 7/7/5 5/13/5 -f 6/14/6 8/8/6 4/12/6 2/11/6 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/door_b.obj b/mods/doors/models/door_b.obj deleted file mode 100644 index c5607b87..00000000 --- a/mods/doors/models/door_b.obj +++ /dev/null @@ -1,40 +0,0 @@ -# Blender v2.76 (sub 0) OBJ File: 'door_b.blend' -# www.blender.org -mtllib door_b.mtl -o Cube_Cube.001 -v -0.499000 -0.499000 -0.499000 -v -0.499000 1.499000 -0.499000 -v -0.499000 -0.499000 -0.375000 -v -0.499000 1.499000 -0.375000 -v 0.499000 -0.499000 -0.499000 -v 0.499000 1.499000 -0.499000 -v 0.499000 -0.499000 -0.375000 -v 0.499000 1.499000 -0.375000 -vt 0.842105 1.000000 -vt 0.842105 0.000000 -vt 0.894737 0.000000 -vt 0.894737 1.000000 -vt 0.421053 1.000000 -vt 0.421053 0.000000 -vt 0.947368 0.000000 -vt 0.947368 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 0.500000 -vt 0.947368 0.500000 -vt 1.000000 1.000000 -vn -1.000000 0.000000 0.000000 -vn 0.000000 0.000000 1.000000 -vn 1.000000 0.000000 0.000000 -vn 0.000000 0.000000 -1.000000 -vn 0.000000 -1.000000 0.000000 -vn 0.000000 1.000000 0.000000 -usemtl None -s off -f 2/1/1 1/2/1 3/3/1 4/4/1 -f 4/5/2 3/6/2 7/2/2 8/1/2 -f 8/4/3 7/3/3 5/7/3 6/8/3 -f 6/9/4 5/10/4 1/6/4 2/5/4 -f 1/11/5 5/12/5 7/13/5 3/7/5 -f 6/8/6 2/13/6 4/12/6 8/14/6 diff --git a/mods/doors/textures/doors_blank.png b/mods/doors/textures/doors_blank.png deleted file mode 100644 index 1914264c..00000000 Binary files a/mods/doors/textures/doors_blank.png and /dev/null differ diff --git a/mods/doors/textures/doors_door_glass.png b/mods/doors/textures/doors_door_glass.png index f597299b..ea6fdc1f 100644 Binary files a/mods/doors/textures/doors_door_glass.png 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 index 107a5a1a..fab25b34 100644 Binary files a/mods/doors/textures/doors_door_obsidian_glass.png 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 index f42f3350..9e33ff1a 100644 Binary files a/mods/doors/textures/doors_door_steel.png 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 index 7b18203e..c073faf1 100644 Binary files a/mods/doors/textures/doors_door_wood.png 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 index 791a58ab..fcdb153d 100644 Binary files a/mods/doors/textures/doors_item_glass.png 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 index 1026d437..5780ad8f 100644 Binary files a/mods/doors/textures/doors_item_obsidian_glass.png and b/mods/doors/textures/doors_item_obsidian_glass.png differ diff --git a/mods/doors/textures/doors_trapdoor_side.png b/mods/doors/textures/doors_trapdoor_side.png index c45d870d..55981ea3 100644 Binary files a/mods/doors/textures/doors_trapdoor_side.png and b/mods/doors/textures/doors_trapdoor_side.png differ diff --git a/mods/doors/textures/doors_trapdoor_steel_side.png b/mods/doors/textures/doors_trapdoor_steel_side.png index 44c4344b..e29c59e0 100644 Binary files a/mods/doors/textures/doors_trapdoor_steel_side.png 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 index b1035419..a2fbdd24 100644 --- a/mods/dye/README.txt +++ b/mods/dye/README.txt @@ -1,15 +1,13 @@ Minetest Game mod: dye ====================== - +See license.txt for license information. See init.lua for documentation. -License of source code and media files: ---------------------------------------- -Copyright (C) 2012 Perttu Ahola (celeron55) - -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://sam.zoy.org/wtfpl/COPYING for more details. +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 index d414d77c..f0affe8b 100644 --- a/mods/dye/init.lua +++ b/mods/dye/init.lua @@ -1,21 +1,21 @@ --- Other mods can use these for looping through available colors +-- dye/init.lua dye = {} -dye.basecolors = {"white", "grey", "black", "red", "yellow", "green", "cyan", "blue", "magenta"} -dye.excolors = {"white", "lightgrey", "grey", "darkgrey", "black", "red", "orange", "yellow", - "lime", "green", "aqua", "cyan", "sky_blue", "blue", "violet", "magenta", "red_violet"} + +-- 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"}, + {"dark_grey", "Dark Grey"}, {"black", "Black"}, {"violet", "Violet"}, {"blue", "Blue"}, {"cyan", "Cyan"}, - {"dark_green", "Dark green"}, + {"dark_green", "Dark Green"}, {"green", "Green"}, {"yellow", "Yellow"}, {"brown", "Brown"}, @@ -25,85 +25,103 @@ dye.dyes = { {"pink", "Pink"}, } --- This collection of colors is partly a historic thing, partly something else - -local dyes = { - {"white", "White dye", {dye=1, basecolor_white=1, excolor_white=1, unicolor_white=1}}, - {"grey", "Grey dye", {dye=1, basecolor_grey=1, excolor_grey=1, unicolor_grey=1}}, - {"dark_grey", "Dark grey dye", {dye=1, basecolor_grey=1, excolor_darkgrey=1, unicolor_darkgrey=1}}, - {"black", "Black dye", {dye=1, basecolor_black=1, excolor_black=1, unicolor_black=1}}, - {"violet", "Violet dye", {dye=1, basecolor_magenta=1, excolor_violet=1, unicolor_violet=1}}, - {"blue", "Blue dye", {dye=1, basecolor_blue=1, excolor_blue=1, unicolor_blue=1}}, - {"cyan", "Cyan dye", {dye=1, basecolor_cyan=1, excolor_cyan=1, unicolor_cyan=1}}, - {"dark_green", "Dark green dye", {dye=1, basecolor_green=1, excolor_green=1, unicolor_dark_green=1}}, - {"green", "Green dye", {dye=1, basecolor_green=1, excolor_green=1, unicolor_green=1}}, - {"yellow", "Yellow dye", {dye=1, basecolor_yellow=1, excolor_yellow=1, unicolor_yellow=1}}, - {"brown", "Brown dye", {dye=1, basecolor_brown=1, excolor_orange=1, unicolor_dark_orange=1}}, - {"orange", "Orange dye", {dye=1, basecolor_orange=1, excolor_orange=1, unicolor_orange=1}}, - {"red", "Red dye", {dye=1, basecolor_red=1, excolor_red=1, unicolor_red=1}}, - {"magenta", "Magenta dye", {dye=1, basecolor_magenta=1, excolor_red_violet=1, unicolor_red_violet=1}}, - {"pink", "Pink dye", {dye=1, basecolor_red=1, excolor_red=1, unicolor_light_red=1}}, -} - -- Define items -for _, row in ipairs(dyes) do +for _, row in ipairs(dye.dyes) do local name = row[1] local description = row[2] - local groups = row[3] - local item_name = "dye:" .. name - local item_image = "dye_" .. name .. ".png" - minetest.register_craftitem(item_name, { - inventory_image = item_image, - description = description, + 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({ - type = "shapeless", - output = item_name .. " 4", - recipe = {"group:flower,color_" .. name}, + output = "dye:" .. name .. " 4", + recipe = { + {"group:flower,color_" .. name} + }, }) end --- Manually add coal->black dye +-- Manually add coal -> black dye minetest.register_craft({ - type = "shapeless", output = "dye:black 4", - recipe = {"group:coal"}, + recipe = { + {"group:coal"} + }, +}) + +-- Manually add blueberries->violet dye + +minetest.register_craft({ + output = "dye:violet 2", + recipe = { + {"default:blueberries"} + }, }) -- Mix recipes --- Just mix everything to everything somehow sanely -local mixbases = {"pink", "magenta", "red", "orange", "brown", "yellow", "green", "dark_green", "cyan", "blue", "violet", "black", "dark_grey", "grey", "white"} - -local mixes = { - -- pink, magenta, red, orange, brown, yellow, green, dark_green, cyan, blue, violet, black, dark_grey, grey, white - white = {"pink", "pink", "pink", "orange", "orange", "yellow", "green", "green", "grey", "cyan", "violet","grey", "grey", "grey","white"}, - grey = {"pink", "pink", "pink", "orange", "orange", "yellow", "green", "green", "grey", "cyan", "violet","dark_grey","grey", "grey"}, - dark_grey = {"brown", "brown", "brown", "brown", "brown", "brown", "dark_green","dark_green","blue", "blue", "violet","black", "dark_grey"}, - black = {"black", "black", "black", "black", "black", "black", "black", "black", "black","black", "black", "black"}, - violet = {"magenta","magenta","magenta","red", "brown", "red", "cyan", "brown", "blue", "violet","violet"}, - blue = {"violet", "violet", "magenta","brown", "brown", "dark_green","cyan", "cyan", "cyan", "blue"}, - cyan = {"brown", "blue", "brown", "dark_green","dark_grey", "green", "cyan", "dark_green","cyan"}, - dark_green = {"brown", "brown", "brown", "brown", "brown", "green", "green", "dark_green"}, - green = {"yellow", "brown", "yellow", "yellow", "dark_green","green", "green"}, - yellow = {"orange", "red", "orange", "yellow", "orange", "yellow"}, - brown = {"brown", "brown", "brown", "orange", "brown"}, - orange = {"orange", "red", "orange", "orange"}, - red = {"pink", "magenta","red"}, - magenta = {"magenta","magenta"}, - pink = {"pink"}, +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 one, results in pairs(mixes) do - for i, result in ipairs(results) do - local another = mixbases[i] - minetest.register_craft({ - type = "shapeless", - output = 'dye:' .. result .. ' 2', - recipe = {'dye:' .. one, 'dye:' .. another}, - }) - end +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/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/farming b/mods/farming deleted file mode 160000 index de0e7dcc..00000000 --- a/mods/farming +++ /dev/null @@ -1 +0,0 @@ -Subproject commit de0e7dcc328df01e4934378efefb0cdd7a373e38 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 index 14022f03..25ba26ef 100644 --- a/mods/fire/README.txt +++ b/mods/fire/README.txt @@ -1,36 +1,35 @@ Minetest Game mod: fire ======================= +See license.txt for license information. -License of source code: ------------------------ -Copyright (C) 2012 Perttu Ahola (celeron55) +Authors of source code +---------------------- +Originally by Perttu Ahola (celeron55) (LGPLv2.1+) +Various Minetest developers and contributors (LGPLv2.1+) -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) +Authors of media (textures and sounds) -------------------------------------- -Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) -http://creativecommons.org/licenses/by-sa/3.0/ - -Authors of media files ------------------------ Everything not listed in here: -Copyright (C) 2012 Perttu Ahola (celeron55) +Copyright (C) 2012 Perttu Ahola (celeron55) (CC BY-SA 3.0) -fire_small.ogg sampled from: - http://www.freesound.org/people/dobroide/sounds/4211/ +Muadtralk (CC BY-SA 3.0) + fire_basic_flame_animated.png -fire_large.ogg sampled from: - http://www.freesound.org/people/Dynamicell/sounds/17548/ +Gambit (CC BY-SA 3.0) + fire_flint_steel.png -fire_basic_flame_animated.png: - Muadtralk +dobroide (CC BY 3.0) +http://www.freesound.org/people/dobroide/sounds/4211/ + fire_small.ogg -fire_flint_steel.png - Gambit (WTFPL) +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 old mode 100644 new mode 100755 index 6543ceef..3069aa80 --- a/mods/fire/init.lua +++ b/mods/fire/init.lua @@ -1,131 +1,126 @@ --- minetest/fire/init.lua +-- fire/init.lua -- Global namespace for functions - fire = {} +-- Load support for MT game translation. +local S = minetest.get_translator("fire") --- Register flame nodes +-- '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 -minetest.register_node("fire:basic_flame", { +-- +-- 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 - }, - }, + 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 = 14, + light_source = 13, walkable = false, buildable_to = true, sunlight_propagates = true, + floodable = true, damage_per_second = 4, - groups = {igniter = 2, dig_immediate = 3, not_in_creative_inventory = 1}, - on_timer = function(pos) - local f = minetest.find_node_near(pos, 1, {"group:flammable"}) - if not f then - minetest.remove_node(pos) - return - end - -- restart timer - return true - end, + groups = {igniter = 2, dig_immediate = 3, fire = 1}, drop = "", + on_flood = flood_flame +} - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(30, 60)) - minetest.after(0, fire.update_sounds_around, pos) - end, +-- 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 - on_destruct = function(pos) - minetest.after(0, fire.update_sounds_around, pos) - end, +minetest.register_node("fire:basic_flame", flame_fire_node) - on_blast = function() - end, -- unaffected by explosions -}) +-- Permanent flame node +local permanent_fire_node = table.copy(fire_node) +permanent_fire_node.description = S("Permanent Fire") -minetest.register_node("fire:permanent_flame", { - description = "Permanent Flame", - 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 = 14, - walkable = false, - buildable_to = true, - sunlight_propagates = true, - damage_per_second = 4, - groups = {igniter = 2, dig_immediate = 3}, - drop = "", - - on_blast = function() - end, -}) - - --- Flint and steel +minetest.register_node("fire:permanent_flame", permanent_fire_node) +-- Flint and Steel minetest.register_tool("fire:flint_and_steel", { - description = "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) - itemstack:add_wear(1000) - local pt = pointed_thing - if pt.type == "node" then - local node_under = minetest.get_node(pt.under).name - local is_coalblock = node_under == "default:coalblock" - local is_tnt = node_under == "tnt:tnt" - local is_gunpowder = node_under == "tnt:gunpowder" - if minetest.get_item_group(node_under, "flammable") >= 1 or - is_coalblock or is_tnt or is_gunpowder then - local flame_pos = pt.above - if is_coalblock then - flame_pos = {x = pt.under.x, y = pt.under.y + 1, z = pt.under.z} - elseif is_tnt or is_gunpowder then - flame_pos = pt.under - end - if minetest.get_node(flame_pos).name == "air" or - is_tnt or is_gunpowder then - local player_name = user:get_player_name() - if not minetest.is_protected(flame_pos, player_name) then - if is_coalblock then - minetest.set_node(flame_pos, - {name = "fire:permanent_flame"}) - elseif is_tnt then - minetest.set_node(flame_pos, - {name = "tnt:tnt_burning"}) - elseif is_gunpowder then - minetest.set_node(flame_pos, - {name = "tnt:gunpowder_burning"}) - else - minetest.set_node(flame_pos, - {name = "fire:basic_flame"}) - end - else - minetest.chat_send_player(player_name, "This area is protected") - end - end + 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.setting_getbool("creative_mode") then + 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 @@ -138,129 +133,139 @@ minetest.register_craft({ } }) - -- 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, oldnode) + 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 }) --- Get sound area of position +-- +-- Sound +-- -fire.D = 6 -- size of sound areas +-- Enable if no setting present +local flame_sound = minetest.settings:get_bool("flame_sound", true) -function fire.get_area_p0p1(pos) - local p0 = { - x = math.floor(pos.x / fire.D) * fire.D, - y = math.floor(pos.y / fire.D) * fire.D, - z = math.floor(pos.z / fire.D) * fire.D, - } - local p1 = { - x = p0.x + fire.D - 1, - y = p0.y + fire.D - 1, - z = p0.z + fire.D - 1 - } - return p0, p1 -end +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 --- Fire sounds table --- key: position hash of low corner of area --- value: {handle=sound handle, name=sound name} -fire.sounds = {} - - --- Update fire sounds in sound area of position - -function fire.update_sounds_around(pos) - local p0, p1 = fire.get_area_p0p1(pos) - local cp = {x = (p0.x + p1.x) / 2, y = (p0.y + p1.y) / 2, z = (p0.z + p1.z) / 2} - local flames_p = minetest.find_nodes_in_area(p0, p1, {"fire:basic_flame"}) - --print("number of flames at "..minetest.pos_to_string(p0).."/" - -- ..minetest.pos_to_string(p1)..": "..#flames_p) - local should_have_sound = (#flames_p > 0) - local wanted_sound = nil - if #flames_p >= 9 then - wanted_sound = {name = "fire_large", gain = 0.7} - elseif #flames_p > 0 then - wanted_sound = {name = "fire_small", gain = 0.9} - end - local p0_hash = minetest.hash_node_position(p0) - local sound = fire.sounds[p0_hash] - if not sound then - if should_have_sound then - fire.sounds[p0_hash] = { - handle = minetest.sound_play(wanted_sound, - {pos = cp, max_hear_distance = 16, loop = true}), - name = wanted_sound.name, - } + -- 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 - else - if not wanted_sound then - minetest.sound_stop(sound.handle) - fire.sounds[p0_hash] = nil - elseif sound.name ~= wanted_sound.name then - minetest.sound_stop(sound.handle) - fire.sounds[p0_hash] = { - handle = minetest.sound_play(wanted_sound, - {pos = cp, max_hear_distance = 16, loop = true}), - name = wanted_sound.name, - } + -- 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 --- Extinguish all flames quickly with water, snow, ice +-- Deprecated function kept temporarily to avoid crashes if mod fire nodes call it +function fire.update_sounds_around() end -minetest.register_abm({ - label = "Extinguish flame", - nodenames = {"fire:basic_flame", "fire:permanent_flame"}, - neighbors = {"group:puts_out_fire"}, - interval = 3, - chance = 1, - catch_up = false, - action = function(pos, node, active_object_count, active_object_count_wider) - minetest.remove_node(pos) - minetest.sound_play("fire_extinguish_flame", - {pos = pos, max_hear_distance = 16, gain = 0.25}) - end, -}) - - --- Enable the following ABMs according to 'enable fire' setting - -local fire_enabled = minetest.setting_getbool("enable_fire") -if fire_enabled == nil then - -- New setting not specified, check for old setting. - -- If old setting is also not specified, 'not nil' is true. - fire_enabled = not minetest.setting_getbool("disable_fire") -end - -if not fire_enabled then - - -- Remove basic flames only - - minetest.register_abm({ - label = "Remove disabled fire", - nodenames = {"fire:basic_flame"}, - interval = 7, - chance = 1, - catch_up = false, - action = minetest.remove_node, - }) - -else -- Fire enabled +-- +-- ABMs +-- +if fire_enabled then -- Ignite neighboring nodes, add basic flames - minetest.register_abm({ label = "Ignite flame", nodenames = {"group:flammable"}, @@ -268,20 +273,15 @@ else -- Fire enabled interval = 7, chance = 12, catch_up = false, - action = function(pos, node, active_object_count, active_object_count_wider) - -- If there is water or stuff like that around node, don't ignite - if minetest.find_node_near(pos, 1, {"group:puts_out_fire"}) then - return - end + 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, + end }) - -- Remove flammable nodes - + -- Remove flammable nodes around basic flame minetest.register_abm({ label = "Remove flammable nodes", nodenames = {"fire:basic_flame"}, @@ -289,52 +289,19 @@ else -- Fire enabled interval = 5, chance = 18, catch_up = false, - action = function(pos, node, active_object_count, active_object_count_wider) + action = function(pos) local p = minetest.find_node_near(pos, 1, {"group:flammable"}) - if p then - -- remove flammable nodes around flame - 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) - nodeupdate(p) - end - end - end, - }) - -end - - --- Rarely ignite things from far - ---[[ Currently disabled to reduce the chance of uncontrollable spreading - fires that disrupt servers. Also for less lua processing load. - -minetest.register_abm({ - nodenames = {"group:igniter"}, - neighbors = {"air"}, - interval = 5, - chance = 10, - action = function(pos, node, active_object_count, active_object_count_wider) - local reg = minetest.registered_nodes[node.name] - if not reg or not reg.groups.igniter or reg.groups.igniter < 2 then - return - end - local d = reg.groups.igniter - local p = minetest.find_node_near(pos, d, {"group:flammable"}) - if p then - -- If there is water or stuff like that around flame, don't ignite - if fire.flame_should_extinguish(p) then + if not p then return end - local p2 = fire.find_pos_for_flame_around(p) - if p2 then - minetest.set_node(p2, {name = "fire:basic_flame"}) + 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, -}) ---]] + }) +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_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/textures/fire_basic_flame.png b/mods/fire/textures/fire_basic_flame.png index 1da0702d..484bcb19 100644 Binary files a/mods/fire/textures/fire_basic_flame.png 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 index 1cdd9fdb..b01f7036 100644 Binary files a/mods/fire/textures/fire_basic_flame_animated.png 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 index 624f5565..9d32d85b 100644 Binary files a/mods/fire/textures/fire_flint_steel.png 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 index ebd4a21f..4b3149c4 100644 --- a/mods/flowers/README.txt +++ b/mods/flowers/README.txt @@ -1,23 +1,30 @@ Minetest Game mod: flowers ========================== +See license.txt for license information. -License of source code: ------------------------ -Copyright (C) 2012-2013 Ironzorg, VanessaE +Authors of source code +---------------------- +Originally by Ironzorg (MIT) and VanessaE (MIT) +Various Minetest developers and contributors (MIT) -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://sam.zoy.org/wtfpl/COPYING for more details. +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 -License of media (textures and sounds) --------------------------------------- -WTFPL +Gambit (CC BY-SA 3.0): + flowers_mushroom_brown.png + flowers_mushroom_red.png + flowers_waterlily.png -Gambit (WTFPL): - flowers_mushroom_*.png - flowers_waterlily.png +yyt16384 (CC BY-SA 3.0): + flowers_waterlily_bottom.png -- Derived from Gambit's texture -DanDuncombe (WTFPL): - flowers_spores_*.png +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/depends.txt b/mods/flowers/depends.txt deleted file mode 100644 index 4ad96d51..00000000 --- a/mods/flowers/depends.txt +++ /dev/null @@ -1 +0,0 @@ -default diff --git a/mods/flowers/init.lua b/mods/flowers/init.lua index c60d0897..b551e65c 100644 --- a/mods/flowers/init.lua +++ b/mods/flowers/init.lua @@ -1,3 +1,5 @@ +-- flowers/init.lua + -- Minetest 0.4 mod: default -- See README.txt for licensing and other information. @@ -6,6 +8,9 @@ flowers = {} +-- Load support for MT game translation. +local S = minetest.get_translator("flowers") + -- Map Generation @@ -46,7 +51,6 @@ local function add_simple_flower(name, desc, box, f_groups) paramtype = "light", walkable = false, buildable_to = true, - stack_max = 99, groups = f_groups, sounds = default.node_sound_leaves_defaults(), selection_box = { @@ -57,12 +61,54 @@ local function add_simple_flower(name, desc, box, f_groups) end flowers.datas = { - {"rose", "Rose", {-0.15, -0.5, -0.15, 0.15, 0.3, 0.15}, {color_red = 1}}, - {"tulip", "Orange Tulip", {-0.15, -0.5, -0.15, 0.15, 0.2, 0.15}, {color_orange = 1}}, - {"dandelion_yellow", "Yellow Dandelion", {-0.15, -0.5, -0.15, 0.15, 0.2, 0.15}, {color_yellow = 1}}, - {"geranium", "Blue Geranium", {-0.15, -0.5, -0.15, 0.15, 0.2, 0.15}, {color_blue = 1}}, - {"viola", "Viola", {-0.5, -0.5, -0.5, 0.5, -0.2, 0.5}, {color_violet = 1}}, - {"dandelion_white", "White dandelion", {-0.5, -0.5, -0.5, 0.5, -0.2, 0.5}, {color_white = 1}} + { + "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 @@ -77,11 +123,16 @@ function flowers.flower_spread(pos, node) pos.y = pos.y - 1 local under = minetest.get_node(pos) pos.y = pos.y + 1 - if under.name == "default:desert_sand" then + -- 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 - elseif under.name ~= "default:dirt_with_grass" and - under.name ~= "default:dirt_with_dry_grass" then + end + + if minetest.get_item_group(under.name, "soil") == 0 then return end @@ -92,30 +143,37 @@ function flowers.flower_spread(pos, node) 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 seedling = minetest.find_nodes_in_area_under_air(pos0, pos1, - {"default:dirt_with_grass", "default:dirt_with_dry_grass"}) - if #seedling > 0 then - seedling = seedling[math.random(#seedling)] - seedling.y = seedling.y + 1 - light = minetest.get_node_light(seedling) - if not light or light < 13 then - return + 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 - minetest.set_node(seedling, {name = node.name}) end end minetest.register_abm({ label = "Flower spread", nodenames = {"group:flora"}, - neighbors = {"default:dirt_with_grass", "default:dirt_with_dry_grass", - "default:desert_sand"}, interval = 13, - chance = 96, + chance = 300, action = function(...) flowers.flower_spread(...) end, @@ -127,7 +185,7 @@ minetest.register_abm({ -- minetest.register_node("flowers:mushroom_red", { - description = "Red Mushroom", + description = S("Red Mushroom"), tiles = {"flowers_mushroom_red.png"}, inventory_image = "flowers_mushroom_red.png", wield_image = "flowers_mushroom_red.png", @@ -136,17 +194,17 @@ minetest.register_node("flowers:mushroom_red", { sunlight_propagates = true, walkable = false, buildable_to = true, - groups = {snappy = 3, attached_node = 1, mushroom = 1}, + 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 = {-0.3, -0.5, -0.3, 0.3, 0, 0.3} + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, -1 / 16, 4 / 16}, } }) minetest.register_node("flowers:mushroom_brown", { - description = "Brown Mushroom", + description = S("Brown Mushroom"), tiles = {"flowers_mushroom_brown.png"}, inventory_image = "flowers_mushroom_brown.png", wield_image = "flowers_mushroom_brown.png", @@ -155,50 +213,47 @@ minetest.register_node("flowers:mushroom_brown", { sunlight_propagates = true, walkable = false, buildable_to = true, - groups = {snappy = 3, attached_node = 1, mushroom = 1}, + 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 = {-0.3, -0.5, -0.3, 0.3, 0, 0.3} + fixed = {-3 / 16, -0.5, -3 / 16, 3 / 16, -2 / 16, 3 / 16}, } }) -- Mushroom spread and death -minetest.register_abm({ - label = "Mushroom spread", - nodenames = {"flowers:mushroom_brown", "flowers:mushroom_red"}, - interval = 11, - chance = 50, - action = function(pos, node) +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) - return - end - local random = { - x = pos.x + math.random(-2, 2), - y = pos.y + math.random(-1, 1), - z = pos.z + math.random(-2, 2) - } - local random_node = minetest.get_node_or_nil(random) - if not random_node or random_node.name ~= "air" then - return - end - local node_under = minetest.get_node_or_nil({x = random.x, - y = random.y - 1, z = random.z}) - if not node_under then - return - end - - if (minetest.get_item_group(node_under.name, "soil") ~= 0 or - minetest.get_item_group(node_under.name, "tree") ~= 0) and - minetest.get_node_light(pos, 0.5) <= 3 and - minetest.get_node_light(random, 0.5) <= 3 then - minetest.set_node(random, {name = node.name}) 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, }) @@ -216,43 +271,49 @@ minetest.register_alias("mushroom:red_natural", "flowers:mushroom_red") -- Waterlily -- -minetest.register_node("flowers:waterlily", { - description = "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, - sunlight_propagates = true, floodable = true, - groups = {snappy = 3, flower = 1}, + groups = {snappy = 3, flower = 1, flammable = 1}, sounds = default.node_sound_leaves_defaults(), node_placement_prediction = "", node_box = { type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -0.46875, 0.5} + fixed = {-0.5, -31 / 64, -0.5, 0.5, -15 / 32, 0.5} }, selection_box = { type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5} + 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).name - local def = minetest.registered_nodes[node] - local player_name = placer:get_player_name() + 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, "water") > 0 then + 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", + minetest.set_node(pos, {name = "flowers:waterlily" .. + (def.waving == 3 and "_waving" or ""), param2 = math.random(0, 3)}) - if not minetest.setting_getbool("creative_mode") then + if not minetest.is_creative_enabled(player_name) then itemstack:take_item() end else @@ -262,4 +323,13 @@ minetest.register_node("flowers:waterlily", { 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 index 162b11db..8735968d 100644 --- a/mods/flowers/mapgen.lua +++ b/mods/flowers/mapgen.lua @@ -2,8 +2,9 @@ -- Mgv6 -- -local function register_mgv6_flower(name) +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, @@ -15,14 +16,15 @@ local function register_mgv6_flower(name) octaves = 3, persist = 0.6 }, - y_min = 1, y_max = 30, - decoration = "flowers:"..name, + y_min = 1, + decoration = "flowers:"..flower_name, }) end -local function register_mgv6_mushroom(name) +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, @@ -34,9 +36,9 @@ local function register_mgv6_mushroom(name) octaves = 3, persist = 0.6 }, - y_min = 1, y_max = 30, - decoration = "flowers:"..name, + y_min = 1, + decoration = "flowers:"..mushroom_name, spawn_by = "default:tree", num_spawn_by = 1, }) @@ -44,7 +46,8 @@ end local function register_mgv6_waterlily() minetest.register_decoration({ - deco_type = "schematic", + name = "flowers:waterlily", + deco_type = "simple", place_on = {"default:dirt"}, sidelen = 16, noise_params = { @@ -55,10 +58,12 @@ local function register_mgv6_waterlily() octaves = 3, persist = 0.7 }, - y_min = 0, y_max = 0, - schematic = minetest.get_modpath("flowers").."/schematics/waterlily.mts", - rotation = "random", + y_min = 0, + decoration = "flowers:waterlily_waving", + param2 = 0, + param2_max = 3, + place_offset_y = 1, }) end @@ -76,55 +81,57 @@ function flowers.register_mgv6_decorations() 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, name) +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.015, - scale = 0.025, + offset = -0.02, + scale = 0.04, spread = {x = 200, y = 200, z = 200}, seed = seed, octaves = 3, persist = 0.6 }, - biomes = {"stone_grassland", "sandstone_grassland", - "deciduous_forest", "coniferous_forest"}, - y_min = 1, + biomes = {"grassland", "deciduous_forest"}, y_max = 31000, - decoration = "flowers:"..name, + y_min = 1, + decoration = "flowers:"..flower_name, }) end -local function register_mushroom(name) +local function register_mushroom(mushroom_name) minetest.register_decoration({ + name = "flowers:"..mushroom_name, deco_type = "simple", - place_on = {"default:dirt_with_grass"}, + place_on = {"default:dirt_with_grass", "default:dirt_with_coniferous_litter"}, sidelen = 16, noise_params = { offset = 0, scale = 0.006, - spread = {x = 200, y = 200, z = 200}, + spread = {x = 250, y = 250, z = 250}, seed = 2, octaves = 3, persist = 0.66 }, biomes = {"deciduous_forest", "coniferous_forest"}, - y_min = 1, y_max = 31000, - decoration = "flowers:"..name, + y_min = 1, + decoration = "flowers:"..mushroom_name, }) end local function register_waterlily() minetest.register_decoration({ - deco_type = "schematic", + name = "default:waterlily", + deco_type = "simple", place_on = {"default:dirt"}, sidelen = 16, noise_params = { @@ -135,11 +142,13 @@ local function register_waterlily() octaves = 3, persist = 0.7 }, - biomes = {"rainforest_swamp", "savanna_swamp", "deciduous_forest_swamp"}, - y_min = 0, + biomes = {"rainforest_swamp", "savanna_shore", "deciduous_forest_shore"}, y_max = 0, - schematic = minetest.get_modpath("flowers").."/schematics/waterlily.mts", - rotation = "random", + y_min = 0, + decoration = "flowers:waterlily_waving", + param2 = 0, + param2_max = 3, + place_offset_y = 1, }) end @@ -147,9 +156,11 @@ 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") @@ -157,17 +168,14 @@ function flowers.register_decorations() register_waterlily() end - --- +--]] -- Detect mapgen to select functions -- --- Mods using singlenode mapgen can call these functions to enable --- the use of minetest.generate_ores or minetest.generate_decorations - local mg_name = minetest.get_mapgen_setting("mg_name") if mg_name == "v6" then flowers.register_mgv6_decorations() -elseif mg_name ~= "singlenode" then - flowers.register_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/schematics/waterlily.mts b/mods/flowers/schematics/waterlily.mts deleted file mode 100644 index 876310cc..00000000 Binary files a/mods/flowers/schematics/waterlily.mts and /dev/null differ 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_yellow.png b/mods/flowers/textures/flowers_dandelion_yellow.png index ec11c1c8..544f60c1 100644 Binary files a/mods/flowers/textures/flowers_dandelion_yellow.png and b/mods/flowers/textures/flowers_dandelion_yellow.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_waterlily.png b/mods/flowers/textures/flowers_waterlily.png index a92d3b9f..973e5113 100644 Binary files a/mods/flowers/textures/flowers_waterlily.png and b/mods/flowers/textures/flowers_waterlily.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/depends.txt b/mods/give_initial_stuff/depends.txt deleted file mode 100644 index d8a81cff..00000000 --- a/mods/give_initial_stuff/depends.txt +++ /dev/null @@ -1,5 +0,0 @@ -default -bows -xdecor -3d_armor -shields diff --git a/mods/give_initial_stuff/init.lua b/mods/give_initial_stuff/init.lua index 4ad7a1bb..af018c32 100644 --- a/mods/give_initial_stuff/init.lua +++ b/mods/give_initial_stuff/init.lua @@ -1,21 +1,45 @@ -minetest.register_on_newplayer(function(player) - --print("on_newplayer") - if minetest.setting_getbool("give_initial_stuff") then - minetest.log("action", "Giving initial stuff to player "..player:get_player_name()) - player:get_inventory():add_item('main', 'default:pick_steel') - player:get_inventory():add_item('main', 'default:axe_steel') - player:get_inventory():add_item('main', 'default:torch 99') - player:get_inventory():add_item('main', 'default:chest_locked 1') - player:get_inventory():add_item('main', 'xdecor:crafting_guide 1') - player:get_inventory():add_item('main', '') - player:get_inventory():add_item('main', 'bows:bow_wood') - player:get_inventory():add_item('main', 'bows:arrow 26') - player:get_inventory():add_item('main', '3d_armor:helmet_steel') - player:get_inventory():add_item('main', '3d_armor:chestplate_steel') - player:get_inventory():add_item('main', '3d_armor:leggings_steel') - player:get_inventory():add_item('main', '3d_armor:boots_steel') - player:get_inventory():add_item('main', 'shields:shield_wood') - +-- gave_initial_stuff/init.lua - end -end) +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/hemp b/mods/hemp deleted file mode 160000 index bb111244..00000000 --- a/mods/hemp +++ /dev/null @@ -1 +0,0 @@ -Subproject commit bb1112449e8462e386b0bf0b6c1481b0b6e7d2ca 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/horses b/mods/horses deleted file mode 160000 index a72192db..00000000 --- a/mods/horses +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a72192db523658fbff02416f5c927e83c11fd71a diff --git a/mods/hudbars b/mods/hudbars index 29cf605e..812b2538 160000 --- a/mods/hudbars +++ b/mods/hudbars @@ -1 +1 @@ -Subproject commit 29cf605e066240a7a83be6a54f9446d43b9e2672 +Subproject commit 812b2538ff0198c5c7b3707a80b3ebfa6b34f460 diff --git a/mods/illuna b/mods/illuna index 60fe9391..15648494 160000 --- a/mods/illuna +++ b/mods/illuna @@ -1 +1 @@ -Subproject commit 60fe9391c2f7eb5970bc5640a62ddfd69e0283f3 +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/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 index 11b16633..f34b5215 160000 --- a/mods/mobs_animal +++ b/mods/mobs_animal @@ -1 +1 @@ -Subproject commit 11b16633e54637b86ba44c442f2568ae2cf1e28e +Subproject commit f34b5215faf488128d8207b4878a4086778cafcd diff --git a/mods/mobs_monster b/mods/mobs_monster index 6b7c5ea9..74c05ed8 160000 --- a/mods/mobs_monster +++ b/mods/mobs_monster @@ -1 +1 @@ -Subproject commit 6b7c5ea990999de385a9e9eda8cc08f1ce12c00e +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 index 2aa6227f..e1194a98 160000 --- a/mods/mobs_redo +++ b/mods/mobs_redo @@ -1 +1 @@ -Subproject commit 2aa6227f0a03d20a6c4733f74c46612bd33e0be1 +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 index 2e7de71d..fadc1d23 100644 --- a/mods/nyancat/README.txt +++ b/mods/nyancat/README.txt @@ -1,28 +1,15 @@ Minetest Game mod: nyancat ========================== +See license.txt for license information. -License of source code: ------------------------ -Copyright (C) 2011-2012 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/ +Authors of source code +---------------------- +Originally by celeron55, Perttu Ahola (LGPL 2.1) +Various Minetest developers and contributors (LGPL 2.1) Authors of media files ------------------------ -Everything not listed in here: -Copyright (C) 2010-2012 celeron55, Perttu Ahola - -VanessaE (WTFPL): +---------------------- +VanessaE (CC BY-SA 3.0): nyancat_front.png nyancat_back.png nyancat_side.png diff --git a/mods/nyancat/init.lua b/mods/nyancat/init.lua index 2e64bc12..2feaa9e5 100644 --- a/mods/nyancat/init.lua +++ b/mods/nyancat/init.lua @@ -2,6 +2,8 @@ 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, @@ -16,6 +18,8 @@ minetest.register_node("nyancat:nyancat_rainbow", { "nyancat_rainbow.png^[transformR90", "nyancat_rainbow.png" }, + paramtype = "light", + light_source = default.LIGHT_MAX, paramtype2 = "facedir", groups = {cracky = 2}, is_ground_content = false, 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/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/bones/depends.txt b/mods/pbj_pup/depends.txt similarity index 100% rename from mods/bones/depends.txt rename to mods/pbj_pup/depends.txt 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 index 80f9ea5c..9569c96f 160000 --- a/mods/pkarcs +++ b/mods/pkarcs @@ -1 +1 @@ -Subproject commit 80f9ea5c64d547b15978edcd09743a866d8fbf0c +Subproject commit 9569c96f4c9b45190fa723abf63f524c48e75eba diff --git a/mods/plantlife_modpack b/mods/plantlife_modpack deleted file mode 160000 index e882ed34..00000000 --- a/mods/plantlife_modpack +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e882ed349125a7e6072d158a9b457510fddaa2ac 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/default/models/character.png b/mods/player_api/models/character.png similarity index 100% rename from mods/default/models/character.png rename to mods/player_api/models/character.png diff --git a/mods/default/textures/player.png b/mods/player_api/textures/player.png similarity index 100% rename from mods/default/textures/player.png rename to mods/player_api/textures/player.png diff --git a/mods/default/textures/player_back.png b/mods/player_api/textures/player_back.png similarity index 100% rename from mods/default/textures/player_back.png rename to mods/player_api/textures/player_back.png 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/init.lua b/mods/random_messages/init.lua index 056e9e00..ad7b9a37 100644 --- a/mods/random_messages/init.lua +++ b/mods/random_messages/init.lua @@ -27,7 +27,7 @@ function table.random( t ) end function random_messages.initialize() --Set the interval in minetest.conf. - minetest.setting_set("random_messages_interval",1800) + minetest.setting_set("random_messages_interval",7200) minetest.setting_save(); return 1800 end @@ -46,12 +46,26 @@ function random_messages.check_params(name,func,params) 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 = { - "# Illuna-Notes: Soup is very useful to fight hunger, everyone should have some.", - "# Illuna-Notes: Meet your fellows on our Mumbleserver at tchncs.de", - "# Illuna-Notes: Enjoy Illuna? Invite your friends today!", - "# Illuna-Notes: Have something to share? Create and join discussion at the Illuna forum: https://forum.illuna-minetest.tk!", - "# Illuna-Notes: Sell and buy stuff on the Illuna marketplace. It is below the spawnhouse." + --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 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 index e73b618f..8990d346 100644 --- a/mods/screwdriver/init.lua +++ b/mods/screwdriver/init.lua @@ -1,12 +1,10 @@ +-- screwdriver/init.lua + screwdriver = {} -local function nextrange(x, max) - x = x + 1 - if x > max then - x = 0 - end - return x -end +-- Load support for MT game translation. +local S = minetest.get_translator("screwdriver") + screwdriver.ROTATE_FACE = 1 screwdriver.ROTATE_AXIS = 2 @@ -19,6 +17,73 @@ screwdriver.rotate_simple = function(pos, node, user, mode, new_param2) 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 @@ -26,72 +91,67 @@ screwdriver.handler = function(itemstack, user, pointed_thing, mode, uses) end local pos = pointed_thing.under + local player_name = user and user:get_player_name() or "" - if minetest.is_protected(pos, user:get_player_name()) then - minetest.record_protection_violation(pos, user:get_player_name()) + 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] - -- verify node is facedir (expected to be rotatable) - if not ndef or ndef.paramtype2 ~= "facedir" then - return + if not ndef then + return itemstack end - -- Compute param2 - local rotationPart = node.param2 % 32 -- get first 4 bits - local preservePart = node.param2 - rotationPart - local axisdir = math.floor(rotationPart / 4) - local rotation = rotationPart - axisdir * 4 - if mode == screwdriver.ROTATE_FACE then - rotationPart = axisdir * 4 + nextrange(rotation, 3) - elseif mode == screwdriver.ROTATE_AXIS then - rotationPart = nextrange(axisdir, 5) * 4 + -- can we rotate this paramtype2? + local fn = screwdriver.rotate[ndef.paramtype2] + if not fn and not ndef.on_rotate then + return itemstack end - local new_param2 = preservePart + rotationPart local should_rotate = true + local new_param2 + if fn then + new_param2 = fn(pos, node, mode) + else + new_param2 = node.param2 + end - if ndef and ndef.on_rotate then -- Node provides a handler, so let the handler decide instead if the node can be rotated + -- 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 + return itemstack elseif result == true then should_rotate = false end - else - if not ndef or not ndef.paramtype2 == "facedir" or - ndef.on_rotate == false or - (ndef.drawtype == "nodebox" and - not ndef.node_box.type == "fixed") or - node.param2 == nil then - return - end - - if ndef.can_dig and not ndef.can_dig(pos, user) then - return - 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 then + 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.setting_getbool("creative_mode") then - itemstack:add_wear(65535 / ((uses or 200) - 1)) + if not minetest.is_creative_enabled(player_name) then + itemstack:add_wear_by_uses(uses or 200) end return itemstack end --- Screwdriver +-- Screwdriver Steel minetest.register_tool("screwdriver:screwdriver", { - description = "Screwdriver (left-click rotates face, right-click rotates axis)", + 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 @@ -102,6 +162,33 @@ minetest.register_tool("screwdriver:screwdriver", { 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", @@ -111,6 +198,25 @@ minetest.register_craft({ } }) +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") 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/readme.txt b/mods/screwdriver/readme.txt deleted file mode 100644 index bdf109b8..00000000 --- a/mods/screwdriver/readme.txt +++ /dev/null @@ -1,21 +0,0 @@ -Minetest Game mod: screwdriver -============================== - -License of source code: ------------------------ -Copyright (C) 2013 RealBadAngel, Maciej Kasatkin - -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 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/ - -Created by Gambit (WTFPL): - screwdriver.png 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 index 4246f7a5..9fc8e6ac 100644 --- a/mods/sethome/init.lua +++ b/mods/sethome/init.lua @@ -1,13 +1,18 @@ +-- 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, err = io.open(homes_file, "r") + local input = io.open(homes_file, "r") if not input then - return minetest.log("info", "Could not load player homes file: " .. err) + return -- no longer an error end -- Iterate over all stored positions in the format "x y z player" for each line @@ -24,11 +29,17 @@ sethome.set = function(name, pos) 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, err = io.open(homes_file, "w") + local output = io.open(homes_file, "w") if output then - homepos[name] = pos + 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 @@ -36,45 +47,61 @@ sethome.set = function(name, pos) io.close(output) return true end - minetest.log("action", "Unable to write to player homes file: " .. err) - return false + return true -- if the file doesn't exist - don't return an error. end sethome.get = function(name) - return homepos[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 homepos[name] then - player:setpos(homepos[name]) + if player and pos then + player:set_pos(pos) return true end return false end -minetest.register_privilege("home", "Can use /sethome and /home") +minetest.register_privilege("home", { + description = S("Can use /sethome and /home"), + give_to_singleplayer = false +}) minetest.register_chatcommand("home", { - description = "Teleport you to your home point", + description = S("Teleport you to your home point"), privs = {home = true}, func = function(name) if sethome.go(name) then - return true, "Teleported to home!" + return true, S("Teleported to home!") end - return false, "Set a home using /sethome" + return false, S("Set a home using /sethome") end, }) minetest.register_chatcommand("sethome", { - description = "Set your home point", + 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:getpos()) then - return true, "Home set!" + if player and sethome.set(name, player:get_pos()) then + return true, S("Home set!") end - return false, "Player not found!" + 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/creative/depends.txt b/mods/smartshop/depends.txt similarity index 100% rename from mods/creative/depends.txt rename to mods/smartshop/depends.txt 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 index 9bd0b213..26317f7f 100644 --- a/mods/stairs/README.txt +++ b/mods/stairs/README.txt @@ -1,26 +1,27 @@ Minetest Game mod: stairs ========================= +See license.txt for license information. -License of source code: ------------------------ -Copyright (C) 2011-2012 Kahrl -Copyright (C) 2011-2012 celeron55, Perttu Ahola +Authors of source code +---------------------- +Originally by Kahrl (LGPLv2.1+) and +celeron55, Perttu Ahola (LGPLv2.1+) +Various Minetest developers and contributors (LGPLv2.1+) -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 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/ - -Authors of media files ------------------------ -Everything not listed in here: -Copyright (C) 2010-2012 celeron55, Perttu Ahola +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/depends.txt b/mods/stairs/depends.txt deleted file mode 100644 index d77ba253..00000000 --- a/mods/stairs/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -default -farming diff --git a/mods/stairs/init.lua b/mods/stairs/init.lua index 38640778..bb307f6e 100644 --- a/mods/stairs/init.lua +++ b/mods/stairs/init.lua @@ -1,3 +1,5 @@ +-- stairs/init.lua + -- Minetest 0.4 mod: stairs -- See README.txt for licensing and other information. @@ -6,6 +8,11 @@ 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 @@ -18,36 +25,107 @@ minetest.register_alias("moretrees:slab_acacia_planks", "stairs:slab_acacia_wood -- Get setting for replace ABM -local replace = minetest.setting_getbool("enable_stairs_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 --- Register stairs. + 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) - groups.stair = 1 +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 = "mesh", - mesh = "stairs_stair.obj", - tiles = images, + 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 = groups, + groups = new_groups, sounds = sounds, - selection_box = { + node_box = { type = "fixed", fixed = { - {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, - {-0.5, 0, 0, 0.5, 0.5, 0.5}, - }, - }, - collision_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, - {-0.5, 0, 0, 0.5, 0.5, 0.5}, + {-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) @@ -55,30 +133,7 @@ function stairs.register_stair(subname, recipeitem, groups, images, description, return itemstack end - local p0 = pointed_thing.under - local p1 = pointed_thing.above - local param2 = 0 - - local placer_pos = placer:getpos() - if placer_pos then - local dir = { - x = p1.x - placer_pos.x, - y = p1.y - placer_pos.y, - z = p1.z - placer_pos.z - } - param2 = minetest.dir_to_facedir(dir) - end - - if p0.y - 1 == p1.y then - param2 = param2 + 20 - if param2 == 21 then - param2 = 23 - elseif param2 == 23 then - param2 = 21 - end - end - - return minetest.item_place(itemstack, placer, pointed_thing, param2) + return rotate_and_place(itemstack, placer, pointed_thing) end, }) @@ -91,127 +146,114 @@ function stairs.register_stair(subname, recipeitem, groups, images, description, end if recipeitem then + -- Recipe matches appearence in inventory minetest.register_craft({ - output = 'stairs:stair_' .. subname .. ' 8', - recipe = { - {recipeitem, "", ""}, - {recipeitem, recipeitem, ""}, - {recipeitem, recipeitem, recipeitem}, - }, - }) - - -- Flipped recipe for the silly minecrafters - minetest.register_craft({ - output = 'stairs:stair_' .. subname .. ' 8', + 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 slabs. +-- Register slab -- Node will be called stairs:slab_ -function stairs.register_slab(subname, recipeitem, groups, images, description, sounds) - groups.slab = 1 +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 = images, + tiles = slab_images, + use_texture_alpha = texture_alpha, + sunlight_propagates = sunlight, + light_source = light_source, paramtype = "light", paramtype2 = "facedir", is_ground_content = false, - groups = groups, + 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) - if pointed_thing.type ~= "node" then - return itemstack - end + 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 it's being placed on an another similar one, replace it with - -- a full block - local slabpos = nil - local slabnode = nil - local p0 = pointed_thing.under - local p1 = pointed_thing.above - local n0 = minetest.get_node(p0) - local n1 = minetest.get_node(p1) - local param2 = 0 + 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 n0_is_upside_down = (n0.name == "stairs:slab_" .. subname and - n0.param2 >= 20) + local p2 = under.param2 - if n0.name == "stairs:slab_" .. subname and not n0_is_upside_down and - p0.y + 1 == p1.y then - slabpos = p0 - slabnode = n0 - elseif n1.name == "stairs:slab_" .. subname then - slabpos = p1 - slabnode = n1 - end - if slabpos then - -- Remove the slab at slabpos - minetest.remove_node(slabpos) - -- Make a fake stack of a single item and try to place it - local fakestack = ItemStack(recipeitem) - fakestack:set_count(itemstack:get_count()) - - pointed_thing.above = slabpos - local success - fakestack, success = minetest.item_place(fakestack, placer, - pointed_thing) - -- If the item was taken from the fake stack, decrement original - if success then - itemstack:set_count(fakestack:get_count()) - -- Else put old node back - else - minetest.set_node(slabpos, slabnode) - end - return itemstack - end - - -- Upside down slabs - if p0.y - 1 == p1.y then - -- Turn into full block if pointing at a existing slab - if n0_is_upside_down then - -- Remove the slab at the position of the slab - minetest.remove_node(p0) - -- Make a fake stack of a single item and try to place it - local fakestack = ItemStack(recipeitem) - fakestack:set_count(itemstack:get_count()) - - pointed_thing.above = p0 - local success - fakestack, success = minetest.item_place(fakestack, placer, - pointed_thing) - -- If the item was taken from the fake stack, decrement original - if success then - itemstack:set_count(fakestack:get_count()) - -- Else put old node back - else - minetest.set_node(p0, n0) - end - return itemstack + -- 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 - -- Place upside down slab - param2 = 20 + -- 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 - - -- If pointing at the side of a upside down slab - if n0_is_upside_down and p0.y + 1 ~= p1.y then - param2 = 20 - end - - return minetest.item_place(itemstack, placer, pointed_thing, param2) end, }) @@ -225,11 +267,34 @@ function stairs.register_slab(subname, recipeitem, groups, images, description, if recipeitem then minetest.register_craft({ - output = 'stairs:slab_' .. subname .. ' 6', + 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 @@ -257,274 +322,832 @@ if replace then 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) - stairs.register_stair(subname, recipeitem, groups, images, desc_stair, sounds) - stairs.register_slab(subname, recipeitem, groups, images, desc_slab, sounds) +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 -stairs.register_stair_and_slab( +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() + default.node_sound_wood_defaults(), + false ) -stairs.register_stair_and_slab( +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() + default.node_sound_wood_defaults(), + false ) -stairs.register_stair_and_slab( +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() + default.node_sound_wood_defaults(), + false ) -stairs.register_stair_and_slab( +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() + default.node_sound_wood_defaults(), + false ) -stairs.register_stair_and_slab( +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() + default.node_sound_wood_defaults(), + false ) -stairs.register_stair_and_slab( +my_register_stair_and_slab( "stone", "default:stone", {cracky = 3}, {"default_stone.png"}, "Stone Stair", "Stone Slab", - default.node_sound_stone_defaults() + default.node_sound_stone_defaults(), + true ) -stairs.register_stair_and_slab( +my_register_stair_and_slab( "cobble", "default:cobble", {cracky = 3}, {"default_cobble.png"}, "Cobblestone Stair", "Cobblestone Slab", - default.node_sound_stone_defaults() + default.node_sound_stone_defaults(), + true ) -stairs.register_stair_and_slab( +my_register_stair_and_slab( "mossycobble", - nil, + "default:mossycobble", {cracky = 3}, {"default_mossycobble.png"}, "Mossy Cobblestone Stair", "Mossy Cobblestone Slab", - default.node_sound_stone_defaults() + default.node_sound_stone_defaults(), + true ) -stairs.register_stair_and_slab( +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() + default.node_sound_stone_defaults(), + false ) -stairs.register_stair_and_slab( +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() + default.node_sound_stone_defaults(), + true ) -stairs.register_stair_and_slab( +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() + default.node_sound_stone_defaults(), + true ) -stairs.register_stair_and_slab( +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() + default.node_sound_stone_defaults(), + true ) -stairs.register_stair_and_slab( +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() + default.node_sound_stone_defaults(), + false ) -stairs.register_stair_and_slab( +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() + default.node_sound_stone_defaults(), + true ) -stairs.register_stair_and_slab( +my_register_stair_and_slab( "sandstone", "default:sandstone", {crumbly = 1, cracky = 3}, {"default_sandstone.png"}, "Sandstone Stair", "Sandstone Slab", - default.node_sound_stone_defaults() + default.node_sound_stone_defaults(), + true ) -stairs.register_stair_and_slab( +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() + default.node_sound_stone_defaults(), + false ) -stairs.register_stair_and_slab( +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() + default.node_sound_stone_defaults(), + true ) -stairs.register_stair_and_slab( +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() + default.node_sound_stone_defaults(), + true ) -stairs.register_stair_and_slab( +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() + default.node_sound_stone_defaults(), + false ) -stairs.register_stair_and_slab( +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() + default.node_sound_stone_defaults(), + true ) -stairs.register_stair_and_slab( +my_register_stair_and_slab( "brick", "default:brick", {cracky = 3}, {"default_brick.png"}, "Brick Stair", "Brick Slab", - default.node_sound_stone_defaults() + default.node_sound_stone_defaults(), + false ) -stairs.register_stair_and_slab( - "straw", - "farming:straw", - {snappy = 3, flammable = 4}, - {"farming_straw.png"}, - "Straw Stair", - "Straw Slab", - default.node_sound_leaves_defaults() -) - -stairs.register_stair_and_slab( +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_stone_defaults() + default.node_sound_metal_defaults(), + true ) -stairs.register_stair_and_slab( +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_stone_defaults() + default.node_sound_metal_defaults(), + true ) -stairs.register_stair_and_slab( +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_stone_defaults() + default.node_sound_metal_defaults(), + true ) -stairs.register_stair_and_slab( +my_register_stair_and_slab( "goldblock", "default:goldblock", {cracky = 1}, {"default_gold_block.png"}, "Gold Block Stair", "Gold Block Slab", - default.node_sound_stone_defaults() + 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/models/stairs_stair.obj b/mods/stairs/models/stairs_stair.obj deleted file mode 100644 index 45882c6e..00000000 --- a/mods/stairs/models/stairs_stair.obj +++ /dev/null @@ -1,113 +0,0 @@ -# Blender v2.72 (sub 0) OBJ File: '' -# www.blender.org -mtllib stairs.mtl -o stairs_top -v -0.500000 0.000000 -0.500000 -v -0.500000 0.000000 0.000000 -v 0.500000 0.000000 0.000000 -v 0.500000 0.000000 -0.500000 -v -0.500000 0.500000 0.000000 -v 0.500000 0.500000 0.000000 -v -0.500000 0.500000 0.500000 -v 0.500000 0.500000 0.500000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 0.500000 -vt 0.000000 0.500000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vn 0.000000 1.000000 0.000000 -g stairs_top -usemtl None -s off -f 4/1/1 1/2/1 2/3/1 3/4/1 -f 7/5/1 8/6/1 6/4/1 5/3/1 -o stairs_bottom -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 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vn 0.000000 -1.000000 -0.000000 -g stairs_bottom -usemtl None -s off -f 11/7/2 9/8/2 10/9/2 12/10/2 -o stairs_right -v -0.500000 0.000000 -0.500000 -v -0.500000 -0.500000 -0.500000 -v -0.500000 0.000000 0.000000 -v -0.500000 -0.500000 0.500000 -v -0.500000 0.500000 0.000000 -v -0.500000 0.500000 0.500000 -vt 0.000000 0.500000 -vt 0.000000 0.000000 -vt 0.500000 0.500000 -vt 1.000000 1.000000 -vt 0.500000 1.000000 -vt 1.000000 0.000000 -vn -1.000000 0.000000 0.000000 -g stairs_right -usemtl None -s off -f 13/11/3 14/12/3 15/13/3 -f 15/13/3 18/14/3 17/15/3 -f 14/12/3 16/16/3 18/14/3 -o stairs_left -v 0.500000 0.000000 0.000000 -v 0.500000 -0.500000 -0.500000 -v 0.500000 0.000000 -0.500000 -v 0.500000 -0.500000 0.500000 -v 0.500000 0.500000 0.000000 -v 0.500000 0.500000 0.500000 -vt 0.500000 0.500000 -vt 1.000000 0.000000 -vt 1.000000 0.500000 -vt 0.500000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vn 1.000000 0.000000 0.000000 -g stairs_left -usemtl None -s off -f 19/17/4 20/18/4 21/19/4 -f 19/17/4 23/20/4 24/21/4 -f 20/18/4 24/21/4 22/22/4 -o stairs_back -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 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 0.000000 -vn 0.000000 -0.000000 1.000000 -g stairs_back -usemtl None -s off -f 26/23/5 28/24/5 27/25/5 25/26/5 -o stairs_front -v -0.500000 0.000000 -0.500000 -v -0.500000 -0.500000 -0.500000 -v -0.500000 0.000000 0.000000 -v 0.500000 0.000000 0.000000 -v 0.500000 -0.500000 -0.500000 -v 0.500000 0.000000 -0.500000 -v -0.500000 0.500000 0.000000 -v 0.500000 0.500000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 0.500000 -vt 0.000000 0.500000 -vt 0.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vn 0.000000 0.000000 -1.000000 -g stairs_front -usemtl None -s off -f 30/27/6 29/28/6 34/29/6 33/30/6 -f 31/28/6 35/31/6 36/32/6 32/29/6 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/technic_chests b/mods/technic_chests deleted file mode 160000 index 5c6baef9..00000000 --- a/mods/technic_chests +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 5c6baef96f7d9cb79ccc6c10b670bf0078d93d55 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 index df98f7e2..df244fe4 100644 --- a/mods/tnt/README.txt +++ b/mods/tnt/README.txt @@ -1,37 +1,74 @@ Minetest Game mod: tnt ====================== -by PilzAdam and ShadowNinja +See license.txt for license information. -Introduction: +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 or as fuze for TNT. To craft TNT -surround gunpowder with 4 wood in a + shape. -There are different ways to blow up TNT: + +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 fuze that leads to a TNT block with a torch. - 3. Activate it with mesecons (fastest way) -Be aware of the damage radius of 7 blocks! + 2. Hit a gunpowder fuse trail that leads to TNT with a torch or + flint-and-steel. + 3. Activate it with mesecons (fastest way). -License: -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. +For 1 TNT: +Node destruction radius is 3 nodes. +Player and object damage radius is 6 nodes. diff --git a/mods/tnt/depends.txt b/mods/tnt/depends.txt deleted file mode 100644 index 5ff216f7..00000000 --- a/mods/tnt/depends.txt +++ /dev/null @@ -1,3 +0,0 @@ -default -fire - diff --git a/mods/tnt/init.lua b/mods/tnt/init.lua index a9c86526..d48258f3 100644 --- a/mods/tnt/init.lua +++ b/mods/tnt/init.lua @@ -1,17 +1,29 @@ +-- 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.setting_get("tnt_radius") or 3) +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.after(0, function() +minetest.register_on_mods_loaded(function() for name, def in pairs(minetest.registered_nodes) do cid_data[minetest.get_content_id(name)] = { name = name, @@ -53,8 +65,8 @@ local function eject_drops(drops, pos, radius) local obj = minetest.add_item(drop_pos, dropitem) if obj then obj:get_luaentity().collect = true - obj:setacceleration({x = 0, y = -10, z = 0}) - obj:setvelocity({x = math.random(-3, 3), + 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 @@ -78,8 +90,11 @@ local function add_drop(drops, item) end end -local function destroy(drops, npos, cid, c_air, c_fire, on_blast_queue, ignore_protection, ignore_on_blast) - if not ignore_protection and minetest.is_protected(npos, "") then +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 @@ -88,13 +103,20 @@ local function destroy(drops, npos, cid, c_air, c_fire, on_blast_queue, ignore_p 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} + 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 ipairs(node_drops) do + for _, item in pairs(node_drops) do add_drop(drops, item) end return c_air @@ -137,47 +159,46 @@ 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:getpos() + 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 - -- currently the engine has no method to set - -- player velocity. See #2960 - -- instead, we knock the player back 1.0 node, and slightly upwards local dir = vector.normalize(vector.subtract(obj_pos, pos)) - local moveoff = vector.multiply(dir, dist + 1.0) - local newpos = vector.add(pos, moveoff) - newpos = vector.add(newpos, {x = 0, y = 0.2, z = 0}) - obj:setpos(newpos) + local moveoff = vector.multiply(dir, 2 / dist * radius) + obj:add_velocity(moveoff) obj:set_hp(obj:get_hp() - damage) else - local do_damage = true - local do_knockback = true - local entity_drops = {} local luaobj = obj:get_luaentity() - 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 + -- 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 do_knockback then - local obj_vel = obj:getvelocity() - obj:setvelocity(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) + 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 - for _, item in ipairs(entity_drops) do - add_drop(drops, item) end end end @@ -193,6 +214,7 @@ local function add_effects(pos, radius, drops) collisiondetection = false, vertical = false, texture = "tnt_boom.png", + glow = 15, }) minetest.add_particlespawner({ amount = 64, @@ -213,14 +235,18 @@ local function add_effects(pos, radius, drops) -- 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 and def.tiles and def.tiles[1] then - texture = def.tiles[1] + if def then + node = { name = name } + if def.tiles and type(def.tiles[1]) == "string" then + texture = def.tiles[1] + end end end end @@ -236,26 +262,30 @@ local function add_effects(pos, radius, drops) maxacc = {x = 0, y = -10, z = 0}, minexptime = 0.8, maxexptime = 2.0, - minsize = radius * 0.66, - maxsize = radius * 2, + 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) - local name = minetest.get_node(pos).name - local group = minetest.get_item_group(name, "tnt") - if group > 0 then - minetest.sound_play("tnt_ignite", {pos = pos}) - minetest.set_node(pos, {name = name .. "_burning"}) +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) - elseif name == "tnt:gunpowder" then - minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) end end -local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast) +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() @@ -265,10 +295,20 @@ local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast) local a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) local data = vm1:get_data() local count = 0 - local c_tnt = minetest.get_content_id("tnt:tnt") + 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.get_content_id("air") + 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 @@ -301,6 +341,8 @@ local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast) 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 @@ -311,10 +353,10 @@ local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast) 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 then + if cid ~= c_air and cid ~= c_ignore then data[vi] = destroy(drops, p, cid, c_air, c_fire, - on_blast_queue, ignore_protection, - ignore_on_blast) + on_blast_queue, on_construct_queue, + ignore_protection, ignore_on_blast, owner) end end vi = vi + 1 @@ -327,89 +369,117 @@ local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast) vm:update_map() vm:update_liquids() - -- call nodeupdate for everything within 1.5x blast radius + -- 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 - for y = -radius * 1.5, radius * 1.5 do - local s = vector.add(pos, {x = x, y = y, z = z}) - local r = vector.distance(pos, s) + 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 - nodeupdate(s) + minetest.check_single_for_falling(s) end end end end - for _, queued_data in ipairs(on_blast_queue) do + 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 ipairs(node_drops) do + 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) - minetest.sound_play("tnt_explode", {pos = pos, gain = 1.5, max_hear_distance = 2*64}) - minetest.set_node(pos, {name = "tnt:boom"}) + 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) + def.ignore_on_blast, owner, def.explode_center) -- append entity drops - local damage_radius = (radius / def.radius) * def.damage_radius + 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}, - on_construct = function(pos) - minetest.get_node_timer(pos):start(0.4) - end, - on_timer = function(pos, elapsed) - minetest.remove_node(pos) - end, + groups = {dig_immediate = 3, not_in_creative_inventory = 1}, -- unaffected by explosions on_blast = function() end, }) minetest.register_node("tnt:gunpowder", { - description = "Gun Powder", + 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"}, + 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, connect_to_raillike = minetest.raillike_group("gunpowder")}, + 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 - tnt.burn(pos) - end - end + 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) - tnt.burn(pos) + 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, }) @@ -460,55 +530,80 @@ minetest.register_node("tnt:gunpowder_burning", { 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")}, + 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 - for dy = -1, 1 do - if not (dx == 0 and dz == 0) then - tnt.burn({ - x = pos.x + dx, - y = pos.y + dy, - z = pos.z + dz, - }) + 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 - 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 = 2}) + 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", + output = "tnt:gunpowder 5", type = "shapeless", recipe = {"default:coal_lump", "default:gravel"} }) -minetest.register_craft({ - output = "tnt:tnt", - recipe = { - {"", "group:wood", ""}, - {"group:wood", "tnt:gunpowder", "group:wood"}, - {"", "group:wood", ""} - } +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 = tnt.burn, + action = function(pos, node) + tnt.burn(pos, node.name) + end, }) +end function tnt.register_tnt(def) local name @@ -525,32 +620,48 @@ function tnt.register_tnt(def) 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 - 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}, - sounds = default.node_sound_wood_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 = name .. "_burning"}) - end - 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 - -- } - --}, - }) + 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 = { @@ -568,22 +679,22 @@ function tnt.register_tnt(def) light_source = 5, drop = "", sounds = default.node_sound_wood_defaults(), - groups = {falling_node = 1}, + 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}) + minetest.sound_play("tnt_ignite", {pos = pos}, true) minetest.get_node_timer(pos):start(4) - nodeupdate(pos) + minetest.check_for_falling(pos) end, }) end tnt.register_tnt({ name = "tnt:tnt", - description = "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 index a414ea04..e00a16c1 100644 Binary files a/mods/tnt/sounds/tnt_explode.ogg 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 index 5c5bfaf2..8581c2d6 100644 Binary files a/mods/tnt/sounds/tnt_gunpowder_burning.ogg 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 index 199f2067..1a7062e9 100644 Binary files a/mods/tnt/sounds/tnt_ignite.ogg 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 index bbb1096f..92be28ba 100644 Binary files a/mods/tnt/textures/tnt_blast.png and b/mods/tnt/textures/tnt_blast.png differ diff --git a/mods/tnt/textures/tnt_gunpowder_burning_crossing_animated.png b/mods/tnt/textures/tnt_gunpowder_burning_crossing_animated.png index a901f7bd..efab2a9e 100644 Binary files a/mods/tnt/textures/tnt_gunpowder_burning_crossing_animated.png 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 index bc018065..bd1437fe 100644 Binary files a/mods/tnt/textures/tnt_gunpowder_burning_curved_animated.png 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 index c860acef..654e5396 100644 Binary files a/mods/tnt/textures/tnt_gunpowder_burning_straight_animated.png 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 index a556072c..5b567e38 100644 Binary files a/mods/tnt/textures/tnt_gunpowder_burning_t_junction_animated.png 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 index 916c84ee..c0487a09 100644 Binary files a/mods/tnt/textures/tnt_gunpowder_crossing.png 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 index cb8b4eac..8ed01db8 100644 Binary files a/mods/tnt/textures/tnt_gunpowder_curved.png and b/mods/tnt/textures/tnt_gunpowder_curved.png differ diff --git a/mods/tnt/textures/tnt_gunpowder_straight.png b/mods/tnt/textures/tnt_gunpowder_straight.png index 8ab0e3c8..427feb90 100644 Binary files a/mods/tnt/textures/tnt_gunpowder_straight.png 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 index ac997a7a..b30c2b46 100644 Binary files a/mods/tnt/textures/tnt_gunpowder_t_junction.png and b/mods/tnt/textures/tnt_gunpowder_t_junction.png differ diff --git a/mods/tnt/textures/tnt_smoke.png b/mods/tnt/textures/tnt_smoke.png index 488b50fe..6788974a 100644 Binary files a/mods/tnt/textures/tnt_smoke.png 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/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 index c2a802f4..a54e330f 100644 --- a/mods/vessels/README.txt +++ b/mods/vessels/README.txt @@ -1,50 +1,22 @@ Minetest Game mod: vessels ========================== +See license.txt for license information. -Crafts -------- -Glass bottle (yields 10) +Authors of source code +---------------------- +Originally by Vanessa Ezekowitz (LGPLv2.1+) +Modified by Perttu Ahola (LGPLv2.1+) +Various Minetest developers and contributors (LGPLv2.1+) - G - G - G - G - - G - +Authors of media (textures) +--------------------------- +All not listed below, Vanessa Ezekowitz (CC BY-SA 3.0) -Drinking Glass (yields 14) +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 - G - G - G - G - G G G - -Heavy Steel Bottle (yields 5) - - S - S - S - S - - S - - -License of source code: ------------------------ -Copyright (C) 2012 Vanessa Ezekowitz -Version 2012-09-02 -Modifications by 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) --------------------------------------- -WTFPL - -Authors of media files ------------------------ -Unless specifically noted, -Copyright (C) 2012 Vanessa Ezekowitz - -The following textures were modified by Thomas-S (License is CC0): - vessels_drinking_glass.png - vessels_drinking_glass_inv.png (Paramat helped to improve this texture) - 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/depends.txt b/mods/vessels/depends.txt deleted file mode 100644 index 4ad96d51..00000000 --- a/mods/vessels/depends.txt +++ /dev/null @@ -1 +0,0 @@ -default diff --git a/mods/vessels/init.lua b/mods/vessels/init.lua index e56cc284..4bd0fb4d 100644 --- a/mods/vessels/init.lua +++ b/mods/vessels/init.lua @@ -1,11 +1,14 @@ +-- 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;]" .. - default.gui_bg .. - default.gui_bg_img .. - default.gui_slots .. "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]" .. @@ -13,8 +16,41 @@ local vessels_shelf_formspec = "listring[current_player;main]" .. default.get_hotbar_bg(0, 2.85) -minetest.register_node("vessels:shelf", { - description = "Vessels Shelf", +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", @@ -24,7 +60,7 @@ minetest.register_node("vessels:shelf", { on_construct = function(pos) local meta = minetest.get_meta(pos) - meta:set_string("formspec", vessels_shelf_formspec) + update_vessels_shelf(pos) local inv = meta:get_inventory() inv:set_size("vessels", 8 * 2) end, @@ -38,18 +74,6 @@ minetest.register_node("vessels:shelf", { end return 0 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 vessels shelf 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 vessels shelf 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 vessels shelf at ".. minetest.pos_to_string(pos)) - end, on_blast = function(pos) local drops = {} default.get_inventory_drops(pos, "vessels", drops) @@ -57,7 +81,9 @@ minetest.register_node("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", @@ -69,7 +95,7 @@ minetest.register_craft({ }) minetest.register_node("vessels:glass_bottle", { - description = "Glass Bottle (empty)", + description = S("Empty Glass Bottle"), drawtype = "plantlike", tiles = {"vessels_glass_bottle.png"}, inventory_image = "vessels_glass_bottle.png", @@ -95,7 +121,7 @@ minetest.register_craft( { }) minetest.register_node("vessels:drinking_glass", { - description = "Drinking Glass (empty)", + description = S("Empty Drinking Glass"), drawtype = "plantlike", tiles = {"vessels_drinking_glass.png"}, inventory_image = "vessels_drinking_glass_inv.png", @@ -121,7 +147,7 @@ minetest.register_craft( { }) minetest.register_node("vessels:steel_bottle", { - description = "Heavy Steel Bottle (empty)", + description = S("Empty Heavy Steel Bottle"), drawtype = "plantlike", tiles = {"vessels_steel_bottle.png"}, inventory_image = "vessels_steel_bottle.png", @@ -150,7 +176,7 @@ minetest.register_craft( { -- Glass and steel recycling minetest.register_craftitem("vessels:glass_fragments", { - description = "Pile of Glass Fragments", + description = S("Glass Fragments"), inventory_image = "vessels_glass_fragments.png", }) @@ -183,3 +209,16 @@ minetest.register_craft( { 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 index d5037b85..aef73296 100644 Binary files a/mods/vessels/textures/vessels_drinking_glass.png 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 index 9992bd9c..e50c8c72 100644 Binary files a/mods/vessels/textures/vessels_drinking_glass_inv.png 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 index 6ea37db6..2a46aafd 100644 Binary files a/mods/vessels/textures/vessels_glass_bottle.png 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 index 7c6c4888..acf2d380 100644 Binary files a/mods/vessels/textures/vessels_glass_fragments.png and b/mods/vessels/textures/vessels_glass_fragments.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 index 61d30719..169930a3 100644 Binary files a/mods/vessels/textures/vessels_steel_bottle.png 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/bucket/depends.txt b/mods/vipworld/ferns/depends.txt similarity index 88% rename from mods/bucket/depends.txt rename to mods/vipworld/ferns/depends.txt index 3a7daa1d..562cf632 100644 --- a/mods/bucket/depends.txt +++ b/mods/vipworld/ferns/depends.txt @@ -1,2 +1 @@ -default - +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/dye/depends.txt b/mods/vipworld/modpack.txt similarity index 100% rename from mods/dye/depends.txt rename to mods/vipworld/modpack.txt diff --git a/mods/fire/depends.txt b/mods/vipworld/molehills/depends.txt similarity index 100% rename from mods/fire/depends.txt rename to mods/vipworld/molehills/depends.txt 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/depends.txt b/mods/walls/depends.txt deleted file mode 100644 index 4ad96d51..00000000 --- a/mods/walls/depends.txt +++ /dev/null @@ -1 +0,0 @@ -default diff --git a/mods/walls/init.lua b/mods/walls/init.lua index 0b51bdb0..b2a163fc 100644 --- a/mods/walls/init.lua +++ b/mods/walls/init.lua @@ -1,38 +1,44 @@ - ---[[ - -Walls mod for Minetest - -Copyright (C) 2015 Auke Kok - -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://sam.zoy.org/wtfpl/COPYING for more details. - ---]] +-- walls/init.lua walls = {} -walls.register = function(wall_name, wall_desc, wall_texture, wall_mat, wall_sounds) +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}}, + 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}}, + 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}, }, - connects_to = { "group:wall", "group:stone" }, + 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, }, + tiles = wall_texture_table, walkable = true, groups = { cracky = 3, wall = 1, stone = 2 }, sounds = wall_sounds, @@ -42,7 +48,7 @@ walls.register = function(wall_name, wall_desc, wall_texture, wall_mat, wall_sou minetest.register_craft({ output = wall_name .. " 6", recipe = { - { '', '', '' }, + { "", "", "" }, { wall_mat, wall_mat, wall_mat}, { wall_mat, wall_mat, wall_mat}, } @@ -50,12 +56,12 @@ walls.register = function(wall_name, wall_desc, wall_texture, wall_mat, wall_sou end -walls.register("walls:cobble", "Cobblestone Wall", "default_cobble.png", +walls.register("walls:cobble", S("Cobblestone Wall"), {"default_cobble.png"}, "default:cobble", default.node_sound_stone_defaults()) -walls.register("walls:mossycobble", "Mossy Cobblestone Wall", "default_mossycobble.png", +walls.register("walls:mossycobble", S("Mossy Cobblestone Wall"), {"default_mossycobble.png"}, "default:mossycobble", default.node_sound_stone_defaults()) -walls.register("walls:desertcobble", "Desert Cobblestone Wall", "default_desert_cobble.png", +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 index 71135fc2..369c0880 160000 --- a/mods/wardrobe +++ b/mods/wardrobe @@ -1 +1 @@ -Subproject commit 71135fc29026647be78daa9d8f554793771d4fe6 +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 index 4953c57d..b5f94f49 160000 --- a/mods/wine +++ b/mods/wine @@ -1 +1 @@ -Subproject commit 4953c57dc8df31fe68e8986bb84565431ebe4406 +Subproject commit b5f94f49dab6212d46b032cea8ada47abf1ee62e diff --git a/mods/wool/README.txt b/mods/wool/README.txt index f57b6dd3..a66677dd 100644 --- a/mods/wool/README.txt +++ b/mods/wool/README.txt @@ -1,28 +1,16 @@ Minetest Game mod: wool ======================= +See license.txt for license information. -Mostly backward-compatible with jordach's 16-color wool mod. - -License of source code: ------------------------ -Copyright (C) 2012 Perttu Ahola (celeron55) - -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://sam.zoy.org/wtfpl/COPYING for more details. - -License of media (textures and sounds) --------------------------------------- -Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) -http://creativecommons.org/licenses/by-sa/3.0/ - -Authors of media files ------------------------ -Cisoun: -- 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 +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/depends.txt b/mods/wool/depends.txt deleted file mode 100644 index 4ad96d51..00000000 --- a/mods/wool/depends.txt +++ /dev/null @@ -1 +0,0 @@ -default diff --git a/mods/wool/init.lua b/mods/wool/init.lua index a36e4dd8..4cf7dc3a 100644 --- a/mods/wool/init.lua +++ b/mods/wool/init.lua @@ -1,30 +1,15 @@ --- 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. +-- wool/init.lua -local dyes = { - {"white", "White", "basecolor_white"}, - {"grey", "Grey", "basecolor_grey"}, - {"black", "Black", "basecolor_black"}, - {"red", "Red", "basecolor_red"}, - {"yellow", "Yellow", "basecolor_yellow"}, - {"green", "Green", "basecolor_green"}, - {"cyan", "Cyan", "basecolor_cyan"}, - {"blue", "Blue", "basecolor_blue"}, - {"magenta", "Magenta", "basecolor_magenta"}, - {"orange", "Orange", "excolor_orange"}, - {"violet", "Violet", "excolor_violet"}, - {"brown", "Brown", "unicolor_dark_orange"}, - {"pink", "Pink", "unicolor_light_red"}, - {"dark_grey", "Dark Grey", "unicolor_darkgrey"}, - {"dark_green", "Dark Green", "unicolor_dark_green"}, -} +-- Load support for MT game translation. +local S = minetest.get_translator("wool") + +local dyes = dye.dyes for i = 1, #dyes do - local name, desc, craft_color_group = unpack(dyes[i]) + local name, desc = unpack(dyes[i]) minetest.register_node("wool:" .. name, { - description = desc .. " Wool", + description = S(desc .. " Wool"), tiles = {"wool_" .. name .. ".png"}, is_ground_content = false, groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 3, @@ -35,13 +20,33 @@ for i = 1, #dyes do minetest.register_craft{ type = "shapeless", output = "wool:" .. name, - recipe = {"group:dye," .. craft_color_group, "group:wool"}, + recipe = {"group:dye,color_" .. name, "group:wool"}, } end - --- legacy - +-- 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/worldedit b/mods/worldedit index 5afea424..abc9efee 160000 --- a/mods/worldedit +++ b/mods/worldedit @@ -1 +1 @@ -Subproject commit 5afea424ba4cf233fb2f7fe48072d4b11e7584da +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 index dbef5947..9f75900c 160000 --- a/mods/xdecor +++ b/mods/xdecor @@ -1 +1 @@ -Subproject commit dbef5947bf143986bd85083c3cf1b37ba076073e +Subproject commit 9f75900c0c562c8e16a4ebce35a338754a88aaf9 diff --git a/mods/xpanes/README.txt b/mods/xpanes/README.txt index b89e74a2..0e34d232 100644 --- a/mods/xpanes/README.txt +++ b/mods/xpanes/README.txt @@ -1,16 +1,32 @@ Minetest Game mod: xpanes ========================= +See license.txt for license information. -License: --------- -Copyright (C) xyz -modified by BlockMen (iron bars) +Authors of source code +---------------------- +Originally by xyz (MIT) +BlockMen (MIT) +sofar (MIT) +Various Minetest developers and contributors (MIT) -Gambit (WTFPL): - xpanes_bar.png +Authors of media (textures) +--------------------------- +xyz (CC BY-SA 3.0): + All textures not mentioned below. -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://sam.zoy.org/wtfpl/COPYING for more details. +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/depends.txt b/mods/xpanes/depends.txt deleted file mode 100644 index 331d858c..00000000 --- a/mods/xpanes/depends.txt +++ /dev/null @@ -1 +0,0 @@ -default \ No newline at end of file diff --git a/mods/xpanes/init.lua b/mods/xpanes/init.lua index 9189912e..a02dbfe4 100644 --- a/mods/xpanes/init.lua +++ b/mods/xpanes/init.lua @@ -1,183 +1,261 @@ -xpanes = {} +-- xpanes/init.lua -local function rshift(x, by) - return math.floor(x / 2 ^ by) +-- 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 directions = { - {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 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 function update_pane(pos, name) - if not minetest.get_node(pos).name:find("^xpanes:"..name) then + 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 - local sum = 0 - for i, dir in pairs(directions) do - local node = minetest.get_node(vector.add(pos, dir)) - local def = minetest.registered_nodes[node.name] - local pane_num = def and def.groups.pane or 0 - if pane_num > 0 or not def or (def.walkable ~= false and - def.drawtype ~= "nodebox") then - sum = sum + 2 ^ (i - 1) + + 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 sum == 0 then - sum = 15 - end - minetest.set_node(pos, {name = "xpanes:"..name.."_"..sum}) -end -local function update_nearby(pos, node) - node = node or minetest.get_node(pos) - local name = node.name - if not name or node.name:sub(1, 7) ~= "xpanes:" then - return - end - local underscore_pos = string.find(name, "_[^_]*$") or 0 - local len = name:len() - local num = tonumber(name:sub(underscore_pos+1, len)) - if not num or num < 1 or num > 15 then - name = name:sub(8) + 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 - name = name:sub(8, underscore_pos - 1) - end - for i, dir in pairs(directions) do - update_pane(vector.add(pos, dir), name) + swap(pos, node, name, 0) end end -minetest.register_on_placenode(update_nearby) -minetest.register_on_dignode(update_nearby) +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) -local half_boxes = { - {0, -0.5, -1/32, 0.5, 0.5, 1/32}, - {-1/32, -0.5, 0, 1/32, 0.5, 0.5}, - {-0.5, -0.5, -1/32, 0, 0.5, 1/32}, - {-1/32, -0.5, -0.5, 1/32, 0.5, 0} -} - -local full_boxes = { - {-0.5, -0.5, -1/32, 0.5, 0.5, 1/32}, - {-1/32, -0.5, -0.5, 1/32, 0.5, 0.5} -} - -local sb_half_boxes = { - {0, -0.5, -0.06, 0.5, 0.5, 0.06}, - {-0.06, -0.5, 0, 0.06, 0.5, 0.5}, - {-0.5, -0.5, -0.06, 0, 0.5, 0.06}, - {-0.06, -0.5, -0.5, 0.06, 0.5, 0} -} - -local sb_full_boxes = { - {-0.5, -0.5, -0.06, 0.5, 0.5, 0.06}, - {-0.06, -0.5, -0.5, 0.06, 0.5, 0.5} -} - -local pane_def_fields = { - drawtype = "airlike", - paramtype = "light", - is_ground_content = false, - sunlight_propagates = true, - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - air_equivalent = true, -} +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 - local need = {} - local cnt = 0 - for j = 1, 4 do - if rshift(i, j - 1) % 2 == 1 then - need[j] = true - cnt = cnt + 1 - end - end - local take = {} - local take2 = {} - if need[1] == true and need[3] == true then - need[1] = nil - need[3] = nil - table.insert(take, full_boxes[1]) - table.insert(take2, sb_full_boxes[1]) - end - if need[2] == true and need[4] == true then - need[2] = nil - need[4] = nil - table.insert(take, full_boxes[2]) - table.insert(take2, sb_full_boxes[2]) - end - for k in pairs(need) do - table.insert(take, half_boxes[k]) - table.insert(take2, sb_half_boxes[k]) - end - local texture = def.textures[1] - if cnt == 1 then - texture = def.textures[1].."^"..def.textures[2] - end - minetest.register_node(":xpanes:"..name.."_"..i, { - drawtype = "nodebox", - tiles = {def.textures[3], def.textures[3], texture}, - paramtype = "light", - groups = def.groups, - drop = "xpanes:"..name, - sounds = def.sounds, - node_box = { - type = "fixed", - fixed = take - }, - selection_box = { - type = "fixed", - fixed = take2 - } - }) + minetest.register_alias("xpanes:" .. name .. "_" .. i, "xpanes:" .. name .. "_flat") end - for k, v in pairs(pane_def_fields) do - def[k] = def[k] or v - 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" }, + }) - def.on_construct = function(pos) - update_pane(pos, name) - end - - minetest.register_node(":xpanes:"..name, def) + 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.." 16", + output = "xpanes:" .. name .. "_flat 16", recipe = def.recipe }) end xpanes.register_pane("pane", { - description = "Glass Pane", - textures = {"default_glass.png","xpanes_pane_half.png","xpanes_white.png"}, + 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, pane=1}, + 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 = "Iron bar", - textures = {"xpanes_bar.png","xpanes_bar.png","xpanes_space.png"}, + 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, pane=1}, - sounds = default.node_sound_stone_defaults(), + 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 index 4d17ceb8..3ea62a93 100644 Binary files a/mods/xpanes/textures/xpanes_bar.png 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_grey.png b/mods/xpanes/textures/xpanes_grey.png deleted file mode 100644 index e1c6f76f..00000000 Binary files a/mods/xpanes/textures/xpanes_grey.png and /dev/null 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_pane_half.png b/mods/xpanes/textures/xpanes_pane_half.png deleted file mode 100644 index 4e846dfa..00000000 Binary files a/mods/xpanes/textures/xpanes_pane_half.png and /dev/null differ diff --git a/mods/xpanes/textures/xpanes_space.png b/mods/xpanes/textures/xpanes_space.png deleted file mode 100644 index 016cb352..00000000 Binary files a/mods/xpanes/textures/xpanes_space.png and /dev/null 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/mods/xpanes/textures/xpanes_white.png b/mods/xpanes/textures/xpanes_white.png deleted file mode 100644 index 777bd606..00000000 Binary files a/mods/xpanes/textures/xpanes_white.png and /dev/null differ 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