1
0
Fork 0

Compare commits

...

119 Commits

Author SHA1 Message Date
Dieter44 ffde25c3ce ITEMS/mcl_anvils: fix renaming items w/o desc… 2022-03-08 23:19:18 +01:00
MysticTempest d2e635b13f Rename a few textures to help support texture packs. 2022-03-08 23:19:18 +01:00
Elias Åström 00cb4f6233 Rewrite portal removal to avoid stack overflow
This solves a problem were nether portal removal would trigger deep
recursion through node callbacks.  For large portals this could result
in stack overflow crashes on LuaJIT.  The issue is solved by rewriting
the portal removal to avoid recursion and removing the portal in one
operation using minetest.bulk_set_node.
2022-03-08 23:19:18 +01:00
kabou cff49c015a Fix fire HUD not showing on join while burning.
* Add the fire HUD to a player who joins the server while still burning
  from the previous session.
2022-03-08 23:19:18 +01:00
kabou 03c5f24649 Add comments to mcl_burning.update_hud(). 2022-03-08 23:19:18 +01:00
kabou c83e6c3267 Do not set fire to objects that are already burning.
Changes to mcl_burning.set_on_fire():
* Add logic that only updates the burn time, but skips adding fire
  entities to objects that are already burning.
* Condense code a little, remove single use variables.
* Add a comment to a questionable piece of code.
* Add comments to the function.
2022-03-08 23:19:18 +01:00
kabou 97fb9e5828 Add comments to "storage" table.
* Document attributes of the "storage" table.
2022-03-08 23:19:18 +01:00
kabou 08775b0cc9 Add local copy of minetest.find_nodes_in_area. 2022-03-08 23:19:17 +01:00
kabou ed9a403d78 Make player burning HUD work without csm.
* Add update_hud() function.
* Remove the client channels.
* Unglobalize animation_frames variable.
* Fix bug where player state was not stored on shutdown of singleplayer
  game.
* Remove superfluous sanity_check() function, this code could easily be
  inlined in its only caller.
2022-03-08 23:19:17 +01:00
kabou 3f1247d4cf Fix burning entity animation.
The parameters for the flames sprite were incorrect, causing the reverse
side of the sprite to appear as an opaque black rectangle.  Use the
correct incantation.
2022-03-08 23:19:17 +01:00
Nils Dagsson Moskopp 84fa3db68a Fix TGA file writing on Windows
Before this patch, the tga_encoder mod would write corrupted TGA files
on Windows: Bytes that looked like newlines were replaced by a carriage
return and a newline.
2022-03-08 23:19:17 +01:00
AFCMS 1048b3a38f make all arrow types activate target (+ depends and code fixes) 2022-03-08 23:19:17 +01:00
AFCMS fb35af4dba make lingering potions activate target (+ indentation fix) 2022-03-08 23:19:17 +01:00
AFCMS 1a1c592452 make splash potions activate target 2022-03-08 23:19:17 +01:00
AFCMS 6299cd07fa make fire charges activate target (+ fix possible crash) 2022-03-08 23:19:14 +01:00
AFCMS b0695cf233 make bottle o enchanting activate target 2022-03-08 23:16:54 +01:00
AFCMS 1cf53722a4 make ender pearls activate target 2022-03-08 23:16:54 +01:00
AFCMS bb1586ce72 make eggs activate target 2022-03-08 23:16:54 +01:00
AFCMS a848b9d158 add target help text 2022-03-08 23:16:54 +01:00
AFCMS 8f5bb24771 add target crafting receipe 2022-03-08 23:16:54 +01:00
AFCMS 25f9baff2c make snowballs activate target 2022-03-08 23:16:54 +01:00
AFCMS 01c9fc9652 add target with API 2022-03-08 23:16:54 +01:00
E b737e3bc39 mapgen/mcl_mapgen_core: move set_node decorations a node callback
During the rewrite in 89e55e9065, a queue system was added to allow
using both VoxelManip-based generation steps, and set_node-based steps,
however some set_node-based steps (underground mushrooms, nether
decorations, and structures) were missed and remained in a VoxelManip
step. The result is that the changes made by the set_node stages were
overwritten after the (now-stale) VoxelManip data was committed later.

(ref. Mineclonia/Mineclonia#26)
2022-03-08 23:16:54 +01:00
cora b35959e005 do not randomseed twice 2022-03-08 23:16:54 +01:00
cora 56ec2b8066 fix beds dropping when burning up 2022-03-08 23:16:54 +01:00
cora c0fdd12172 make fire use abms instead of laggy node timers 2022-03-08 23:16:54 +01:00
Nils Dagsson Moskopp 6e3f22c1ca Fix handheld maps not displaying in Minetest 5.5.0
The function dynamic_add_media() was changed in incompatible ways in
several minor versions of Minetest, breaking the display of handheld
maps in Minetest 5.5.0. This patch makes handheld maps display there.

The function was blocking with one argument in Minetest 5.3. It was also
blocking in Minetest 5.4, but took an additional argument for a function
to execute once the media had been received. Calling dynamic_add_media()
with a single argument had been deprecated; a function that did nothing
was provided in mcl_maps to satisfy the changed argument requirements.

In Minetest 5.5, dynamic_add_media() was changed to non-blocking. This
introduced a race condition in mcl_maps, where a client often tried to
display a map before it had received the map texture from the server.

Opening an issue on the Minetest issue tracker led to it being closed in
about 20 minutes: <https://github.com/minetest/minetest/issues/11997>
2022-03-08 23:16:54 +01:00
Nils Dagsson Moskopp 3cfa41de6d Fix redstone comparator flooding crash
Redstone comparators have two modes, comparison mode & subtraction mode.
Before this patch, the functions to turn comparators on or off attempted
to swap nodes with comparators in the same mode, but failed to determine
the correct replacement node, if the existing node was not a comparator.

When a comparator in an on state (e.g. powered by a filled cauldron) was
flooded, the flooding dropped the comparator and replaced the comparator
node that was to be swapped out with air, which lead to a server crash.

This patch changes the functions that turn comparators on or off so they
only swap existing nodes with comparators in the same mode if the name
of the replacement node can be determined – i.e. if it is not nil.
2022-03-08 23:16:54 +01:00
AFCMS 86cf8010af add `.blend2` and `.blend3` files to gitignore 2022-03-08 23:16:54 +01:00
AFCMS b9eb00613c add `.blend1` files to gitignore 2022-03-08 23:16:54 +01:00
AFCMS fe4f18705e remove blender backup file 2022-03-08 23:16:54 +01:00
kabou 178b929c6c Fix hopper breakage in get_item_group return value.
In commit 55009c257e that added vectors to
mcl_composters, mcl_hoppers was accidentally patched with a unrelated
change, updating it to get_item_group().  This mostly works, but in one
particular case the semantics of the return value differs.  Instead of
returning 'nil' it returns '0'.  That altered the evaluation of an if
condition, breaking the abm that sucks in items.

This commit fixes the conditional by explicitly comparing  '~= 0'.
2022-03-08 23:16:54 +01:00
1F616EMO de929349b9 mcl_tools 2022-03-08 23:16:54 +01:00
1F616EMO 2bd8f5bdb7 mcl_flowers 2022-03-08 23:16:54 +01:00
1F616EMO f51e01ae80 mcl_books 2022-03-08 23:16:54 +01:00
1F616EMO 5b75bf74fc mcl_dye 2022-03-08 23:16:54 +01:00
1F616EMO 6fd55fb10c mcl_flowerpots 2022-03-08 23:16:54 +01:00
1F616EMO ec9db5830a mcl_mushrooms 2022-03-08 23:16:54 +01:00
1F616EMO fa8d9e2dc0 mcl_doors 2022-03-08 23:16:54 +01:00
1F616EMO 83b7f03f0d mcl_commands 2022-03-08 23:16:54 +01:00
1F616EMO fd00164bde xpanes 2022-03-08 23:16:54 +01:00
1F616EMO 87dba5f3fb mcl_armor 2022-03-08 23:16:54 +01:00
1F616EMO 5ba99c8a19 mcl_inventory 2022-03-08 23:16:54 +01:00
1F616EMO 6094f115dc mcl_fire 2022-03-08 23:16:54 +01:00
1F616EMO 5cf10b28e9 mcl_fishing 2022-03-08 23:16:54 +01:00
1F616EMO 23f6cdb492 mcl_fences 2022-03-08 23:16:54 +01:00
1F616EMO 7358ef40cc mcl_buckets 2022-03-08 23:16:54 +01:00
1F616EMO 574ca21018 mcl_walls 2022-03-08 23:16:54 +01:00
1F616EMO 2358a8be4f mcl_hoppers 2022-03-08 23:16:54 +01:00
1F616EMO 7e94436cfb mcl_anvils 2022-03-08 23:16:54 +01:00
1F616EMO 2932209f60 mcl_portals 2022-03-08 23:16:54 +01:00
1F616EMO 15a4a1f31f mcl_bows 2022-03-08 23:16:54 +01:00
1F616EMO 968385acd8 mcl_skins 2022-03-08 23:16:54 +01:00
1F616EMO 188dbfc6b9 mcl_throwing 2022-03-08 23:16:54 +01:00
1F616EMO 3efeaf0fe2 mcl_cake 2022-03-08 23:16:54 +01:00
1F616EMO c69cbe85fe mcl_jukebox 2022-03-08 23:16:54 +01:00
1F616EMO fe309e802d mcl_heads 2022-03-08 23:16:54 +01:00
1F616EMO 10b0a86c8e mcl_cauldrons 2022-03-08 23:16:54 +01:00
1F616EMO 7a431037e0 mcl_mobs 2022-03-08 23:16:54 +01:00
1F616EMO 6c9fab1e82 findbiome 2022-03-08 23:16:54 +01:00
1F616EMO bcfddc1b78 mcl_sponges 2022-03-08 23:16:54 +01:00
1F616EMO d1d81d9cc7 mcl_maps 2022-03-08 23:16:54 +01:00
1F616EMO 62e32d6fb2 mcl_brewing 2022-03-08 23:16:54 +01:00
1F616EMO a1213f2465 mcl_signs 2022-03-08 23:16:54 +01:00
1F616EMO f55e1f5a7d mcl_monster_eggs 2022-03-08 23:16:54 +01:00
1F616EMO 8d220039b0 mcl_furnaces 2022-03-08 23:16:54 +01:00
1F616EMO 9035e1292f mcl_hunger 2022-03-08 23:16:54 +01:00
1F616EMO 50f9291469 mcl_tnt 2022-03-08 23:16:54 +01:00
1F616EMO 7681ca8122 mcl_crafting_table 2022-03-08 23:16:54 +01:00
1F616EMO 6ec838c05d mcl_weather 2022-03-08 23:16:54 +01:00
1F616EMO f48e2c691b mcl_structures 2022-03-08 23:16:54 +01:00
1F616EMO c6bbfbe49f mcl_experience 2022-03-08 23:16:54 +01:00
1F616EMO 1dcac179e5 mcl_cocoas 2022-03-08 23:16:54 +01:00
1F616EMO 9d5465a2d2 hudbars 2022-03-08 23:16:54 +01:00
1F616EMO c5f6068a9d mclx_core 2022-03-08 23:16:54 +01:00
1F616EMO 8257e539c4 mcl_paintings 2022-03-08 23:16:54 +01:00
1F616EMO 3e25d63881 mcl_mobspawners 2022-03-08 23:16:54 +01:00
1F616EMO 32c102cf6d mcl_itemframes 2022-03-08 23:16:54 +01:00
1F616EMO 087596ee27 mcl_clock 2022-03-08 23:16:54 +01:00
1F616EMO 8b5946c603 mcl_armor_stand 2022-03-08 23:16:53 +01:00
1F616EMO 8f81d9cc39 mcl_spawn 2022-03-08 23:16:53 +01:00
1F616EMO a196cde3cf mcl_wip 2022-03-08 23:16:53 +01:00
1F616EMO 41c2c1bb54 mclx_fences 2022-03-08 23:16:53 +01:00
1F616EMO 48bd9259f6 mcl_compass 2022-03-08 23:16:53 +01:00
1F616EMO f6743c6a84 lightning 2022-03-08 23:16:53 +01:00
1F616EMO 33b42594a6 mcl_playerplus 2022-03-08 23:16:53 +01:00
1F616EMO 7efea28e55 mcl_torches 2022-03-08 23:16:53 +01:00
1F616EMO 5fad369709 mcl_void_damage 2022-03-08 23:16:53 +01:00
1F616EMO 0acaf04212 mcl_falling_nodes 2022-03-08 23:16:53 +01:00
1F616EMO 2711d5dcc4 mcl_privs 2022-03-08 23:16:53 +01:00
1F616EMO 6677e7f590 screwdriver 2022-03-08 23:16:53 +01:00
1F616EMO 5cb517faba mcl_hbarmor 2022-03-08 23:16:53 +01:00
1F616EMO 86e63b74d7 mcl_explosions 2022-03-08 23:16:53 +01:00
1F616EMO 4c0edaa3f7 mcl_farming 2022-03-08 23:16:53 +01:00
1F616EMO 0228758559 (WIP) mcl_farming 2022-03-08 23:16:53 +01:00
1F616EMO 2e446737cb MORE MESS SORRY XD 2022-03-08 23:16:53 +01:00
1F616EMO 8c17897801 Revert "add translates for `mcl_boats`"
This reverts commit 2ee84f2ad3bd1f067a43c9382d7fc70f30fab9f0.
2022-03-08 23:16:53 +01:00
1F616EMO 25fa3cab03 add translates for `mcl_boats`
Co-authored-by: Emojigit <emojigit@noreply.git.minetest.land>
2022-03-08 23:16:53 +01:00
1F616EMO acbaf0fb65 add translate of README.md 2022-03-08 23:16:53 +01:00
1F616EMO cca4260f1c add translate for `doc_identifier` 2022-03-08 23:16:53 +01:00
1F616EMO 03c7e6df8a add zh_TW translate to `mcl_beds` and `mcl_core` 2022-03-08 23:16:53 +01:00
AFCMS c5e372f825 obtimize icons again
`optipng -strip all -o9`
2022-03-08 23:16:53 +01:00
AFCMS 599c147ec8 make menu icon smaller (128x) 2022-03-08 23:16:53 +01:00
AFCMS d242167048 add @epCode logo 2022-03-08 23:16:53 +01:00
AFCMS dfec4a5422 Revert "move barrels to mcl_chests"
This reverts commit a272322cb5.
2022-03-08 23:16:53 +01:00
AFCMS cfe9067393 apply @kay27 fix to `mcl_util.drop_items_from_meta_container` 2022-03-08 23:16:53 +01:00
AFCMS 1f000e760d move barrels to mcl_chests 2022-03-08 23:16:53 +01:00
AFCMS a7e234765e fix barrel top texture rotation 2022-03-08 23:16:53 +01:00
AFCMS 29e9f45b6e cleanup barrel TODO list 2022-03-08 23:16:53 +01:00
AFCMS 6e0adcedef simplify random dropping position code 2022-03-08 23:16:53 +01:00
AFCMS 4a8f73dd10 rename `mcl_util.drop_items_container_get` to `drop_items_from_meta_container` 2022-03-08 23:16:53 +01:00
AFCMS 3c2182a677 add barrel tooltip help text 2022-03-08 23:16:53 +01:00
AFCMS 87fde16918 add doc description to barrels 2022-03-08 23:16:53 +01:00
AFCMS 3eb6753d92 fix broken tree placement 2022-03-08 23:16:53 +01:00
AFCMS 80bfb18d35 fixes 2022-03-08 23:16:53 +01:00
AFCMS 2d07f85697 add craft 2022-03-08 23:16:53 +01:00
AFCMS eeb288dca7 add barrel 2022-03-08 23:16:53 +01:00
cora 0886f16618 Do not send redundant bone position and properties 2022-03-08 23:16:53 +01:00
kabou 77c893453f Reinstate nil check in on_place_bucket.
* Oops, nil checks on registered_node[name] were erroneously optimized
  away, risking crashes.  Reinstate those checks.
2022-03-08 23:16:52 +01:00
122 changed files with 2339 additions and 448 deletions

3
.gitignore vendored
View File

@ -1,2 +1,5 @@
# Text Editor TMP Files # Text Editor TMP Files
*.swp *.swp
*.blend1
*.blend2
*.blend3

View File

@ -0,0 +1,324 @@
# MineClone 2
一個非官方的Minetest遊戲遊玩方式和Minecraft類似。由davedevils從MineClone分拆。
由許多人開發。並非由Mojang Studios開發。<!-- "Mojang AB"'s Name changed at 2020/05, main README should change too -->
版本0.71.0
### 遊玩
你開始在一個完全由方塊隨機生成的世界裡。你可以探索這個世界,挖掘和建造世界上幾乎所有的方塊,以創造新的結構。你可以選擇在「生存模式」中進行遊戲,在這個模式中,你必須與怪物戰鬥,飢餓求生,並在遊戲的其他各個環節中慢慢進步,如採礦、養殖、建造機器等等。
或者你也可以在「創造模式」中玩,在這個模式中,你可以瞬間建造大部分東西。
#### Gameplay summary
* 沙盒式遊戲,沒有明確目標
* 生存:與怪物和飢餓搏鬥
* 挖礦來獲得礦物和寶物
* 附魔:獲得經驗值並以附魔強化你的工具
* 使用收集的方塊來創造偉大的建築
* 收集鮮花(和其他染料來源),令世界多姿多彩
* 找些種子並開始耕種
* 尋找或合成數百個物品之一
* 建立一個鐵路系統,並從礦車中得到樂趣
* 用紅石電路建造複雜的機器
* 在創造模式下,你幾乎可以免費建造任何東西,而且沒有限制。
## 如何開始
### 開始生存
* **挖樹幹**直到其破裂並收集木材
* 將木頭**放入2×2的格子中**你的物品欄中的「合成格子」然後製作4塊木材。
* 將4塊木材按2×2的形狀擺放在合成格子裡製作成合成臺。
* **右鍵單擊製作臺**以獲得3×3製作網格製作更複雜的東西
* 使用**合成指南**(書形圖標)了解所有可能的合成方式
* **製作一個木鎬**,這樣你就可以挖石頭了。
* 不同的工具可以打破不同種類的方塊。試試吧!
* 繼續玩你想玩的。盡情享受吧!
### 耕種
* 找到種子
* 合成鋤頭
* 用鋤頭右鍵點擊泥土或類似的方塊,創建農田
* 將種子放在農田上,看著它們長出來
* Collect plant when fully grown
* If near water, farmland becomes wet and speeds up growth
### Furnace
* Craft furnace
* Furnace allows you to obtain more items
* Upper slot must contain a smeltable item (example: iron ore)
* Lower slot must contain a fuel item (example: coal)
* See tooltips in crafting guide to learn about fuels and smeltable items
### Additional help
More help about the gameplay, blocks items and much more can be found from inside
the game. You can access the help from your inventory menu.
### Special items
The following items are interesting for Creative Mode and for adventure
map builders. They can not be obtained in-game or in the creative inventory.
* Barrier: `mcl_core:barrier`
Use the `/giveme` chat command to obtain them. See the in-game help for
an explanation.
#### Incomplete items
These items do not work yet, but you can get them with `/giveme` for testing:
* Minecart with Chest: `mcl_minecarts:chest_minecart`
* Minecart with Furnace: `mcl_minecarts:furnace_minecart`
* Minecart with Hopper: `mcl_minecarts:hopper_minecart`
* Minecart with Command Block: `mcl_minecarts:command_block_minecart`
## Installation
This game requires [Minetest](http://minetest.net) to run (version 5.0.0 or
later). So you need to install Minetest first. Only stable versions of Minetest
are officially supported.
There is no support for running MineClone 2 in development versions of Minetest.
To install MineClone 2 (if you haven't already), move this directory into the
“games” directory of your Minetest data directory. Consult the help of
Minetest to learn more.
## Project description
The main goal of **MineClone 2** is to be a clone of Minecraft and to be released as free software.
* **開發目標:我的世界, Java版, 版本 1.12**
* MineClone2還包括Minetest支持的Optifine功能。
* 後期Minecraft版本的功能可能會偷偷加入但它們的優先級較低。
* 總的來說Minecraft的目標是在Minetest目前允許的情況下進行克隆。
* 克隆Minecraft是最優先的。
* MineClone2將使用不同的圖形和聲音但風格相似。
* 克隆界面沒有優先權。只會被粗略地模仿。
* 在Minetest中發現的局限性將在開發過程中被記錄和報告。
## 完成程度
該遊戲目前處於**alpha**階段。
它是可玩的,但尚未完成,預計會出現許多錯誤。
向後兼容性是**不能保證的**更新你的世界可能會造成大大小小的bug比如「缺少節點」的錯誤甚至崩潰
已經實現以下功能:
* 工具,武器
* 盔甲
* 合成和熔煉系統2×2 合成格, 合成臺 (3×3 合成格), 熔爐, 合成教學
* 儲物箱,大型儲物箱,終界箱和界伏盒
* 熔爐, 漏斗
* 飢餓和飽食
* 大多數怪物和動物
* Minecraft 1.12中的所有礦物<!-- Minecraft 1.17 added copper, so here must mark the version is 1.12, then main README should also add this -->
* 主世界的大部分方塊
* 水和岩漿
* 天氣
* 28個生態域
* 地獄,熾熱的維度
* 紅石電路(部分)
* 礦車(部分)
* 狀態效果(部分)
* 經驗系統
* 附魔
* 釀造,藥水,藥水箭(部分)
* 船
* 火
* 建築方塊:樓梯、半磚、門、地板門、柵欄、柵欄門、牆。
* 時鐘
* 指南針
* 海綿
* 史萊姆方塊(不與紅石互動)
* 小植物和樹苗
* 染料
* 旗幟
* 裝飾方塊:玻璃、染色玻璃、玻璃片、鐵柵欄、陶土(和染色版本)、頭顱等
* 物品展示框
* 唱片機
* 床
* 物品欄
* 創造模式物品欄
* 生產
* 書和羽毛筆
* 一些服務器命令
* 還有更多!
以下是不完整的特性:
* 生成結構(特別是村莊)
* 一些怪物和動物
* 紅石系統
* 終界
* 特殊的礦車
* 一些不簡單的方塊和物品。
額外功能在Minecraft 1.11中沒有)。
* 內置合成指南,向你展示製作和熔煉的配方
* 遊戲中的幫助系統包含了大量關於遊戲基礎知識、方塊、物品等方面的幫助。
* 臨時製作配方。它們的存在只是為了在你不在創造模式下時,提供一些其他無法獲得的物品。這些配方將隨著開發的進行和更多功能的出現而被移除。
* v6地圖生成器中箱子裡的樹苗。
* 完全可修改得益於Minetest強大的Lua API
* 新的方塊和物品:
* 查找工具,顯示觸及事物的幫助
* 更多的半磚和樓梯
* 地獄磚柵欄門
* 紅地獄磚柵欄
* 紅地獄磚柵欄門
與Minecraft的技性術差異
* 高度限制為31000格(遠高於Minecraft)
* 水平世界大小約為62000×62000格比Minecraft中的小得多但仍然非常大
* 仍然非常不完整和有問題
* 塊、物品、敵人和其他功能缺失。
* 一些項目的名稱略有不同,以便於區分。
* 唱片機的音樂不同
* 不同的材質(像素完美)
* 不同的聲音(各種來源)
* 不同的引擎Minetest
...最後MineClone2是自由軟件
## 錯誤報告
請在此處報告所有錯誤和缺少的功能:
<https://git.minetest.land/MineClone2/MineClone2/issues>
## Chating with the community
我們有Discord交流羣
<https://discord.gg/84GKcxczG3>
## Other readme files
* `LICENSE.txt`GPLv3許可文本
* `CONTRIBUTING.md`: 為那些想參與貢獻的人提供資訊
* `MISSING_ENGINE_FEATURES.md`: MineClone2需要改进Minetest中缺失的功能列表。
* `API.md`: 關於MineClone2的API
## 參與者
有這麼多人要列出抱歉。詳情請查看各mod目錄。本節只是粗略地介紹了本遊戲的核心作者。
### 程式碼
* [Wuzzy](https://forum.minetest.net/memberlist.php?mode=viewprofile&u=3082)大多數mod的主要程序員已退休
* davedevilsMineClone 2的原型——「MineClone」的創造者
* [ex-bart](https://github.com/ex-bart):紅石比較器
* [Rootyjr](https://github.com/Rootyjr):釣竿和錯誤修復
* [aligator](https://github.com/aligator):改進門
* [ryvnf](https://github.com/ryvnf):爆炸物理
* MysticTempest錯誤修復
* [bzoss](https://github.com/bzoss):狀態效果,釀造,藥水
* kay27 <kay27@bk.ru>:經驗系統,錯誤修復和優化(當前維護者)
* [EliasFleckenstein03](https://github.com/EliasFleckenstein03):終界水晶,附魔,燃燒的怪物/玩家,箱子的動畫和錯誤修復(當前維護者)
* epCode更好的玩家動畫新徽標
* 2mac修復動力鐵軌的錯誤
* 更多:待篇寫 (請查看各mod目錄)
#### Mod概括
* `controls`: Arcelmi
* `flowlib`: Qwertymine13
* `walkover`: lordfingle
* `drippingwater`: kddekadenz
* `mobs_mc`: maikerumine, 22i and others
* `awards`: rubenwardy
* `screwdriver`: RealBadAngel, Maciej Kastakin, Minetest contributors
* `xpanes`: Minetest contributors
* `mesecons` mods: Jeija and contributors
* `wieldview`: Stuart Jones
* `mcl_meshhand`: Based on `newhand` by jordan4ibanez
* `mcl_mobs`: Based on Mobs Redo [`mobs`] by TenPlus1 and contributors
* 大多其他的Mod: Wuzzy
每个mod的详细參與者可以在各个mod目录中找到。
### 圖形
* [XSSheep](http://www.minecraftforum.net/members/XSSheep)主要作者Minecraft 1.11的Pixel Perfection资源包的制作者
* [Wuzzy](https://forum.minetest.net/memberlist.php?mode=viewprofile&u=3082):主菜單圖像和各種編輯和添加的材質包
* [kingoscargames](https://github.com/kingoscargames):現有材質的各種編輯和添加
* [leorockway](https://github.com/leorockway):怪物紋理的一些編輯
* [xMrVizzy](https://minecraft.curseforge.com/members/xMrVizzy):釉陶(材質以後會被替換)
* yutyo <tanakinci2002@gmail.com>MineClone2標志
* 其他GUI圖片
### 翻譯
* Wuzzy德語
* Rocher Laurent <rocherl@club-internet.fr>:法語
* wuniversales西班牙語
* kay27 <kay27@bk.ru>:俄語
* [Emoji](https://toyshost2.ddns.net):繁體中文<!-- Hi, after the translate finish, this name should add to the main README too! -->
### 模型
* [22i](https://github.com/22i):所有模型的作者
* [tobyplowy](https://github.com/tobyplowy)對上述模型進行UV映射修復
### 聲音和音樂
多種來源。 有關詳細信息請參見相應的mod目錄。
### 特殊感謝
* Wuzzy感謝他啟動和維護MineClone2多年。
* celeron55創建Minetest。
* Minetest的社區提供了大量的mods選擇其中一些最終被納入MineClone 2。
* Jordach為《Big Freaking Dig》的唱片機音樂合輯而來
* 花了太多時間為Minecraft Wiki寫作的工作狂。它是創建這個遊戲的寶貴資源。
* Notch和Jeb是Minecraft背后的主要力量
* XSSheep用於創建Pixel Perfection資源包。
* [22i](https://github.com/22i) 提供出色的模型和支持
* [maikerumine](http://github.com/maikerumine) 揭開生物和生物群落的序幕
## 給程序員的信息
你可以在「API.md」中找到有趣和有用的信息。
## 法律信息
這是一款粉絲開發的遊戲並非由Mojang AB開發或認可。
複製是一種愛的行為。請複制和分享! <3
下面是詳細的法律條文,有需要的朋友可以參考。
### License of source code
```
MineClone 2 (by kay27, EliasFleckenstein, Wuzzy, davedevils and countless others)
is an imitation of Minecraft.
MineClone 2 is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 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 General Public License (in the LICENSE.txt file) for more
details.
In the mods you might find in the read-me or license
text files a different license. This counts as dual-licensing.
You can choose which license applies to you: Either the
license of MineClone 2 (GNU GPLv3) or the mod's license.
MineClone 2 is a direct continuation of the discontinued MineClone
project by davedevils.
Mod credits:
See `README.txt` or `README.md` in each mod directory for information about other authors.
For mods that do not have such a file, the license is the source code license
of MineClone 2 and the author is Wuzzy.
```
### License of media (textures and sounds)
```
No non-free licenses are used anywhere.
The textures, unless otherwise noted, are based on the Pixel Perfection resource pack for Minecraft 1.11,
authored by XSSheep. Most textures are verbatim copies, while some textures have been changed or redone
from scratch.
The glazed terracotta textures have been created by (MysticTempest)[https://github.com/MysticTempest].
Source: <https://www.planetminecraft.com/texture_pack/131pixel-perfection/>
License: [CC BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)
The main menu images are release under: [CC0](https://creativecommons.org/publicdomain/zero/1.0/)
All other files, unless mentioned otherwise, fall under:
Creative Commons Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
http://creativecommons.org/licenses/by-sa/3.0/
See README.txt in each mod directory for detailed information about other authors.
```

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 547 KiB

After

Width:  |  Height:  |  Size: 51 KiB

BIN
menu/icon_big.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 419 KiB

After

Width:  |  Height:  |  Size: 830 KiB

View File

@ -0,0 +1,2 @@
# textdomain:mcl_explosions
@1 was caught in an explosion.=@1 被炸飛了

View File

@ -357,6 +357,32 @@ function mcl_util.get_first_occupied_inventory_slot(inventory, listname)
return mcl_util.get_eligible_transfer_item_slot(inventory, listname) return mcl_util.get_eligible_transfer_item_slot(inventory, listname)
end end
local function drop_item_stack(pos, stack)
if not stack or stack:is_empty() then return end
local drop_offset = vector.new(math.random() - 0.5, 0, math.random() - 0.5)
minetest.add_item(vector.add(pos, drop_offset), stack)
end
function mcl_util.drop_items_from_meta_container(listname)
return function(pos, oldnode, oldmetadata)
if oldmetadata and oldmetadata.inventory then
-- process in after_dig_node callback
local main = oldmetadata.inventory.main
if not main then return end
for _, stack in pairs(main) do
drop_item_stack(pos, stack)
end
else
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
for i = 1, inv:get_size("main") do
drop_item_stack(pos, inv:get_stack("main", i))
end
meta:from_table()
end
end
end
-- Returns true if item (itemstring or ItemStack) can be used as a furnace fuel. -- Returns true if item (itemstring or ItemStack) can be used as a furnace fuel.
-- Returns false otherwise -- Returns false otherwise
function mcl_util.is_fuel(item) function mcl_util.is_fuel(item)

View File

@ -84,7 +84,7 @@ function image:encode()
end end
function image:save(filename) function image:save(filename)
local f = assert(io.open(filename, "w")) local f = assert(io.open(filename, "wb"))
f:write(self.data) f:write(self.data)
f:close() f:close()
end end

View File

@ -0,0 +1,11 @@
# textdomain: mcl_boats
Acacia Boat=相思木船
Birch Boat=白樺木船
Boat=船
Boats are used to travel on the surface of water.=船是用來在水上行走的交通工具。
Dark Oak Boat=黑橡木船
Jungle Boat=叢林木船
Oak Boat=橡木船
Rightclick on a water source to place the boat. Rightclick the boat to enter it. Use [Left] and [Right] to steer, [Forwards] to speed up and [Backwards] to slow down or move backwards. Rightclick the boat again to leave it, punch the boat to make it drop as an item.=右鍵單擊水源以放置船。右鍵單擊船以搭乘它。使用[左]和[右]進行轉向,[向前]加快速度,[向後]減速或向後移動。再次右鍵單擊船以離開它,打擊船以使其掉落為物品。
Spruce Boat=杉木船
Water vehicle=水上交通工具

View File

@ -26,20 +26,64 @@ function mcl_burning.get_collisionbox(obj, smaller, storage)
end end
end end
local find_nodes_in_area = minetest.find_nodes_in_area
function mcl_burning.get_touching_nodes(obj, nodenames, storage) function mcl_burning.get_touching_nodes(obj, nodenames, storage)
local pos = obj:get_pos() local pos = obj:get_pos()
local minp, maxp = mcl_burning.get_collisionbox(obj, true, storage) local minp, maxp = mcl_burning.get_collisionbox(obj, true, storage)
local nodes = minetest.find_nodes_in_area(vector.add(pos, minp), vector.add(pos, maxp), nodenames) local nodes = find_nodes_in_area(vector.add(pos, minp), vector.add(pos, maxp), nodenames)
return nodes return nodes
end end
-- Manages the fire animation on a burning player's HUD
--
-- Parameters:
-- player - a valid player object;
--
-- If the player already has a fire HUD, updates the burning animation.
-- If the fire does not have a fire HUD, initializes the HUD.
--
function mcl_burning.update_hud(player)
local animation_frames = tonumber(minetest.settings:get("fire_animation_frames")) or 8
local hud_flame_animated = "mcl_burning_hud_flame_animated.png^[opacity:180^[verticalframe:" .. animation_frames .. ":"
local storage = mcl_burning.get_storage(player)
if not storage.fire_hud_id then
storage.animation_frame = 1
storage.fire_hud_id = player:hud_add({
hud_elem_type = "image",
position = {x = 0.5, y = 0.5},
scale = {x = -100, y = -100},
text = hud_flame_animated .. storage.animation_frame,
z_index = 1000,
})
else
storage.animation_frame = storage.animation_frame + 1
if storage.animation_frame > animation_frames - 1 then
storage.animation_frame = 0
end
player:hud_change(storage.fire_hud_id, "text", hud_flame_animated .. storage.animation_frame)
end
end
-- Sets and object state as burning and adds a fire animation to the object.
--
-- Parameters:
-- obj - may be a player or a lua_entity;
-- burn_time - sets the object's burn duration;
--
-- If obj is a player, adds a fire animation to the HUD, if obj is a
-- lua_entity, adds an animated fire entity to obj.
-- The effective burn duration is modified by obj's armor protection.
-- If obj was already burning, its burn duration is updated if the current
-- duration is less than burn_time.
-- If obj is dead, fireproof or a creative player, this function does nothing.
--
function mcl_burning.set_on_fire(obj, burn_time) function mcl_burning.set_on_fire(obj, burn_time)
if obj:get_hp() < 0 then if obj:get_hp() < 0 then
return return
end end
local storage = mcl_burning.get_storage(obj)
local luaentity = obj:get_luaentity() local luaentity = obj:get_luaentity()
if luaentity and luaentity.fire_resistant then if luaentity and luaentity.fire_resistant then
return return
@ -60,43 +104,42 @@ function mcl_burning.set_on_fire(obj, burn_time)
end end
end end
end end
if max_fire_prot_lvl > 0 then if max_fire_prot_lvl > 0 then
burn_time = burn_time - math.floor(burn_time * max_fire_prot_lvl * 0.15) burn_time = burn_time - math.floor(burn_time * max_fire_prot_lvl * 0.15)
end end
end end
if not storage.burn_time or burn_time >= storage.burn_time then local storage = mcl_burning.get_storage(obj)
if obj:is_player() then if storage.burn_time then
mcl_burning.channels[obj]:send_all(tostring(mcl_burning.animation_frames)) if burn_time > storage.burn_time then
mcl_burning.channels[obj]:send_all("start") storage.burn_time = burn_time
end end
storage.burn_time = burn_time return
storage.fire_damage_timer = 0 end
storage.burn_time = burn_time
storage.fire_damage_timer = 0
local fire_entity = minetest.add_entity(obj:get_pos(), "mcl_burning:fire") local minp, maxp = mcl_burning.get_collisionbox(obj, false, storage)
local minp, maxp = mcl_burning.get_collisionbox(obj, false, storage) local size = vector.subtract(maxp, minp)
local obj_size = obj:get_properties().visual_size size = vector.multiply(size, vector.new(1.1, 1.2, 1.1))
size = vector.divide(size, obj:get_properties().visual_size)
local vertical_grow_factor = 1.2 local fire_entity = minetest.add_entity(obj:get_pos(), "mcl_burning:fire")
local horizontal_grow_factor = 1.1 fire_entity:set_properties({visual_size = size})
local grow_vector = vector.new(horizontal_grow_factor, vertical_grow_factor, horizontal_grow_factor) fire_entity:set_attach(obj, "", vector.new(0, size.y * 5, 0), vector.new(0, 0, 0))
local size = vector.subtract(maxp, minp) if obj:is_player() then
size = vector.multiply(size, grow_vector) mcl_burning.update_hud(obj)
size = vector.divide(size, obj_size) end
local offset = vector.new(0, size.y * 10 / 2, 0)
fire_entity:set_properties({visual_size = size}) -- FIXME: does this code make sense? It removes attached fire luaentities from
fire_entity:set_attach(obj, "", offset, {x = 0, y = 0, z = 0}) -- another object that happen to be at the same position.
local fire_luaentity = fire_entity:get_luaentity() local fire_luaentity = fire_entity:get_luaentity()
for _, other in pairs(minetest.get_objects_inside_radius(fire_entity:get_pos(), 0)) do
for _, other in pairs(minetest.get_objects_inside_radius(fire_entity:get_pos(), 0)) do local other_luaentity = other:get_luaentity()
local other_luaentity = other:get_luaentity() if other_luaentity and other_luaentity.name == "mcl_burning:fire" and other_luaentity ~= fire_luaentity then
if other_luaentity and other_luaentity.name == "mcl_burning:fire" and other_luaentity ~= fire_luaentity then other:remove()
other:remove() break
break
end
end end
end end
end end
@ -105,7 +148,9 @@ function mcl_burning.extinguish(obj)
if mcl_burning.is_burning(obj) then if mcl_burning.is_burning(obj) then
local storage = mcl_burning.get_storage(obj) local storage = mcl_burning.get_storage(obj)
if obj:is_player() then if obj:is_player() then
mcl_burning.channels[obj]:send_all("stop") if storage.fire_hud_id then
obj:hud_remove(storage.fire_hud_id)
end
mcl_burning.storage[obj] = {} mcl_burning.storage[obj] = {}
else else
storage.burn_time = nil storage.burn_time = nil

View File

@ -1,18 +1,27 @@
local modpath = minetest.get_modpath(minetest.get_current_modname()) local modpath = minetest.get_modpath(minetest.get_current_modname())
local pairs = pairs
local get_connected_players = minetest.get_connected_players
local get_item_group = minetest.get_item_group
mcl_burning = { mcl_burning = {
storage = {}, -- the storage table holds a list of objects (players,luaentities) and tables
channels = {}, -- associated with these objects. These tables have the following attributes:
animation_frames = tonumber(minetest.settings:get("fire_animation_frames")) or 8 -- burn_time:
-- Remaining time that object will burn.
-- fire_damage_timer:
-- Timer for dealing damage every second while burning.
-- fire_hud_id:
-- HUD id of the flames animation on a burning player's HUD.
-- animation_frame:
-- The HUD's current animation frame, used by update_hud().
-- collisionbox_cache:
-- Used by mcl_burning.get_collisionbox() to avoid recalculations.
storage = {}
} }
dofile(modpath .. "/api.lua") dofile(modpath .. "/api.lua")
local pairs = pairs
local get_connected_players = minetest.get_connected_players
local get_item_group = minetest.get_item_group
minetest.register_globalstep(function(dtime) minetest.register_globalstep(function(dtime)
for _, player in pairs(get_connected_players()) do for _, player in pairs(get_connected_players()) do
local storage = mcl_burning.storage[player] local storage = mcl_burning.storage[player]
@ -44,25 +53,36 @@ minetest.register_on_respawnplayer(function(player)
mcl_burning.extinguish(player) mcl_burning.extinguish(player)
end) end)
function mcl_burning.init_player(player) minetest.register_on_joinplayer(function(player)
local meta = player:get_meta() local storage = {}
-- NOTE: mcl_burning:data may be "return nil" (which deserialize into nil) for reasons unknown. local burn_data = player:get_meta():get_string("mcl_burning:data")
if meta:get_string("mcl_burning:data"):find("return nil", 1, true) then if burn_data ~= "" then
minetest.log("warning", "[mcl_burning] 'mcl_burning:data' player meta field is invalid! Please report this bug") storage = minetest.deserialize(burn_data)
end end
mcl_burning.storage[player] = meta:contains("mcl_burning:data") and minetest.deserialize(meta:get_string("mcl_burning:data")) or {} mcl_burning.storage[player] = storage
mcl_burning.channels[player] = minetest.mod_channel_join("mcl_burning:" .. player:get_player_name()) if storage.burn_time and storage.burn_time > 0 then
mcl_burning.update_hud(player)
end
end)
local function on_leaveplayer(player)
local storage = mcl_burning.storage[player]
storage.fire_hud_id = nil
player:get_meta():set_string("mcl_burning:data", minetest.serialize(storage))
mcl_burning.storage[player] = nil
end end
minetest.register_on_joinplayer(function(player)
mcl_burning.init_player(player)
end)
minetest.register_on_leaveplayer(function(player) minetest.register_on_leaveplayer(function(player)
player:get_meta():set_string("mcl_burning:data", minetest.serialize(mcl_burning.storage[player])) on_leaveplayer(player)
mcl_burning.storage[player] = nil
end) end)
minetest.register_on_shutdown(function()
for _,player in ipairs(minetest.get_connected_players()) do
on_leaveplayer(player)
end
end)
local animation_frames = tonumber(minetest.settings:get("fire_animation_frames")) or 8
minetest.register_entity("mcl_burning:fire", { minetest.register_entity("mcl_burning:fire", {
initial_properties = { initial_properties = {
@ -70,15 +90,10 @@ minetest.register_entity("mcl_burning:fire", {
collisionbox = {0, 0, 0, 0, 0, 0}, collisionbox = {0, 0, 0, 0, 0, 0},
visual = "upright_sprite", visual = "upright_sprite",
textures = { textures = {
name = "mcl_burning_entity_flame_animated.png", "mcl_burning_entity_flame_animated.png",
animation = { "mcl_burning_entity_flame_animated.png"
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 1.0,
},
}, },
spritediv = {x = 1, y = mcl_burning.animation_frames}, spritediv = {x = 1, y = animation_frames},
pointable = false, pointable = false,
glow = -1, glow = -1,
backface_culling = false, backface_culling = false,
@ -86,26 +101,25 @@ minetest.register_entity("mcl_burning:fire", {
animation_frame = 0, animation_frame = 0,
animation_timer = 0, animation_timer = 0,
on_activate = function(self) on_activate = function(self)
self.object:set_sprite({x = 0, y = 0}, mcl_burning.animation_frames, 1.0 / mcl_burning.animation_frames) self.object:set_sprite({x = 0, y = 0}, animation_frames, 1.0 / animation_frames)
end, end,
on_step = function(self) on_step = function(self, dtime)
if not self:sanity_check() then
self.object:remove()
end
end,
sanity_check = function(self)
local parent = self.object:get_attach() local parent = self.object:get_attach()
if not parent then if not parent then
return false self.object:remove()
return
end end
local storage = mcl_burning.get_storage(parent) local storage = mcl_burning.get_storage(parent)
if not storage or not storage.burn_time then if not storage or not storage.burn_time then
return false self.object:remove()
return
end
if parent:is_player() then
self.animation_timer = self.animation_timer + dtime
if self.animation_timer >= 0.1 then
self.animation_timer = 0
mcl_burning.update_hud(parent)
end
end end
return true
end, end,
}) })

View File

@ -0,0 +1,3 @@
# textdomain: mcl_falling_nodes
@1 was smashed by a falling anvil.=@1 被鐵砧壓扁了。
@1 was smashed by a falling block.=@1 被掉下來的方塊壓扁了。

View File

@ -0,0 +1,11 @@
# textdomain: mcl_mobs
Peaceful mode active! No monsters will spawn.=和平模式已啓用!不會生成怪物。
This allows you to place a single mob.=允許你放置一個生物。
Just place it where you want the mob to appear. Animals will spawn tamed, unless you hold down the sneak key while placing. If you place this on a mob spawner, you change the mob it spawns.=把它放在你希望生物出現的地方。除非你在放置的時候按住潛行鍵,否則動物會被馴服地產生。如果你把它放在一個生怪磚上,你就會改變它所產的生物。
You need the “maphack” privilege to change the mob spawner.=你要「maphack」權限來修改生怪磚。
Name Tag=命名牌
A name tag is an item to name a mob.=命名牌是一個用於命名生物的物品
Before you use the name tag, you need to set a name at an anvil. Then you can use the name tag to name a mob. This uses up the name tag.=在使用名字標籤之前,你需要在一個鐵砧上設置一個名字。然後你就可以用名字標籤來給生物命名。這會消耗命名牌。
Only peaceful mobs allowed!=只允許和平生物!
Give names to mobs=替生物命名
Set name at anvil=在鐵砧上設置名字

View File

@ -0,0 +1,2 @@
# textdomain:mcl_paintings
Painting=畫

View File

@ -5,6 +5,8 @@
local S = minetest.get_translator(minetest.get_current_modname()) local S = minetest.get_translator(minetest.get_current_modname())
local mod_target = minetest.get_modpath("mcl_target")
--################### --###################
--################### BLAZE --################### BLAZE
--################### --###################
@ -195,19 +197,19 @@ mobs:register_arrow("mobs_mc:blaze_fireball", {
-- Node hit, make fire -- Node hit, make fire
hit_node = function(self, pos, node) hit_node = function(self, pos, node)
if node.name ~= "air" then if node == "air" then
local pos_above = table.copy(pos) minetest.set_node(pos, {name = mobs_mc.items.fire})
pos_above.y = pos_above.y + 1
minetest.set_node(pos_above, {name=mobs_mc.items.fire})
else else
local v = self.object:get_velocity() if self._shot_from_dispenser and mod_target and node == "mcl_target:target_off" then
v = vector.normalize(v) mcl_target.hit(vector.round(pos), 0.4) --4 redstone ticks
end
local v = vector.normalize(self.object:get_velocity())
local crashpos = vector.subtract(pos, v) local crashpos = vector.subtract(pos, v)
local crashnode = minetest.get_node(crashpos) local crashnode = minetest.get_node(crashpos)
-- Set fire if node is air, or a replacable flammable node (e.g. a plant) -- Set fire if node is air, or a replacable flammable node (e.g. a plant)
if crashnode.name == "air" or if crashnode.name == "air" or
(minetest.registered_nodes[crashnode.name].buildable_to and minetest.get_item_group(crashnode.name, "flammable") >= 1) then (minetest.registered_nodes[crashnode.name].buildable_to and minetest.get_item_group(crashnode.name, "flammable") >= 1) then
minetest.set_node(crashpos, {name=mobs_mc.items.fire}) minetest.set_node(crashpos, {name = mobs_mc.items.fire})
end end
end end
end end

View File

@ -0,0 +1,4 @@
# textdomain: lightning
@1 was struck by lightning.=@1 被閃電擊斃。
Let lightning strike at the specified position or yourself=讓閃電擊中指定位置或自己
No position specified and unknown player=未指定位置且玩家未知

View File

@ -0,0 +1,3 @@
# textdomain: mcl_void_damage
The void is off-limits to you!=你不可以進入虛空!
@1 fell into the endless void.=@1 掉到世界外面了。

View File

@ -0,0 +1,8 @@
# textdomain: mcl_weather
Gives ability to control weather=賦予控制天氣的能力
Changes the weather to the specified parameter.=將天氣改為指定的參數。
Error: No weather specified.=錯誤:未指定天氣。
Error: Invalid parameters.=錯誤:無效參數。
Error: Duration can't be less than 1 second.=錯誤延續時間不可以短於1秒。
Error: Invalid weather specified. Use “clear”, “rain”, “snow” or “thunder”.=錯誤不明天氣。請使用「clear」、「rain」、「snow」或「thunder」。
Toggles between clear weather and weather with downfall (randomly rain, thunderstorm or snow)=在晴朗的天氣和降雨天氣之間切換(隨機選擇雨、雷暴或雪)。

View File

@ -0,0 +1,18 @@
# textdomain:doc_identifier
Error: This node, item or object is undefined. This is always an error.=錯誤:該方塊、物品或實體未定義。這總是一個錯誤。
This can happen for the following reasons:=發生這種情況的原因有機會是:
• The mod which is required for it is not enabled=• 未啟用所需的MOD
• The author of the game or a mod has made a mistake=• 遊戲或mod的作者犯了一個錯誤
It appears to originate from the mod “@1”, which is enabled.=它似乎來自以啟用的mod「@1」。
It appears to originate from the mod “@1”, which is not enabled!=它似乎來自沒啟用的mod「@1」
Its identifier is “@1”.=其標識符為「@1」。
Lookup Tool=幫助工具
No help entry for this block could be found.=找不到此方塊的幫助條目。
No help entry for this item could be found.=找不到此物品的幫助條目。
No help entry for this object could be found.=找不到此實體的幫助條目。
OK=OK
Punch any block, item or other thing about you wish to learn more about. This will open up the appropriate help entry. The tool comes in two modes which are changed by using. In liquid mode, this tool points to liquids as well while in solid mode this is not the case.=擊打任何你想了解更多的方塊、物品或其他事情。這將打開相應的幫助條目。該工具有兩種模式,可以通過使用來改變。在液體模式下,這個工具也會指向液體,而在固體模式下則不會這樣。
This block cannot be identified because the world has not materialized at this point yet. Try again in a few seconds.=方塊所在的區塊未加載,請等一下在試一次。
This is a player.=這是一個玩家。
This useful little helper can be used to quickly learn more about about one's closer environment. It identifies and analyzes blocks, items and other things and it shows extensive information about the thing on which it is used.=這個有用的小幫手可以用來快速了解自己所處的近距離環境。它可以識別和分析區塊、物品和其他事物。當你對着一個方塊、物品或實體使用它時,可以顯示出那個事物的大量信息。
Show help for pointed thing=顯示選中方塊的資訊

View File

@ -548,7 +548,7 @@ local function get_recipe_fs(data, iY)
shapeless and "shapeless" or "furnace" shapeless and "shapeless" or "furnace"
if recipe.type == "cooking" then if recipe.type == "cooking" then
icon = "default_furnace_front_active.png" icon = "craftguide_furnace.png"
elseif not custom_recipe then elseif not custom_recipe then
icon = fmt("craftguide_%s.png", icon) icon = fmt("craftguide_%s.png", icon)
end end

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 B

View File

@ -76,8 +76,6 @@ function tt.reload_itemstack_description(itemstack)
orig_desc = minetest.colorize(tt.NAME_COLOR, meta:get_string("name")) orig_desc = minetest.colorize(tt.NAME_COLOR, meta:get_string("name"))
end end
local desc = apply_snippets(orig_desc, itemstring, toolcaps or def.tool_capabilities, itemstack) local desc = apply_snippets(orig_desc, itemstring, toolcaps or def.tool_capabilities, itemstack)
if desc ~= orig_desc then meta:set_string("description", desc)
meta:set_string("description", desc)
end
end end
end end

View File

@ -0,0 +1,6 @@
# textdomain: hudbars
Health=生命
Breath=氧氣
# Default format string for progress bar-style HUD bars, e.g. “Health 5/20”
@1: @2/@3=

View File

@ -1,5 +1,7 @@
local S = minetest.get_translator(minetest.get_current_modname()) local S = minetest.get_translator(minetest.get_current_modname())
local mod_target = minetest.get_modpath("mcl_target")
minetest.register_entity("mcl_experience:bottle",{ minetest.register_entity("mcl_experience:bottle",{
textures = {"mcl_experience_bottle.png"}, textures = {"mcl_experience_bottle.png"},
hp_max = 1, hp_max = 1,
@ -30,6 +32,9 @@ minetest.register_entity("mcl_experience:bottle",{
vertical = false, vertical = false,
texture = "mcl_particles_effect.png^[colorize:blue:127", texture = "mcl_particles_effect.png^[colorize:blue:127",
}) })
if mod_target and n == "mcl_target:target_off" then
mcl_target.hit(vector.round(pos), 0.4) --4 redstone ticks
end
self.object:remove() self.object:remove()
end end
end, end,

View File

@ -0,0 +1,7 @@
# textdomain: mcl_experience
[[<player>] <xp>]=[[<玩家名字>] <經驗值>]
Gives a player some XP=給予玩家經驗值
Error: Too many parameters!=錯誤:太多參數!
Error: Incorrect value of XP=錯誤:經驗值數值不當!
Error: Player not found=錯誤:找不到玩家!
Added @1 XP to @2, total: @3, experience level: @4=已給予 @2 @1 點經驗值,共有 @3 點,經驗等級:@4

View File

@ -0,0 +1,2 @@
# textdomain:hbarmor
Armor=防禦點數

View File

@ -0,0 +1,21 @@
# textdomain: mcl_inventory
Recipe book=合成教學
Help=幫助
Select player skin=選擇玩家皮膚
Achievements=成就
Building Blocks=建築方塊
Decoration Blocks=裝飾性方塊
Redstone=紅石
Transportation=交通
Brewing=釀造
Miscellaneous=雜項
Search Items=搜尋
Foodstuffs=食物
Tools=工具
Combat=戰鬥
Mobs=生物
Materials=材料
Survival Inventory=生存模式物品欄
Crafting=合成
Inventory=物品欄
@1/@2=

View File

@ -43,14 +43,20 @@ end
local function comparator_activate(pos, node) local function comparator_activate(pos, node)
local def = minetest.registered_nodes[node.name] local def = minetest.registered_nodes[node.name]
minetest.swap_node(pos, { name = def.comparator_onstate, param2 = node.param2 }) local onstate = def.comparator_onstate
if onstate then
minetest.swap_node(pos, { name = onstate, param2 = node.param2 })
end
minetest.after(0.1, comparator_turnon , {pos = pos, node = node}) minetest.after(0.1, comparator_turnon , {pos = pos, node = node})
end end
local function comparator_deactivate(pos, node) local function comparator_deactivate(pos, node)
local def = minetest.registered_nodes[node.name] local def = minetest.registered_nodes[node.name]
minetest.swap_node(pos, { name = def.comparator_offstate, param2 = node.param2 }) local offstate = def.comparator_offstate
if offstate then
minetest.swap_node(pos, { name = offstate, param2 = node.param2 })
end
minetest.after(0.1, comparator_turnoff, {pos = pos, node = node}) minetest.after(0.1, comparator_turnoff, {pos = pos, node = node})
end end

View File

@ -0,0 +1,70 @@
local S = minetest.get_translator("mcl_target")
local mod_farming = minetest.get_modpath("mcl_farming")
mcl_target = {}
function mcl_target.hit(pos, time)
minetest.set_node(pos, {name="mcl_target:target_on"})
mesecon.receptor_on(pos, mesecon.rules.alldirs)
local timer = minetest.get_node_timer(pos)
timer:start(time)
end
minetest.register_node("mcl_target:target_off", {
description = S("Target"),
_doc_items_longdesc = S("A target is a block that provides a temporary redstone charge when hit by a projectile."),
_doc_items_usagehelp = S("Throw a projectile on the target to activate it."),
tiles = {"mcl_target_target_top.png", "mcl_target_target_top.png", "mcl_target_target_side.png"},
groups = {hoey = 1},
sounds = mcl_sounds.node_sound_dirt_defaults({
footstep = {name="default_grass_footstep", gain=0.1},
}),
mesecons = {
receptor = {
state = mesecon.state.off,
rules = mesecon.rules.alldirs,
},
},
_mcl_blast_resistance = 0.5,
_mcl_hardness = 0.5,
})
minetest.register_node("mcl_target:target_on", {
description = S("Target"),
_doc_items_create_entry = false,
tiles = {"mcl_target_target_top.png", "mcl_target_target_top.png", "mcl_target_target_side.png"},
groups = {hoey = 1, not_in_creative_inventory = 1},
drop = "mcl_target:target_off",
sounds = mcl_sounds.node_sound_dirt_defaults({
footstep = {name="default_grass_footstep", gain=0.1},
}),
on_timer = function(pos, elapsed)
local node = minetest.get_node(pos)
if node.name == "mcl_target:target_on" then --has not been dug
minetest.set_node(pos, {name="mcl_target:target_off"})
mesecon.receptor_off(pos, mesecon.rules.alldirs)
end
end,
mesecons = {
receptor = {
state = mesecon.state.on,
rules = mesecon.rules.alldirs,
},
},
_mcl_blast_resistance = 0.5,
_mcl_hardness = 0.5,
})
if mod_farming then
minetest.register_craft({
output = "mcl_target:target_off",
recipe = {
{"", "mesecons:redstone", ""},
{"mesecons:redstone", "mcl_farming:hay_block", "mesecons:redstone"},
{"", "mesecons:redstone", ""},
},
})
end

View File

@ -0,0 +1,4 @@
# textdomain: mcl_target
Target=Cible
A target is a block that provides a temporary redstone charge when hit by a projectile.=La cible est un bloc qui se comporte comme une source d'énergie temporaire quand elle est frappée par un projectile.
Throw a projectile on the target to activate it.=Lancer un projectile sur la cible pour l'activer.

View File

@ -0,0 +1,4 @@
# textdomain: mcl_target
Target=
A target is a block that provides a temporary redstone charge when hit by a projectile.=
Throw a projectile on the target to activate it.=

View File

@ -0,0 +1,3 @@
name = mcl_target
author = AFCMS
depends = mesecons, mcl_sounds

Binary file not shown.

After

Width:  |  Height:  |  Size: 752 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 752 B

View File

@ -0,0 +1,16 @@
# textdomain: mcl_anvils
Set Name=命名
Repair and Name=修復與命名
Inventory=物品欄
Anvil=鐵砧
The anvil allows you to repair tools and armor, and to give names to items. It has a limited durability, however. Don't let it fall on your head, it could be quite painful!=鐵砧允許你修理工具和盔甲,並為物品命名。然而,它的耐久性有限。不要讓它落在你的頭上,這可能是相當痛苦的!
To use an anvil, rightclick it. An anvil has 2 input slots (on the left) and one output slot.=要使用一個鐵砧,右擊它。一個鐵砧有兩個輸入槽(在左邊)和一個輸出槽。
To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.=要重新命名物品,在其中一個物品槽裡放一個物品,同時保持另一個輸入槽為空。鍵入名稱,點擊回車或「設置名稱」,然後從輸出槽中取出重命名後的物品。
There are two possibilities to repair tools (and armor):=有兩種維修工具(和裝甲)的可能性:
• Tool + Tool: Place two tools of the same type in the input slots. The “health” of the repaired tool is the sum of the “health” of both input tools, plus a 12% bonus.=• 工具+工具。在輸入槽中放置兩個相同類型的工具。修復後的工具的耐久力是兩個輸入工具的耐久力之和加上12%的獎勵。
• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.=• 工具+材料。有些工具也可以通過與它所製成的物品結合起來進行修理。例如鐵鎬可以用鐵錠修復。這可以使工具的修復率提高25%。
Armor counts as a tool. It is possible to repair and rename a tool in a single step.=盔甲算作是一種工具。可以在一個步驟中修復和重命名一個工具。
The anvil has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the anvil gets damaged. Anvils also have a chance of being damaged when they fall by more than 1 block. If a very damaged anvil is damaged again, it is destroyed.=鐵砧的耐用性有限有3個損壞等級未損壞、微損的和耗損的。每次你修復或重命名某物時有12%的機會使鐵砧受損。當鐵砧跌落超過1塊時也有機會被損壞。如果一個耗損的鐵砧再次受損它就會被摧毀。
Slightly Damaged Anvil=微損的鐵砧
Very Damaged Anvil=耗損的鐵砧
Repair and rename items=修復與命名物品

View File

@ -0,0 +1,23 @@
# textdomain: mcl_armor
This is a piece of equippable armor which reduces the amount of damage you receive.=這是一件可裝備的盔甲,可以減少你受到的傷害。
To equip it, put it on the corresponding armor slot in your inventory menu.=要裝備它,就把它放在你的物品欄中相應的盔甲插槽上。
Leather Cap=皮革帽子
Iron Helmet=鐵製頭盔
Golden Helmet=黃金頭盔
Diamond Helmet=鑽石頭盔
Chain Helmet=鎖鏈頭盔
Leather Tunic=皮革上衣
Iron Chestplate=鐵製胸甲
Golden Chestplate=黃金胸甲
Diamond Chestplate=鑽石胸甲
Chain Chestplate=鎖鏈胸甲
Leather Pants=皮革褲子
Iron Leggings=鐵製護腿
Golden Leggings=黃金護腿
Diamond Leggings=鑽石護腿
Chain Leggings=鎖鏈護腿
Leather Boots=皮革靴子
Iron Boots=鐵製靴子
Golden Boots=黃金靴子
Diamond Boots=鑽石靴子
Chain Boots=鎖鏈靴子

View File

@ -0,0 +1,5 @@
# textdomain: mcl_armor_stand
Armor Stand=盔甲座
An armor stand is a decorative object which can display different pieces of armor. Anything which players can wear as armor can also be put on an armor stand.=盔甲架是一種裝飾實體,可以展示不同的盔甲。玩家可以作為盔甲穿戴的任何東西也都可以放在盔甲架上。
Just place an armor item on the armor stand. To take the top piece of armor from the armor stand, select your hand and use the place key on the armor stand.=只需将一件盔甲放在盔甲架上。要从盔甲架上取下最上面的一件盔甲,选择你的手并在盔甲架上使用放置键。
Displays pieces of armor=展示盔甲

View File

@ -0,0 +1,148 @@
local S = minetest.get_translator("mcl_barrels")
local F = minetest.formspec_escape
local C = minetest.colorize
--TODO: fix barrel rotation placement
local open_barrels = {}
local drop_content = mcl_util.drop_items_from_meta_container("main")
local function on_blast(pos)
local node = minetest.get_node(pos)
drop_content(pos, node)
minetest.remove_node(pos)
end
local function barrel_open(pos, node, clicker)
local name = minetest.get_meta(pos):get_string("name")
if name == "" then
name = S("Barrel")
end
local playername = clicker:get_player_name()
minetest.show_formspec(playername,
"mcl_barrels:barrel_"..pos.x.."_"..pos.y.."_"..pos.z,
table.concat({
"size[9,8.75]",
"label[0,0;"..F(C("#313131", name)).."]",
"list[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main;0,0.5;9,3;]",
mcl_formspec.get_itemslot_bg(0, 0.5, 9, 3),
"label[0,4.0;"..F(C("#313131", S("Inventory"))).."]",
"list[current_player;main;0,4.5;9,3;9]",
mcl_formspec.get_itemslot_bg(0, 4.5, 9, 3),
"list[current_player;main;0,7.74;9,1;]",
mcl_formspec.get_itemslot_bg(0, 7.74, 9, 1),
"listring[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main]",
"listring[current_player;main]",
})
)
minetest.swap_node(pos, { name = "mcl_barrels:barrel_open", param2 = node.param2 })
open_barrels[playername] = pos
end
local function close_forms(pos)
local players = minetest.get_connected_players()
local formname = "mcl_barrels:barrel_"..pos.x.."_"..pos.y.."_"..pos.z
for p = 1, #players do
if vector.distance(players[p]:get_pos(), pos) <= 30 then
minetest.close_formspec(players[p]:get_player_name(), formname)
end
end
end
local function update_after_close(pos)
local node = minetest.get_node_or_nil(pos)
if not node then return end
if node.name == "mcl_barrels:barrel_open" then
minetest.swap_node(pos, {name = "mcl_barrels:barrel_closed", param2 = node.param2})
end
end
local function close_barrel(player)
local name = player:get_player_name()
local open = open_barrels[name]
if open == nil then
return
end
update_after_close(open)
open_barrels[name] = nil
end
minetest.register_node("mcl_barrels:barrel_closed", {
description = S("Barrel"),
_tt_help = S("27 inventory slots"),
_doc_items_longdesc = S("Barrels are containers which provide 27 inventory slots."),
_doc_items_usagehelp = S("To access its inventory, rightclick it. When broken, the items will drop out."),
tiles = {"mcl_barrels_barrel_top.png^[transformR270", "mcl_barrels_barrel_bottom.png", "mcl_barrels_barrel_side.png"},
paramtype = "light",
paramtype2 = "facedir",
--on_place = mcl_util.rotate_axis,
on_place = function(itemstack, placer, pointed_thing)
minetest.rotate_and_place(itemstack, placer, pointed_thing, minetest.is_creative_enabled(placer:get_player_name()), {}, false)
return itemstack
end,
stack_max = 64,
sounds = mcl_sounds.node_sound_wood_defaults(),
groups = {handy = 1, axey = 1, container = 2, material_wood = 1, flammable = -1, deco_block = 1},
on_construct = function(pos)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
inv:set_size("main", 9*3)
end,
after_place_node = function(pos, placer, itemstack, pointed_thing)
minetest.get_meta(pos):set_string("name", itemstack:get_meta():get_string("name"))
end,
after_dig_node = drop_content,
on_blast = on_blast,
on_rightclick = barrel_open,
on_destruct = close_forms,
_mcl_blast_resistance = 2.5,
_mcl_hardness = 2.5,
})
minetest.register_node("mcl_barrels:barrel_open", {
description = S("Barrel Open"),
_tt_help = S("27 inventory slots"),
_doc_items_longdesc = S("Barrels are containers which provide 27 inventory slots."),
_doc_items_usagehelp = S("To access its inventory, rightclick it. When broken, the items will drop out."),
_doc_items_create_entry = false,
tiles = {"mcl_barrels_barrel_top_open.png", "mcl_barrels_barrel_bottom.png", "mcl_barrels_barrel_side.png"},
paramtype = "light",
paramtype2 = "facedir",
drop = "mcl_barrels:barrel_closed",
stack_max = 64,
sounds = mcl_sounds.node_sound_wood_defaults(),
groups = {handy = 1, axey = 1, container = 2, material_wood = 1, flammable = -1, deco_block = 1, not_in_creative_inventory = 1},
after_dig_node = drop_content,
on_blast = on_blast,
on_rightclick = barrel_open,
on_destruct = close_forms,
_mcl_blast_resistance = 2.5,
_mcl_hardness = 2.5,
})
minetest.register_on_player_receive_fields(function(player, formname, fields)
if formname:find("mcl_barrels:") == 1 and fields.quit then
close_barrel(player)
end
end)
minetest.register_on_leaveplayer(function(player)
close_barrel(player)
end)
--Minecraft Java Edition craft
minetest.register_craft({
output = "mcl_barrels:barrel_closed",
recipe = {
{"group:wood", "group:wood_slab", "group:wood"},
{"group:wood", "", "group:wood"},
{"group:wood", "group:wood_slab", "group:wood"},
}
})

View File

@ -0,0 +1,5 @@
# textdomain: mcl_barrels
Barrel=
Barrels are containers which provide 27 inventory slots.=
To access its inventory, rightclick it. When broken, the items will drop out.=
27 inventory slots=

View File

@ -0,0 +1,5 @@
# textdomain: mcl_barrels
Barrel=
Barrels are containers which provide 27 inventory slots.=
To access its inventory, rightclick it. When broken, the items will drop out.=
27 inventory slots=

View File

@ -0,0 +1,5 @@
# textdomain: mcl_barrels
Barrel=Tonneau
Barrels are containers which provide 27 inventory slots.=Les tonneaux sont des conteneurs qui offrent 27 emplacements d'inventaire.
To access its inventory, rightclick it. When broken, the items will drop out.=Pour accéder à son inventaire, faites un clic droit dessus. Une fois cassés, les articles tomberont.
27 inventory slots=27 emplacements d'inventaire

View File

@ -0,0 +1,5 @@
# textdomain: mcl_barrels
Barrel=
Barrels are containers which provide 27 inventory slots.=
To access its inventory, rightclick it. When broken, the items will drop out.=
27 inventory slots=

View File

@ -0,0 +1,5 @@
# textdomain: mcl_barrels
Barrel=
Barrels are containers which provide 27 inventory slots.=
To access its inventory, rightclick it. When broken, the items will drop out.=
27 inventory slots=

View File

@ -0,0 +1,5 @@
# textdomain: mcl_barrels
Barrel=
Barrels are containers which provide 27 inventory slots.=
To access its inventory, rightclick it. When broken, the items will drop out.=
27 inventory slots=

View File

@ -0,0 +1,3 @@
name = mcl_barrels
depends = mcl_util, mcl_formspec, mcl_sounds
author = AFCMS

Binary file not shown.

After

Width:  |  Height:  |  Size: 542 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 499 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 566 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 421 B

View File

@ -248,7 +248,7 @@ function mcl_beds.register_bed(name, def)
paramtype2 = "facedir", paramtype2 = "facedir",
is_ground_content = false, is_ground_content = false,
-- FIXME: Should be bouncy=66, but this would be a higher bounciness than slime blocks! -- FIXME: Should be bouncy=66, but this would be a higher bounciness than slime blocks!
groups = {handy = 1, flammable = 3, bed = 2, dig_by_piston=1, bouncy=33, fall_damage_add_percent=-50, not_in_creative_inventory = 1}, groups = {handy = 1, flammable = -1, bed = 2, dig_by_piston=1, bouncy=33, fall_damage_add_percent=-50, not_in_creative_inventory = 1},
_mcl_hardness = 0.2, _mcl_hardness = 0.2,
_mcl_blast_resistance = 1, _mcl_blast_resistance = 1,
sounds = def.sounds or default_sounds, sounds = def.sounds or default_sounds,

View File

@ -0,0 +1,41 @@
# textdomain: mcl_beds
Beds allow you to sleep at night and make the time pass faster.=床可以讓你在晚上睡覺,讓時間過得更快。
To use a bed, stand close to it and right-click the bed to sleep in it. Sleeping only works when the sun sets, at night or during a thunderstorm. The bed must also be clear of any danger.=要使用床,站在靠近床的地方,右鍵點擊床,就可以在床上睡覺。只有在太陽落山、晚上或雷雨時才能睡覺。床也必須遠離任何危險。
You have heard of other worlds in which a bed would set the start point for your next life. But this world is not one of them.=你聽說過其他的世界,在這個世界裡,一張床會成為你的重生點。但這個世界並不是其中之一。
By using a bed, you set the starting point for your next life. If you die, you will start your next life at this bed, unless it is obstructed or destroyed.=通過使用一張床,你設定了重生點。如果你死了,你將在這張床上重生,除非它被阻礙或破壞。
In this world, going to bed won't skip the night, but it will skip thunderstorms.=在這個世界上,上床睡覺不會跳過夜晚,但是會跳過雷暴。
Sleeping allows you to skip the night. The night is skipped when all players in this world went to sleep. The night is skipped after sleeping for a few seconds. Thunderstorms can be skipped in the same manner.=睡覺可以跳過夜晚。當這個世界的所有玩家都進入睡眠狀態幾秒後,夜晚就會被跳過。雷雨也可以用同樣的方式跳過。
Bed=床
Red Bed=紅色床
Blue Bed=藍色床
Cyan Bed=青色床
Grey Bed=灰色床
Light Grey Bed=淺灰色床
Black Bed=黑色床
Yellow Bed=黃色床
Green Bed=綠色床
Magenta Bed=洋紅色床
Orange Bed=橙色床
Purple Bed=紫色床
Brown Bed=棕色床
Pink Bed=粉紅色床
Lime Bed=淺綠色床
Light Blue Bed=淺藍色床
White Bed=白色床
You can't sleep, the bed's too far away!=你無法休息,床離你太遠了!
This bed is already occupied!=這張床已被佔用!
You have to stop moving before going to bed!=在睡覺前,你必須停下!
You can't sleep now, monsters are nearby!=你無法休息,有怪物在附近遊蕩!
You can't sleep, the bed is obstructed!=你無法休息,床已被阻擋!
It's too dangerous to sleep here!=在這裏睡太危險了!
New respawn position set! But you can only sleep at night or during a thunderstorm.=你設定了重生點,但你只能在晚上或雷雨時才能睡覺。
You can only sleep at night or during a thunderstorm.=你只能在晚上或雷雨時才能睡覺。
New respawn position set!=你設定了重生點!
Leave bed=起來
Abort sleep=醒來
Players in bed: @1/@2=@2位玩家中的@1位在床上
Note: Night skip is disabled.=注意:睡覺以跳過夜晚被停用
You're sleeping.=你睡着了。
You will fall asleep when all players are in bed.=你會在所有玩家在床上時睡着
You're in bed.=你在床上。
Allows you to sleep=允許你睡覺

View File

@ -0,0 +1,27 @@
# textdomain: mcl_books
Book=書
Books are used to make bookshelves and book and quills.=書籍用於製作書櫃以及書和羽毛筆。
“@1”=「@1」
Copy of “@1”=「@1」的複本
Copy of Copy of “@1”=「@1」的複本的複本
Tattered Book=破舊的書
by @1=由 @1 篇寫
# as in “to sign a book”
Sign=署名
Done=退出
This item can be used to write down some notes.=這個物品可以用來寫下一些筆記。
Hold it in the hand, then rightclick to read the current notes and edit then. You can edit the text as often as you like. You can also sign the book which turns it into a written book which you can stack, but it can't be edited anymore.=把它拿在手裡,然後右鍵閱讀當前的筆記,然後進行編輯。你可以隨心所欲地編輯文字。你也可以在書上署名名,這就把它變成了一本完成的書,你可以把它疊起來,但它不能再被編輯了。
A book can hold up to 4500 characters. The title length is limited to 64 characters.=一本書最多可以容納4500個字符。標題長度限制為64個字符。
Enter book title:=輸入書本標題:
Note: The book will no longer be editable after signing=注意:在署名後,它不能再被編輯了。
Sign and Close=署名並退出
Cancel=取消
Nameless Book=未命名的書
Written Book=完成的書
Written books contain some text written by someone. They can be read and copied, but not edited.=完成的書包含一些由玩家寫的文字。它們可以被閱讀和復制,但不能被編輯。
Hold it in your hand, then rightclick to read the book.=把書放在手裏,右鍵閱讀它。
To copy the text of the written book, place it into the crafting grid together with a book and quill (or multiple of those) and craft. The written book will not be consumed. Copies of copies can not be copied.=要復製完成的書的文本,請將其與書和羽毛筆(或多個)一起放入製作網格,然後製作。完成的書不會被消耗掉。複本的複本不能被複製。
Bookshelf=書櫃
Bookshelves are used for decoration.=書櫃是一種裝飾行方塊
Book and Quill=書和羽毛筆
Write down some notes=寫下一些筆記

View File

@ -1,5 +1,7 @@
local S = minetest.get_translator(minetest.get_current_modname()) local S = minetest.get_translator(minetest.get_current_modname())
local mod_target = minetest.get_modpath("mcl_target")
local math = math local math = math
local vector = vector local vector = vector
@ -117,8 +119,7 @@ function ARROW_ENTITY.on_step(self, dtime)
self._time_in_air = self._time_in_air + .001 self._time_in_air = self._time_in_air + .001
local pos = self.object:get_pos() local pos = self.object:get_pos()
local dpos = table.copy(pos) -- digital pos local dpos = vector.round(vector.new(pos)) -- digital pos
dpos = vector.round(dpos)
local node = minetest.get_node(dpos) local node = minetest.get_node(dpos)
if self._stuck then if self._stuck then
@ -383,6 +384,11 @@ function ARROW_ENTITY.on_step(self, dtime)
tnt.ignite(self._stuckin) tnt.ignite(self._stuckin)
end end
-- Activate target
if mod_target and snode.name == "mcl_target:target_off" then
mcl_target.hit(self._stuckin, 1) --10 redstone ticks
end
-- Push the button! Push, push, push the button! -- Push the button! Push, push, push the button!
if mod_button and minetest.get_item_group(node.name, "button") > 0 and minetest.get_item_group(node.name, "button_push_by_arrow") == 1 then if mod_button and minetest.get_item_group(node.name, "button") > 0 and minetest.get_item_group(node.name, "button_push_by_arrow") == 1 then
local bdir = minetest.wallmounted_to_dir(node.param2) local bdir = minetest.wallmounted_to_dir(node.param2)

View File

@ -0,0 +1,14 @@
# textdomain: mcl_bows
Arrow=箭
Arrows are ammunition for bows and dispensers.=箭頭是弓箭和發射器的彈藥。
An arrow fired from a bow has a regular damage of 1-9. At full charge, there's a 20% chance of a critical hit dealing 10 damage instead. An arrow fired from a dispenser always deals 3 damage.=從弓上射出的箭有1-9的常規傷害。在最大能量的情況下有20%的機會暴擊造成10的傷害。從發射器中發射的箭總是造成3點傷害。
Arrows might get stuck on solid blocks and can be retrieved again. They are also capable of pushing wooden buttons.=箭頭可能會卡在固體方塊上,可以再次取回。他們也能按下木質按鈕。
To use arrows as ammunition for a bow, just put them anywhere in your inventory, they will be used up automatically. To use arrows as ammunition for a dispenser, place them in the dispenser's inventory. To retrieve an arrow that sticks in a block, simply walk close to it.=要把箭作為弓的彈藥,只需把它們放在你物品欄的任何地方,它們就會被自動使用。要使用箭作為發射器的彈藥,把它們放在發射器的物品欄中。要取回插在方塊上的箭,只需走到它附近。
Bow=弓
Bows are ranged weapons to shoot arrows at your foes.=弓是遠程武器,可以向敵人發射箭頭。
The speed and damage of the arrow increases the longer you charge. The regular damage of the arrow is between 1 and 9. At full charge, there's also a 20% of a critical hit, dealing 10 damage instead.=拉弓時間越長箭的速度和傷害越大。箭的常規傷害在1到9之間。在拉滿弓的情況下20%的機會暴擊造成10的傷害。
To use the bow, you first need to have at least one arrow anywhere in your inventory (unless in Creative Mode). Hold down the right mouse button to charge, release to shoot.=要使用這把弓,你首先需要在你物品欄的任何地方至少有一支箭(除非在創造模式下)。按住鼠標右鍵充電,鬆開即可射擊。
Ammunition=彈藥
Damage from bow: 1-10=從弓發射時的傷害1-10
Damage from dispenser: 3=從發射器發射時的傷害3
Launches arrows=發射箭

View File

@ -1,6 +1,6 @@
name = mcl_bows name = mcl_bows
author = Arcelmi author = Arcelmi
description = This mod adds bows and arrows for MineClone 2. description = This mod adds bows and arrows for MineClone 2.
depends = controls, mcl_particles, mcl_enchanting, mcl_init depends = controls, mcl_particles, mcl_enchanting, mcl_init, mcl_util
optional_depends = awards, mcl_achievements, mcl_core, mcl_mobitems, playerphysics, doc, doc_identifier, mesecons_button optional_depends = awards, mcl_achievements, mcl_core, mcl_mobitems, playerphysics, doc, doc_identifier, mesecons_button

View File

@ -18,20 +18,6 @@ local function dir_to_pitch(dir)
return -math.atan2(-dir.y, xz) return -math.atan2(-dir.y, xz)
end end
local function random_arrow_positions(positions, placement)
if positions == "x" then
return math.random(-4, 4)
elseif positions == "y" then
return math.random(0, 10)
end
if placement == "front" and positions == "z" then
return 3
elseif placement == "back" and positions == "z" then
return -3
end
return 0
end
local function damage_explosion(self, damagemulitplier) local function damage_explosion(self, damagemulitplier)
mcl_explosions.explode(self.object:get_pos(), 3, {}) mcl_explosions.explode(self.object:get_pos(), 3, {})
local objects = minetest.get_objects_inside_radius(self.object:get_pos(), 8) local objects = minetest.get_objects_inside_radius(self.object:get_pos(), 8)
@ -49,10 +35,10 @@ end
local function particle_explosion(self) local function particle_explosion(self)
local particle_pattern = math.random(1, 3) local particle_pattern = math.random(1, 3)
local fpitch = 0 local fpitch
local true_type = "" --local true_type
local type = math.random(1,2) local type = math.random(1, 2)
local size = math.random(1,3) local size = math.random(1, 3)
local colors = {"red", "yellow", "blue", "green", "white"} local colors = {"red", "yellow", "blue", "green", "white"}
local this_colors = {colors[math.random(#colors)], colors[math.random(#colors)], colors[math.random(#colors)]} local this_colors = {colors[math.random(#colors)], colors[math.random(#colors)], colors[math.random(#colors)]}
@ -64,11 +50,11 @@ local function particle_explosion(self)
fpitch = math.random(60, 70) fpitch = math.random(60, 70)
end end
if type == 1 then --[[if type == 1 then
true_type = "Popper" true_type = "Popper"
else else
true_type = "Floof" true_type = "Floof"
end end]]
if type == 1 then if type == 1 then
minetest.sound_play("mcl_bows_firework", { minetest.sound_play("mcl_bows_firework", {
@ -243,6 +229,7 @@ end
local mod_awards = minetest.get_modpath("awards") and minetest.get_modpath("mcl_achievements") local mod_awards = minetest.get_modpath("awards") and minetest.get_modpath("mcl_achievements")
local mod_button = minetest.get_modpath("mesecons_button") local mod_button = minetest.get_modpath("mesecons_button")
local mod_target = minetest.get_modpath("mcl_target")
minetest.register_craftitem("mcl_bows:rocket", { minetest.register_craftitem("mcl_bows:rocket", {
description = S("Arrow"), description = S("Arrow"),
@ -578,6 +565,11 @@ function ARROW_ENTITY.on_step(self, dtime)
tnt.ignite(self._stuckin) tnt.ignite(self._stuckin)
end end
-- Activate target
if mod_target and snode.name == "mcl_target:target_off" then
mcl_target.hit(self._stuckin, 1) --10 redstone ticks
end
-- Push the button! Push, push, push the button! -- Push the button! Push, push, push the button!
if mod_button and minetest.get_item_group(node.name, "button") > 0 and minetest.get_item_group(node.name, "button_push_by_arrow") == 1 then if mod_button and minetest.get_item_group(node.name, "button") > 0 and minetest.get_item_group(node.name, "button_push_by_arrow") == 1 then
local bdir = minetest.wallmounted_to_dir(node.param2) local bdir = minetest.wallmounted_to_dir(node.param2)

View File

@ -0,0 +1,10 @@
# textdomain: mcl_brewing
Brewing Stand=釀造台
Inventory=物品欄
To use a brewing stand, rightclick it.=右鍵點擊以使用釀造台。
To brew, you need blaze powder as fuel, a brewing material and at least 1 glass bottle filled with a liquid.=釀造時你需要烈焰粉作為燃料一個釀造材料和至少1個裝滿液體的玻璃瓶。
Place the blaze powder in the left slot, the brewing material in the middle slot and 1-3 bottles in the remaining slots.=將烈焰粉放在左邊的槽中將釀造材料放在中間的槽中將1-3個瓶子放在其餘的槽中。
When you have found a good combination, the brewing will commence automatically and steam starts to appear, using up the fuel and brewing material. The potions will soon be ready.=當你找到一個好的組合時,釀造將自動開始,並開始出現蒸汽,耗盡燃料和釀造材料。藥水很快就會準備好。
Different combinations of brewing materials and liquids will give different results. Try to experiment!=釀造材料和液體的不同組合會產生不同的結果。試著去實驗吧!
The stand allows you to brew potions!=釀造台可以讓你釀製藥水!
Brew Potions=釀造藥水

View File

@ -169,7 +169,7 @@ local function on_place_bucket(itemstack, user, pointed_thing, def)
local undernode = get_node(pointed_thing.under) local undernode = get_node(pointed_thing.under)
local abovenode = get_node(pointed_thing.above) local abovenode = get_node(pointed_thing.above)
if registered_nodes[undernode.name].buildable_to or get_item_group(undernode.name, "cauldron") == 1 then if registered_nodes[undernode.name] and registered_nodes[undernode.name].buildable_to or get_item_group(undernode.name, "cauldron") == 1 then
local result, take_bucket = get_extra_check(def.extra_check, pointed_thing.under, user) local result, take_bucket = get_extra_check(def.extra_check, pointed_thing.under, user)
if result then if result then
local node_place = get_node_place(def.source_place, pointed_thing.under) local node_place = get_node_place(def.source_place, pointed_thing.under)
@ -190,7 +190,7 @@ local function on_place_bucket(itemstack, user, pointed_thing, def)
end end
end end
return get_bucket_drop(itemstack, user, take_bucket) return get_bucket_drop(itemstack, user, take_bucket)
elseif registered_nodes[abovenode.name].buildable_to or get_item_group(abovenode.name, "cauldron") == 1 then elseif registered_nodes[abovenode.name] and registered_nodes[abovenode.name].buildable_to or get_item_group(abovenode.name, "cauldron") == 1 then
local result, take_bucket = get_extra_check(def.extra_check, pointed_thing.above, user) local result, take_bucket = get_extra_check(def.extra_check, pointed_thing.above, user)
if result then if result then
local node_place = get_node_place(def.source_place, pointed_thing.above) local node_place = get_node_place(def.source_place, pointed_thing.above)

View File

@ -0,0 +1,17 @@
# textdomain: mcl_buckets
Empty Bucket=空桶
A bucket can be used to collect and release liquids.=桶可以用來收集和倒出液體。
Punch a liquid source to collect it. You can then use the filled bucket to place the liquid somewhere else.=擊打一個液體源頭來收集它。然後你可以用裝滿的桶把液體放在其他地方。
Lava Bucket=熔岩桶
A bucket can be used to collect and release liquids. This one is filled with hot lava, safely contained inside. Use with caution.=桶可以用來收集和釋放液體。這個桶裡裝的是熱的熔岩,安全地裝在裡面。使用時要小心!
Get in a safe distance and place the bucket to empty it and create a lava source at this spot. Don't burn yourself!=在安全距離內,將熔岩倒出,在這個地方創造一個熔岩源頭。不要燒到自己!
Water Bucket=水桶
A bucket can be used to collect and release liquids. This one is filled with water.=桶可以用來收集和倒出液體。這個桶裡裝的是水。
Place it to empty the bucket and create a water source.=放置它以清空水桶並創建水源。
River Water Bucket=河水桶
A bucket can be used to collect and release liquids. This one is filled with river water.=桶可以用來收集和倒出液體。這個桶裡裝的是河水。
Place it to empty the bucket and create a river water source.=放置它以清空水桶並創建河水源。
Collects liquids=攜帶流體
Places a lava source=放置熔岩源頭
Places a water source=放置水源
Places a river water source=放置河水源頭

View File

@ -0,0 +1,12 @@
# textdomain: mcl_cake
Cake=蛋糕
Cakes can be placed and eaten to restore hunger points. A cake has 7 slices. Each slice restores 2 hunger points and 0.4 saturation points. Cakes will be destroyed when dug or when the block below them is broken.=蛋糕可以被放置和食用以恢復飢餓值。一個蛋糕有7片。每片可以恢復2個飢餓值和0.4個飽食度。蛋糕在被挖掘或其下面的方塊被打破時將被摧毀。
Place the cake anywhere, then rightclick it to eat a single slice. You can't eat from the cake when your hunger bar is full.=將蛋糕放在任何地方,然後右鍵單擊以吃一小片。 當您的飢餓條已滿時,您不能從蛋糕上吃東西。
Cake (6 Slices Left)=蛋糕還剩6片
Cake (5 Slices Left)=蛋糕還剩5片
Cake (4 Slices Left)=蛋糕還剩4片
Cake (3 Slices Left)=蛋糕還剩3片
Cake (2 Slices Left)=蛋糕還剩2片
Cake (1 Slice Left)=蛋糕還剩1片
With 7 tasty slices!=有七塊美味的蛋糕!
Hunger points: +@1 per slice=飢餓值:每片 +@1

View File

@ -0,0 +1,11 @@
# textdomain: mcl_cauldron
Cauldron=鍋釜
Cauldrons are used to store water and slowly fill up under rain. They can also be used to wash off banners.=鍋釜是用來儲水的,在雨水的作用下慢慢填滿。它們也可以用來清洗旗幟。
Place a water pucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water. Use an emblazoned banner on a cauldron with water to wash off its top layer.=將水桶放入鍋釜中,使其充滿水。將一個空桶放在裝滿水的大鍋上,以取回水。將一個水瓶放入鍋釜內,使大鍋內增加三分之一的水。將一個玻璃瓶放在有水的鍋釜裡,取回三分之一的水。在有水的鍋釜上使用印有圖案的旗幟,以洗掉其上層。
Cauldron (1/3 Water)=鍋釜1/3 水)
Cauldron (2/3 Water)=鍋釜2/3 水)
Cauldron (3/3 Water)=鍋釜3/3 水)
Cauldron (1/3 River Water)=鍋釜1/3 河水)
Cauldron (2/3 River Water)=鍋釜2/3 河水)
Cauldron (3/3 River Water)=鍋釜3/3 河水)
Stores water=儲存水

View File

@ -291,22 +291,7 @@ local function register_chest(basename, desc, longdesc, usagehelp, tt_help, tile
end end
end end
local function drop_items_chest(pos, oldnode, oldmetadata) local drop_items_chest = mcl_util.drop_items_from_meta_container("main")
local meta = minetest.get_meta(pos)
local meta2 = meta:to_table()
if oldmetadata then
meta:from_table(oldmetadata)
end
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, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5}
minetest.add_item(p, stack)
end
end
meta:from_table(meta2)
end
local function on_chest_blast(pos) local function on_chest_blast(pos)
local node = minetest.get_node(pos) local node = minetest.get_node(pos)

View File

@ -0,0 +1,5 @@
# textdomain: mcl_clock
Clocks are tools which shows the current time of day in the Overworld.=時鐘顯示世界上當前時間的工具。
The clock contains a rotating disc with a sun symbol (yellow disc) and moon symbol and a little “pointer” which shows the current time of day by estimating the real position of the sun and the moon in the sky. Noon is represented by the sun symbol and midnight is represented by the moon symbol.=時鐘包含一個帶有太陽符號(黃色圓盤)和月亮符號的旋轉圓盤,以及一個小「指針」,通過估計太陽和月亮在天空中的實際位置來顯示當前的時間。正午由太陽符號表示,午夜由月亮符號表示。
Clock=時鐘
Displays the time of day in the Overworld=顯示世界上當前的時間

View File

@ -0,0 +1,6 @@
# textdomain: mcl_cocoas
Premature Cocoa Pod=成長中的可可豆莢第1階段
Cocoa pods grow on the side of jungle trees in 3 stages.=可可莢果分3個階段生長在叢林樹的側面。
Medium Cocoa Pod=成長中的可可豆莢第2階段
Mature Cocoa Pod=成熟的可可豆莢
A mature cocoa pod grew on a jungle tree to its full size and it is ready to be harvested for cocoa beans. It won't grow any further.=一個成熟的可可豆莢在叢林樹上成熟,它已經準備好被收穫成可可豆了。它不會再長了。

View File

@ -0,0 +1,4 @@
# textdomain: mcl_compass
Compasses are tools which point to the world origin (X@=0, Z@=0) or the spawn point in the Overworld.=指南針是指向世界原點X@=0Z@=0或主世界的出生點的工具。
Compass=指南針
Points to the world origin=指向世界原點

View File

@ -0,0 +1,257 @@
# textdomain: mcl_core
@1 could not survive in lava.=@1試圖在熔岩中游泳
@1 died in lava.=@1試圖在熔岩中游泳
@1 melted in lava.=@1試圖在熔岩中游泳
@1 took a bath in a hot lava tub.=@1試圖在熔岩中游泳
A block of diamond is mostly a shiny decorative block but also useful as a compact storage of diamonds.=鑽石磚主要是一種閃亮的裝飾方塊,但也可以作為鑽石的省位存儲方式。
A block of emerald is mostly a shiny decorative block but also useful as a compact storage of emeralds.=綠寶石磚主要是一種閃亮的裝飾方塊,但也可以作為綠寶石的省位存儲方式。
A block of gold is mostly a shiny decorative block but also useful as a compact storage of gold ingots.=金磚主要是一種閃亮的裝飾方塊,但也可以作為黃金的省位存儲方式。
A block of iron is mostly a decorative block but also useful as a compact storage of iron ingots.=鐵磚主要是一種裝飾方塊,但也可以作為鐵的省位存儲方式。
A cactus can only be placed on top of another cactus or any sand.=仙人掌只可以拜擺放在其他仙人掌或沙上。
A decorative and mostly transparent block.=一種用於裝飾並且基本上是透明的方塊。
A grass block is dirt with a grass cover. Grass blocks are resourceful blocks which allow the growth of all sorts of plants. They can be turned into farmland with a hoe and turned into grass paths with a shovel. In light, the grass slowly spreads onto dirt nearby. Under an opaque block or a liquid, a grass block may turn back to dirt.=草方塊是有草覆蓋的泥土。草方塊是重要的方塊,是各種植物生長的基礎。它們可以用鋤頭變成農田,用鐵鍬變成草徑。在光照下,草會慢慢蔓延到附近的泥土上。在不透明的方塊或液體下,草方塊可能會變回泥土。
A lapis lazuli block is mostly a decorative block but also useful as a compact storage of lapis lazuli.=青金石磚主要是一種裝飾方塊,但也可以作為青金石的省位存儲方式。
A lava source sets fire to a couple of air blocks above when they're next to a flammable block.=當熔岩源與易燃方塊相鄰時,會將附近點燃。
A piece of ladder which allows you to climb vertically. Ladders can only be placed on the side of solid blocks and not on glass, leaves, ice, slabs, glowstone, nor sea lanterns.=一塊可以讓你垂直攀爬的梯子。梯子只能放在不透明方塊的側面,不能放在玻璃、樹葉、冰塊、石板、螢石、海燈龍等透明方塊上。
Acacia Leaves=相思木葉
Acacia Sapling=相思木樹苗
Acacia Wood=相思木原木
Acacia Wood Planks=相思木木材
Acacia leaves are grown from acacia trees.=相思木葉是由相思木樹生長出來的。
Andesite=安山岩
Andesite is an igneous rock.=安山岩是一種火成岩。
Apple=蘋果
Apples are food items which can be eaten.=蘋果是一種可以被食用的食物
Barrier=屏障
Barriers are invisble walkable blocks. They are used to create boundaries of adventure maps and the like. Monsters and animals won't appear on barriers, and fences do not connect to barriers. Other blocks can be built on barriers like on any other block.=屏障是看不見但可行走的方塊。它們通常被用來創建冒險地圖的邊界。怪物和動物不會出現在屏障上,柵欄也不會連接到屏障上。其他方塊可以像在其他方塊上一樣被放置在屏障上。
Bedrock=基岩
Bedrock is a very hard type of rock. It can not be broken, destroyed, collected or moved by normal means, unless in Creative Mode.=基岩是一種堅實無比的石頭。除了創造模式的玩家,沒有人可以以正常方式破壞、銷毀、收集或移動它。
Birch Bark=白樺樹皮
Birch Leaves=白樺樹葉
Birch Sapling=白樺樹樹苗
Birch Wood=白樺樹原木
Birch Wood Planks=白樺樹木材
Birch leaves are grown from birch trees.=白樺樹葉是由白樺樹樹生長出來的。
Black Stained Glass=黑色玻璃
Block of Coal=煤炭磚
Block of Diamond=鑽石磚
Block of Emerald=綠寶石磚
Block of Gold=金磚
Block of Iron=鐵磚
Blocks of coal are useful as a compact storage of coal and very useful as a furnace fuel. A block of coal is as efficient as 10 coal.=煤炭磚作為煤炭的省位存儲方式作為熔爐燃料非常有用。一個煤炭磚的燃燒時間相當於10塊煤炭。
Blue Stained Glass=藍色玻璃
Bone Block=骨塊
Bone blocks are decorative blocks and a compact storage of bone meal.=骨粉塊是一個裝飾方塊,也是骨粉的省位存儲方式。
Bowl=碗
Bowls are mainly used to hold tasty soups.=碗主要用來盛湯。
Brick=紅磚頭
Brick Block=紅磚
Brick blocks are a good building material for building solid houses and can take quite a punch.=紅磚是一種很好的建築材料,可以用來建造堅固的房屋,並可以承受相當大的壓力。
Bricks are used to craft brick blocks.=紅磚頭是用來合成紅磚的原料。
Brown Stained Glass=棕色玻璃
Cactus=仙人掌
Charcoal=木炭
Charcoal is an alternative furnace fuel created by cooking wood in a furnace. It has the same burning time as coal and also shares many of its crafting recipes, but it can not be used to create coal blocks.=木炭可作爲煤炭的替代,通過在熔爐中烹飪原木而產生的。它的燃燒時間與煤炭相同,也也可用來合成許多煤炭可合成的東西,但它不能用來製作煤炭磚。
Chiseled Stone Bricks=鏨制石磚
Chiseled Red Sandstone=鏨制紅砂岩
Chiseled Sandstone=鏨制砂岩
Chiseled red sandstone is a decorative building block.=鏨制紅砂岩是一個裝飾方塊。
Chiseled sandstone is a decorative building block.=鏨制砂岩是一個裝飾方塊。
Clay=黏土
Clay Ball=黏土球
Clay balls are a raw material, mainly used to create bricks in the furnace.=黏土球是一種原料,主要用於製磚。
Clay is a versatile kind of earth commonly found at beaches underwater.=黏土是一種多功能的土,常見於岸邊。
Coal=煤炭
Coal Ore=煤礦
Coarse Dirt=粗泥
Coarse dirt acts as a soil for some plants and is similar to dirt, but it will never grow a cover.=粗粗泥作為一些植物的土壤,與泥土相似,但它永遠不會長草。
Cobblestone=鵝卵石
Cobweb=蜘蛛網
Cobwebs can be walked through, but significantly slow you down.=蜘蛛網可以穿過,但它會大大降低你的速度。
Cracked Stone Bricks=裂紋石磚
Cut Red Sandstone=切製紅砂岩
Cut Sandstone=切製砂岩
Cut red sandstone is a decorative building block.=切製紅砂岩是裝飾性的方塊。
Cut sandstone is a decorative building block.=切製砂岩是裝飾性的方塊。
Cyan Stained Glass=青色玻璃
Dark Oak Bark=黑橡木樹皮
Dark Oak Leaves=黑橡木樹葉
Dark Oak Sapling=黑橡木樹苗
Dark Oak Wood=黑橡木原木
Dark Oak Wood Planks=黑橡木木材
Dark oak leaves are grown from dark oak trees.=黑橡木樹葉是由黑橡樹生長出來的。
Dark oak saplings can grow into dark oaks, but only in groups. A lonely dark oak sapling won't grow. A group of four dark oak saplings grows into a dark oak after some time when they are placed on soil (such as dirt) in a 2×2 square and exposed to light.=黑橡木樹苗可以長成黑橡樹但只能成群生長。單獨的黑橡木樹苗是長不出來的。四棵黑橡木樹苗以2×2的形態放在土壤如泥土並暴露在光照下一段時間後就會長成一棵黑橡樹。
Dead Bush=枯灌木
Dead bushes are unremarkable plants often found in dry areas. They can be harvested for sticks.=枯灌木是一種不起眼的植物,經常在乾旱地區發現。它們可以被收割成木棒。
Diamond=鑽石
Diamond Ore=鑽石礦
Diamond ore is rare and can be found in clusters near the bottom of the world.=鑽石礦非常稀少,可以在接近世界底部的地方找到它們。
Diamonds are precious minerals and useful to create the highest tier of armor and tools.=鑽石是珍貴的礦物,可用於製造最高等級的裝甲和工具
Diorite=閃長岩
Diorite is an igneous rock.=閃長岩是一種火成岩。
Dirt=泥土
Dirt acts as a soil for a few plants. When in light, this block may grow a grass or mycelium cover if such blocks are nearby.=泥土可以作为一些植物的土壤。在光照下,如果附近有草方塊或菌絲土,草或菌絲可呢會蔓延到這裏。
Emerald=綠寶石
Emerald Ore=綠寶石礦
Emerald ore is the ore of emeralds. It is very rare and can be found alone, not in clusters.=綠寶石礦是綠寶石的礦石。它非常稀少,只可以單獨出現,不會成堆出現。
Emeralds are not very useful on their own, but they can exchanged for gold ingots by crafting.=綠寶石本身用途不太多,但可以通過合成來得到金錠。
Flint=燧石
Flint is a raw material.=燧石是原材料。
Flowing Lava=流動的熔岩
Flowing Water=流動的水
Frosted Ice=霜冰
Frosted ice is a short-lived solid block. It melts into a water source within a few seconds.=霜冰是一種壽命很短的固體方塊。它在幾秒鐘內就會融化,成爲水源。
Glass=草
Gold Ingot=金錠
Gold Nugget=金粒
Gold Ore=金礦
Gold nuggets are very small pieces of molten gold; the main purpose is to create gold ingots.=金粒是非常小塊的金,主要用來合成金錠。
Golden Apple=進蘋果
Golden apples are precious food items which can be eaten.=金蘋果是可以吃的珍貴食品。
Granite=花崗岩
Grass Block=草方塊
Grass Path=草徑
Grass paths are a decorative variant of grass blocks. Their top has a different color and they are a bit lower than grass blocks, making them useful to build footpaths. Grass paths can be created with a shovel. A grass path turns into dirt when it is below a solid block.=草徑是草方塊的一種裝飾變種。它們的頂部顏色和草方塊不同,而且它們比草方塊低一些,因此它們對建造人行道很有用。草徑可以用鏟子來創造。當草徑位於不透明方塊下時,它就會變成泥土。
Gravel=礫石
Green Stained Glass=綠色玻璃
Grey Stained Glass=灰色玻璃
Ice=冰
Ice is a solid block usually found in cold areas. It melts near block light sources at a light level of 12 or higher. When it melts or is broken while resting on top of another block, it will turn into a water source.=冰是一種通常在寒冷地區發現的不透明方塊。它在光照度為12或更高的方塊光源附近會融化。當它融化或被打破時如果它當時在另一個方塊的頂部它將變成一個水源。
In the End dimension, starting a fire on this block will create an eternal fire.=在終界,在此方塊上點火將產生永恆之火。
Iron Ingot=鐵錠
Iron Nugget=鐵粒
Iron Ore=鐵礦
Iron nuggets are very small pieces of molten iron; the main purpose is to create iron ingots.=鐵粒是非常小塊的鐵,主要用來合成鐵錠。
Jungle Bark=叢林樹皮
Jungle Leaves=叢林輸葉
Jungle Sapling=叢林樹苗
Jungle Wood=叢林原木
Jungle Wood Planks=叢林木材
Jungle leaves are grown from jungle trees.=叢林樹葉是由叢林樹生長出來的。
Ladder=梯子
Lapis Lazuli Block=青金石磚
Lapis Lazuli Ore=青金石礦
Lapis lazuli ore is the ore of lapis lazuli. It can be rarely found in clusters near the bottom of the world.=青金石礦是青金石的礦石。在世界底部附近能發現成群的和稀有的青金石礦。
Lava Source=熔岩源
Lava is hot and rather dangerous. Don't touch it, it will hurt you a lot and it is hard to get out.=熔岩很熱並相當危險。不要碰它,它會對你造成很大的傷害,而且很難脫身。
Light Blue Stained Glass=淺藍色玻璃
Light Grey Stained Glass=淺灰色玻璃
Lime Stained Glass=淺綠色玻璃
Lit Redstone Ore=被點亮的紅石礦
Magenta Stained Glass=洋紅色玻璃
Molten gold. It is used to craft armor, tools, and whatnot.=融化的金。用來製作盔甲、工具等等。
Molten iron. It is used to craft armor, tools, and whatnot.=融化的鐵。用來製作盔甲、工具等等。
Mossy Cobblestone=青苔鵝卵石
Mossy Stone Bricks=青苔石磚
Mycelium=菌絲土
Mycelium is a type of dirt and the ideal soil for mushrooms. Unlike other dirt-type blocks, it can not be turned into farmland with a hoe. In light, mycelium slowly spreads over nearby dirt. Under an opaque block or a liquid, it eventually turns back into dirt.=菌絲是泥土的一種,也是蘑菇的理想土壤。與其他泥土類方塊不同,它不能用鋤頭把它變成農田。在光照之下,菌絲會在附近的泥土上慢慢蔓延。在不透明方塊或液體下,它最終會變回泥土。
Oak Bark=橡樹皮
Oak Leaves=橡樹葉
Oak Sapling=橡樹樹苗
Oak Wood=橡樹原木
Oak Wood Planks=橡樹木材
Oak leaves are grown from oak trees.=橡樹樹葉是由橡樹生長出來的。
Obsidian=黑曜石
Obsidian is an extremely hard mineral with an enourmous blast-resistance. Obsidian is formed when water meets lava.=黑曜石是一種極其堅硬的礦物,具有極強的抗爆性。黑曜石是由水與熔岩源相遇而形成的。
One of the most common blocks in the world, almost the entire underground consists of stone. It sometimes contains ores. Stone may be created when water meets lava.=世界上最常見的方塊之一,幾乎整個地下都由石頭組成。它有時也包含礦石。當水與流動的熔岩相遇時,可能會產生石頭。
Orange Stained Glass=橙色玻璃
Packed Ice=冰磚
Packed ice is a compressed form of ice. It is opaque and solid.=冰塊是冰的壓縮形式。它是不透明的固體方塊。
Paper=紙
Paper is used to craft books and maps.=紙是用來合成書和地圖的物品。
Pink Stained Glass=粉紅色玻璃
Podzol=灰壤
Podzol is a type of dirt found in taiga forests. Only a few plants are able to survive on it.=灰壤是一種在針葉林中發現的泥土。只有少數植物能在上面生存。
Polished Andesite=拋光安山岩
Polished Diorite=拋光閃長岩
Polished Granite=拋光花崗岩
Polished Stone=拋光石頭
Polished andesite is a decorative building block made from andesite.=拋光閃長岩是由閃長岩製成的裝飾性方塊。
Polished diorite is a decorative building block made from diorite.=拋光安山岩是由安山岩製成的裝飾性方塊。
Polished granite is a decorative building block made from granite.=拋光花崗岩是由花崗岩製成的裝飾性方塊。
Purple Stained Glass=紫色玻璃
Realm Barrier=維度分割屏障
Red Sand=紅沙
Red Sandstone=紅砂岩
Red Stained Glass=紅色玻璃
Red sand is found in large quantities in mesa biomes.=红沙在山地生態域中大量存在。
Red sandstone is compressed red sand and is a rather soft kind of stone.=紅砂岩是壓縮的紅砂,是一種比較軟的石頭。
Redstone Ore=紅石礦
Redstone ore is commonly found near the bottom of the world. It glows when it is punched or walked upon.=紅石礦可以在距離世界底部比較近的地方生成。它會在受到壓力或被擊打時發光。
Sand=沙
Sand is found in large quantities at beaches and deserts.=沙大量存在於海灘和沙漠中。
Sandstone=砂岩
Sandstone is compressed sand and is a rather soft kind of stone.=砂岩是壓縮的沙,是一種比較軟的石頭。
Slime Block=史萊姆方塊
Slime blocks are very bouncy and prevent fall damage.=史萊姆方塊擁有驚人的彈性,正因如此,它可以防止掉落傷害。
Smooth Red Sandstone=平滑紅砂岩
Smooth Sandstone=平滑砂岩
Smooth red sandstone is a decorative building block.=平滑紅砂岩是一種裝飾性建築材料。
Smooth sandstone is compressed sand and is a rather soft kind of stone.=平滑砂岩是一種裝飾性建築材料。
Snow=雪
Some coal contained in stone, it is very common and can be found inside stone in medium to large clusters at nearly every height.=煤礦在石頭中非常常見,幾乎在任何高度的石頭中也可以找到中小形的煤礦。
Some iron contained in stone, it is prety common and can be found below sea level.=鐵礦的稀有度比煤礦小一點,可以在海平面下找到。
Spruce Bark=杉木樹皮
Spruce Leaves=杉木樹葉
Spruce Sapling=杉木樹苗
Spruce Wood=杉木原木
Spruce Wood Planks=杉木木材
Spruce leaves are grown from spruce trees.=杉木樹葉是由杉樹生長出來的。
Stained glass is a decorative and mostly transparent block which comes in various different colors.=染色玻璃是一種大多是透明的裝飾性方塊,有各種不同的顏色。
Stick=木棒
Sticks are a very versatile crafting material; used in countless crafting recipes.=木棒是一種非常通用的製作材料;使用它的合成配方不計其數。
Stone=石頭
Stone Bricks=石磚
Sugar=糖
Sugar Canes=甘蔗
Sugar canes are a plant which has some uses in crafting. Sugar canes will slowly grow up to 3 blocks when they are next to water and are placed on a grass block, dirt, sand, red sand, podzol or coarse dirt. When a sugar cane is broken, all sugar canes connected above will break as well.=甘蔗是一種植物在合成上有一定的用途。當甘蔗在水旁邊而且放在草塊、泥土、沙子、紅沙、豆莢或粗土上的時候會慢慢長到3格高。當一根甘蔗被折斷時上面連接的所有甘蔗也會折斷。
Sugar canes can only be placed top of other sugar canes and on top of blocks on which they would grow.=甘蔗只能放在其他甘蔗或會讓它生長的方塊的上面。
Sugar comes from sugar canes and is used to make sweet foods.=糖來自甘蔗,用於製作甜食。
The trunk of a birch tree.=白樺樹的樹幹。
The trunk of a dark oak tree.=黑橡樹的樹幹。
The trunk of a jungle tree.=叢林木的樹幹。
The trunk of a spruce tree.=杉木的樹幹。
The trunk of an acacia.=相思木的樹幹。
The trunk of an oak tree.=黑橡木的樹幹。
This block consists of a couple of loose stones and can't support itself.=這塊石頭由一些鬆散的石頭組成,無法支撐自己。
This is a decorative block surrounded by the bark of a tree trunk.=這是一個由樹皮包圍的裝飾方塊。
This is a full block of snow. Snow of this thickness is usually found in areas of extreme cold.=這是一整塊的雪。這種厚度的雪通常出現在極寒地區。
This is a piece of cactus commonly found in dry areas, especially deserts. Over time, cacti will grow up to 3 blocks high on sand or red sand. A cactus hurts living beings touching it with a damage of 1 HP every half second. When a cactus block is broken, all cactus blocks connected above it will break as well.=這是一片常見於乾燥地區尤其是沙漠的仙人掌。隨著時間的推移仙人掌會在沙子或紅沙上長到3塊高。當有生物接觸它時該生物會每半秒受到1HP的傷害。當一個仙人掌塊被打破時它上面連接的所有仙人掌塊也會被打破。
This stone contains pure gold, a rare metal.=這塊石頭含有一種稀有金屬——純金。
Top Snow=雪
Top snow is a layer of snow. It melts near light sources other than the sun with a light level of 12 or higher.=頂雪是一層雪。它會在光照度為12或更高的非太陽光源附近融化。
Vines=藤蔓
Vines are climbable blocks which can be placed on the sides of solid full-cube blocks. Vines slowly grow and spread.=藤蔓是可以攀爬的方塊,可以放在不透明方塊的側面。藤蔓會慢慢生長和蔓延。
Void=虛空
Water=水
Water Source=水源
Water is abundant in oceans and also appears in a few springs in the ground. You can swim easily in water, but you need to catch your breath from time to time.=水是海洋的主要構成部分,也出現在地下水中。在水中可以輕鬆地游泳,但需要時常透氣。
When placed on soil (such as dirt) and exposed to light, a birch sapling will grow into a birch after some time.=將白樺樹苗放在土壤(如泥土)上並接受光照,一段時間後就會長成白樺樹。
When placed on soil (such as dirt) and exposed to light, a jungle sapling will grow into a jungle tree after some time. When there are 4 jungle saplings in a 2×2 square, they will grow to a huge jungle tree.=將叢林樹苗放在土壤如泥土上並接受光照一段時間後就會長成叢林樹。當2×2的正方形裡有4棵叢林樹苗時它們會長成一棵巨大的叢林樹。
When placed on soil (such as dirt) and exposed to light, a spruce sapling will grow into a spruce after some time. When there are 4 spruce saplings in a 2×2 square, they will grow to a huge spruce.=將杉木樹苗放在土壤如泥土上並接受光照一段時間後就會長成杉木樹。當2×2的正方形裡有4棵杉木樹苗時它們會長成一棵巨大的杉木樹。
When placed on soil (such as dirt) and exposed to light, an acacia sapling will grow into an acacia after some time.=將相思木樹苗放在土壤(如泥土)上並接受光照,一段時間後就會長成相思木樹。
When placed on soil (such as dirt) and exposed to light, an oak sapling will grow into an oak after some time.=將黑橡木樹苗放在土壤(如泥土)上並接受光照,一段時間後就會長成黑橡樹。
When you hold a barrier in hand, you reveal all placed barriers in a short distance around you.=當你手握一個屏障時,你會看到附近所有放置的屏障。
White Stained Glass=白色玻璃
Yellow Stained Glass=黃色玻璃
“Coal” refers to coal lumps obtained by digging coal ore which can be found underground. Coal is your standard furnace fuel, but it can also be used to make torches, coal blocks and a few other things.=「煤」指的是通過挖掘地下可以找到的煤礦而得到的煤塊。煤是標準的燃料,但也可以用來製作火把、煤塊和其他一些東西。
Water interacts with lava in various ways:=水與熔岩的相互作用如下:
• When water is directly above or horizontally next to a lava source, the lava turns into obsidian.=• 當水在熔岩源的正上方或水平旁邊時,熔岩就會變成黑曜石。
• When flowing water touches flowing lava either from above or horizontally, the lava turns into cobblestone.=• 當流水從上方或水平方向接觸到流動的熔岩時,熔岩就會變成鵝卵石。
• When water is directly below lava, the water turns into stone.=• 當水位於熔岩下時,水就會變成石頭。
Lava interacts with water various ways:=熔岩與水的相互作用如下:
• When a lava source is directly below or horizontally next to water, the lava turns into obsidian.=• 當水在熔岩源的正上方或水平旁邊時,熔岩就會變成黑曜石。
• When lava is directly above water, the water turns into stone.=• 當熔岩位於水上時,水就會變成石頭。
Stained Glass=染色玻璃
Granite is an igneous rock.=花崗岩是火成岩。
Top snow can be stacked and has one of 8 different height levels. At levels 2-8, top snow is collidable. Top snow drops 2-9 snowballs, depending on its height.=雪可以疊加並有8個不同的高度等級。在2-8級時頂雪是不可穿過的。雪會根據其高度掉落2-9個雪球。
This block can only be placed on full solid blocks and on another top snow (which increases its height).=此方塊只能放在完整的不透明方塊上或另一個雪上。如果它被放置在另一個雪上,會增加其高度。
Needs soil and water to grow=需要泥土和水來生長
Needs soil and light to grow=需要泥土和光照來生長
Grows on sand=在沙上生長
Contact damage: @1 per half second=接触伤害:每半秒@1次
Slows down movement=減低行走速度
2×2 saplings required=必須以2×2的形態擺放樹苗
2×2 saplings @= large tree=以2×2的形態可長成大形樹木
Grows on sand or dirt next to water=在靠近水的沙或泥土上生長
Stackable=可堆疊

View File

@ -54,7 +54,7 @@ minetest.register_node("mcl_core:reeds", {
_doc_items_usagehelp = S("Sugar canes can only be placed top of other sugar canes and on top of blocks on which they would grow."), _doc_items_usagehelp = S("Sugar canes can only be placed top of other sugar canes and on top of blocks on which they would grow."),
drawtype = "plantlike", drawtype = "plantlike",
paramtype2 = "color", paramtype2 = "color",
tiles = {"default_papyrus.png"}, tiles = {"mcl_core_papyrus.png"},
palette = "mcl_core_palette_grass.png", palette = "mcl_core_palette_grass.png",
palette_index = 0, palette_index = 0,
inventory_image = "mcl_core_reeds.png", inventory_image = "mcl_core_reeds.png",

View File

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -0,0 +1,8 @@
# textdomain: mcl_crafting_table
Crafting Table=合成台
A crafting table is a block which grants you access to a 3×3 crafting grid which allows you to perform advanced crafts.=合成台是一個塊狀物可以讓你進入一個3×3的合成網格讓你進行高級合成。
Rightclick the crafting table to access the 3×3 crafting grid.=右鍵點擊合成台以進入3×3合成網格。
Recipe book=合成教學
Crafting=合成
Inventory=物品欄
3×3 crafting grid=3×3合成網格

View File

@ -0,0 +1,24 @@
# textdomain: mcl_doors
Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal.=木門是2格高的障礙物可以用手和紅石信號來打開或關閉。
To open or close a wooden door, rightclick it or supply its lower half with a redstone signal.=要打開或關閉一扇木門,請右擊它或在其下半部分提供紅石信號。
Oak Door=橡木門
Acacia Door=相思木門
Birch Door=樺木門
Dark Oak Door=黑橡木門
Jungle Door=叢林木門
Spruce Door=杉木門
Iron Door=鐵門
Iron doors are 2-block high barriers which can only be opened or closed by a redstone signal, but not by hand.=鐵門是2格高的障礙物能通過紅石信號打開或關閉但不能用手。
To open or close an iron door, supply its lower half with a redstone signal.=要打開或關閉鐵門,請在其下半部分提供紅石信號。
Oak Trapdoor=橡木地板門
Acacia Trapdoor=相思木地板門
Birch Trapdoor=樺木地板門
Spruce Trapdoor=杉木地板門
Dark Oak Trapdoor=黑橡木地板門
Jungle Trapdoor=叢林木地板門
Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=木質地板門是水平的障礙物,可以用手或紅石信號來打開和關閉。它們佔據一個方塊的上部或下部,這取決於它們被放置的方式。當打開時,它們可以像梯子一樣被爬上去。
To open or close the trapdoor, rightclick it or send a redstone signal to it.=要打開或關閉活板門,請右擊它或向它發送紅石信號。
Iron Trapdoor=鐵製地板門
Iron trapdoors are horizontal barriers which can only be opened and closed by redstone signals, but not by hand. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=木質地板門是水平的障礙物,能通過紅石信號打開或關閉,但不能用手。它們佔據一個方塊的上部或下部,這取決於它們被放置的方式。當打開時,它們可以像梯子一樣被爬上去。
Openable by players and redstone power=可以用手和紅石信號來打開
Openable by redstone power=能通過紅石信號打開

View File

@ -0,0 +1,25 @@
# textdomain: mcl_dye
Bone Meal=骨粉
Light Grey Dye=淺灰色染料
Grey Dye=灰色染料
Ink Sac=墨囊
Purple Dye=紫色染料
Lapis Lazuli=青金石
Light Blue Dye=淺藍色染料
Cyan Dye=青色染料
Cactus Green=仙人掌綠
Lime Dye=淺綠色染料
Dandelion Yellow=蒲公英黃
Cocoa Beans=可可豆
Orange Dye=橙色染料
Rose Red=玫瑰紅
Magenta Dye=洋紅色染料
Pink Dye=粉紅色染料
This item is a dye which is used for dyeing and crafting.=這個物品是一種用於染色和合成的染料。
Rightclick on a sheep to dye its wool. Other things are dyed by crafting.=右鍵單擊綿羊以染它的毛。其他東西是通過合成染色的。
Bone meal is a white dye and also useful as a fertilizer to speed up the growth of many plants.=骨粉是一種白色染料,也可作為肥料,加速許多植物的生長。
Rightclick a sheep to turn its wool white. Rightclick a plant to speed up its growth. Note that not all plants can be fertilized like this. When you rightclick a grass block, tall grass and flowers will grow all over the place.=右鍵點擊一隻羊,使其羊毛變白。右鍵點擊一株植物以加快其生長速度。注意,不是所有的植物都能像這樣施肥。當你右鍵點擊一個草方時,高高的草和花會到處生長。
Cocoa beans are a brown dye and can be used to plant cocoas.=可可豆是一種棕色染料,也可用於種植可可。
Rightclick a sheep to turn its wool brown. Rightclick on the side of a jungle tree trunk (Jungle Wood) to plant a young cocoa.=右鍵點擊一隻羊,使其羊毛變成褐色。右鍵點擊叢林木的一側,可以種植一個可可。
Grows at the side of jungle trees=在叢林木側生長
Speeds up plant growth=加速植物生長

View File

@ -0,0 +1,99 @@
# textdomain: mcl_farming
Beetroot Seeds=甜菜種子
Grows into a beetroot plant. Chickens like beetroot seeds.=長成甜菜根。雞喜歡甜菜種子。
Place the beetroot seeds on farmland (which can be created with a hoe) to plant a beetroot plant. They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it beetroot seeds.=將甜菜種子放在農田上(可以用鋤頭創造)種植甜菜。它們在陽光下生長,在有水分的農田上生長更快。右鍵點擊一個動物來餵牠甜菜種子。
Premature Beetroot Plant (Stage 1)=未熟的甜菜植物第1階段
Beetroot plants are plants which grow on farmland under sunlight in 4 stages. On hydrated farmland, they grow a bit faster. They can be harvested at any time but will only yield a profit when mature.=甜菜根植物是在農田裡陽光下生長的植物分為4個階段。在有水分的農田裡它們生長得更快一些。它們可以在任何時候被收割但只有在成熟時才會產生利潤。
Premature Beetroot Plant=未熟的甜菜
Premature Beetroot Plant (Stage 2)=未熟的甜菜第2階段
Premature Beetroot Plant (Stage 3)=未熟的甜菜第3階段
Mature Beetroot Plant=成熟的甜菜
A mature beetroot plant is a farming plant which is ready to be harvested for a beetroot and some beetroot seeds. It won't grow any further.=成熟的甜菜是一種隨時可以收穫甜菜根和一些甜菜種子的植物。它不會再增長了。
Beetroot=甜菜根
Beetroots are both used as food item and a dye ingredient. Pigs like beetroots, too.=甜菜根既用作食品又用作染料成分。豬也喜歡甜菜根。
Hold it in your hand and right-click to eat it. Rightclick an animal to feed it.=把它拿在手裡,右鍵點擊以吃掉它。右鍵點擊一個動物來餵牠。
Beetroot Soup=甜菜根湯
Beetroot soup is a food item.=甜菜根湯是一種食物。
Premature Carrot Plant=成長中的胡蘿蔔
Carrot plants are plants which grow on farmland under sunlight in 8 stages, but only 4 stages can be visually told apart. On hydrated farmland, they grow a bit faster. They can be harvested at any time but will only yield a profit when mature.=胡蘿蔔是在農田中陽光下生長的植物分為8個階段但只有4個階段可以從視覺上區分。在水分充足的農田裡它們生長得更快一些。它們可以在任何時候收割但只有在成熟時才會有收益。
Premature Carrot Plant (Stage @1)=成長中的胡蘿蔔(第@1階段
Mature Carrot Plant=成熟的胡蘿蔔
Mature carrot plants are ready to be harvested for carrots. They won't grow any further.=成熟的胡蘿蔔是一種隨時可以收穫胡蘿蔔的植物。它不會再增長了。
Carrot=胡蘿蔔
Carrots can be eaten and planted. Pigs and rabbits like carrots.=胡蘿蔔既可以吃又可以種植。豬和兔子都喜款胡蘿蔔。
Hold it in your hand and rightclick to eat it. Place it on top of farmland to plant the carrot. It grows in sunlight and grows faster on hydrated farmland. Rightclick an animal to feed it.=把它拿在手裡,右鍵點擊以吃掉它;把它放置在農田上種植它。在水分充足的農田裡,它們生長得更快一些。右鍵點擊一個動物來餵牠。
Golden Carrot=金胡蘿蔔
A golden carrot is a precious food item which can be eaten. It is really, really filling!=金胡蘿蔔是一種可以吃的珍貴食品。它真的非常、非常的有營養!
Hoes are essential tools for growing crops. They are used to create farmland in order to plant seeds on it. Hoes can also be used as very weak weapons in a pinch.=鋤頭是種植農作物的基本工具。它們被用來開闢農田,以便在上面種植種子。在緊要關頭,鋤頭也可以作為非常薄弱的​​武器使用。
Use the hoe on a cultivatable block (by rightclicking it) to turn it into farmland. Dirt, grass blocks and grass paths are cultivatable blocks. Using a hoe on coarse dirt turns it into dirt.=在可耕地塊上使用鋤頭(通過右鍵點擊),將其變成農田。泥土、草塊和草路都是可耕地塊。在粗泥上使用鋤頭可以將其變成泥土。
Wood Hoe=木鋤
Stone Hoe=石鋤
Iron Hoe=鐵鋤
Golden Hoe=金鋤
Diamond Hoe=鑽石鋤
Melon Seeds=西瓜種子
Grows into a melon stem which in turn grows melons. Chickens like melon seeds.=長成可長出西瓜的瓜莖。雞喜歡西瓜種子。
Place the melon seeds on farmland (which can be created with a hoe) to plant a melon stem. Melon stems grow in sunlight and grow faster on hydrated farmland. When mature, the stem will attempt to grow a melon at the side. Rightclick an animal to feed it melon seeds.=將西瓜種子放在農田上(可以用鋤頭打造)以種植西瓜莖。瓜莖在陽光下生長,在水分充足的農田上生長更快。成熟後,莖會試圖在邊上長出一個西瓜。右鍵點擊動物以餵食西瓜種子。
Melon=西瓜
A melon is a block which can be grown from melon stems, which in turn are grown from melon seeds. It can be harvested for melon slices.=西瓜是一種方塊,可以從西瓜莖中生長出來,而西瓜莖又是從西瓜種子中生長出來的。它可以收穫西瓜片。
Premature Melon Stem=成長中的西瓜莖
Melon stems grow on farmland in 8 stages. On hydrated farmland, the growth is a bit quicker. Mature melon stems are able to grow melons.=西瓜莖是在農田中陽光下生長的植物分為8個階段。在水分充足的農田裡它們生長得更快一些。成熟的西瓜莖能夠長出西瓜。
Premature Melon Stem (Stage @1)=成長中的西瓜莖(第@1階段
Mature Melon Stem=成熟的西瓜莖
A mature melon stem attempts to grow a melon at one of its four adjacent blocks. A melon can only grow on top of farmland, dirt, or a grass block. When a melon is next to a melon stem, the melon stem immediately bends and connects to the melon. While connected, a melon stem can't grow another melon. As soon all melons around the stem have been removed, it loses the connection and is ready to grow another melon.=一個成熟的西瓜莖試圖在其四個相鄰的區塊中的一個長出西瓜。西瓜只能在農田、泥土或草塊上面生長。當西瓜挨著西瓜莖時,西瓜莖會立即彎曲並與該西瓜連接。在連接時,瓜莖不能再長出另一個西瓜。一旦西瓜莖周圍的所有西瓜都被移走,它就失去了連接,並準備好長出另一個西瓜。
Melon Slice=西瓜片
This is a food item which can be eaten.=這是一種可以吃的食物
Premature Potato Plant=成長中的馬鈴薯
Potato plants are plants which grow on farmland under sunlight in 8 stages, but only 4 stages can be visually told apart. On hydrated farmland, they grow a bit faster. They can be harvested at any time but will only yield a profit when mature.=馬鈴薯是在農田中陽光下生長的植物分為8個階段但只有4個階段可以從視覺上區分。在水分充足的農田裡它們生長得更快一些。它們可以在任何時候收割但只有在成熟時才會有收益。
Premature Potato Plant (Stage @1)=成長中的馬鈴薯(第@1階段
Mature Potato Plant=成熟的馬鈴薯
Mature potato plants are ready to be harvested for potatoes. They won't grow any further.=成熟的馬鈴薯是一種隨時可以收穫馬鈴薯的植物。它不會再增長了。
Potato=馬鈴薯
Potatoes are food items which can be eaten, cooked in the furnace and planted. Pigs like potatoes.=馬鈴薯是可以食用、在熔爐中烹調和種植的食品。豬喜歡馬鈴薯。
Hold it in your hand and rightclick to eat it. Place it on top of farmland to plant it. It grows in sunlight and grows faster on hydrated farmland. Rightclick an animal to feed it.=把它拿在手裡,點擊右鍵就可以吃掉它。把它放在農田上面來種植。它在陽光下生長,在有水分的農田上生長得更快。右鍵點擊一個動物來餵牠。
Baked Potato=烤馬鈴薯
Baked potatoes are food items which are more filling than the unbaked ones.=烤馬鈴薯是比未烤過的馬鈴薯更有營養的食物。
Poisonous Potato=毒馬鈴薯
This potato doesn't look too healthy. You can eat it to restore hunger points, but there's a 60% chance it will poison you briefly.=這個馬鈴薯看起來不是很健康。你可以吃它來恢復飢餓值但有60%的可能性會讓你短暫中毒。
Pumpkin Seeds=南瓜種子
Grows into a pumpkin stem which in turn grows pumpkins. Chickens like pumpkin seeds.=長成可以長出南瓜的南瓜莖。雞喜歡南瓜種子。
Place the pumpkin seeds on farmland (which can be created with a hoe) to plant a pumpkin stem. Pumpkin stems grow in sunlight and grow faster on hydrated farmland. When mature, the stem attempts to grow a pumpkin next to it. Rightclick an animal to feed it pumpkin seeds.=將南瓜種子放在農田上(可以用鋤頭打造)以種植南瓜莖。南瓜莖在陽光下生長,在水分充足的農田裡生長得更快。成熟後,莖會試圖在它旁邊長出一個南瓜。右鍵點擊動物以給它餵食南瓜種子。
Premature Pumpkin Stem=成長中的南瓜莖
Pumpkin stems grow on farmland in 8 stages. On hydrated farmland, the growth is a bit quicker. Mature pumpkin stems are able to grow pumpkins.=南瓜莖在農田上的生長分為8個階段在水分充足的農田裡生長得更快。成熟的南瓜莖能夠長出南瓜。
Premature Pumpkin Stem (Stage @1)=成長中的南瓜莖(第@1階段
Mature Pumpkin Stem=成熟的南瓜莖
A mature pumpkin stem attempts to grow a pumpkin at one of its four adjacent blocks. A pumpkin can only grow on top of farmland, dirt or a grass block. When a pumpkin is next to a pumpkin stem, the pumpkin stem immediately bends and connects to the pumpkin. A connected pumpkin stem can't grow another pumpkin. As soon all pumpkins around the stem have been removed, it loses the connection and is ready to grow another pumpkin.=一個成熟的南瓜莖試圖在其四個相鄰的區塊之一長出一個南瓜。南瓜只能生長在農田、泥土或草塊的上面。當南瓜挨著南瓜莖時,南瓜莖會立即彎曲並連接到該南瓜上。連接的南瓜莖不能再長出另一個南瓜。只要南瓜莖周圍的所有南瓜都被移走,它就失去了連接,可以再長出一個南瓜。
Faceless Pumpkin=南瓜
A faceless pumpkin is a decorative block. It can be carved with shears to obtain pumpkin seeds.=南瓜是一種裝飾方塊。它可以用剪刀進行雕刻,以獲得南瓜種子。
Pumpkin=雕刻過的南瓜
A pumpkin can be worn as a helmet. Pumpkins grow from pumpkin stems, which in turn grow from pumpkin seeds.=南瓜可以作為頭盔佩戴。南瓜由南瓜莖生長,而南瓜莖又由南瓜種子生長。
Jack o'Lantern=南瓜燈
A jack o'lantern is a traditional Halloween decoration made from a pumpkin. It glows brightly.=南瓜燈是由南瓜製成的傳統萬聖節裝飾。它發出明亮的光芒。
Pumpkin Pie=南瓜派
A pumpkin pie is a tasty food item which can be eaten.=南瓜派是可以吃的美味食品。
Farmland=農田
Farmland is used for farming, a necessary surface to plant crops. It is created when a hoe is used on dirt or a similar block. Plants are able to grow on farmland, but slowly. Farmland will become hydrated farmland (on which plants grow faster) when it rains or a water source is nearby. This block will turn back to dirt when a solid block appears above it or a piston arm extends above it.=農田用於耕作,是種植農作物的必要表面。它是在泥土類方塊上使用鋤頭時形成的。植物能夠在農田上生長,但速度很慢。當下雨或附近有水源時,農田會變成濕潤的耕地(植物在上面生長更快)。當上面出現固體方塊或活塞臂延伸到上面時,這個方塊會變回泥土。
Hydrated Farmland=濕潤的耕地
Hydrated farmland is used in farming, this is where you can plant and grow some plants. It is created when farmland is under rain or near water. Without water, this block will dry out eventually. This block will turn back to dirt when a solid block appears above it or a piston arm extends above it.=濕潤的耕地用於耕作,這是你可以種植和生長一些植物的地方。它是在農田被雨水沖刷或靠近水的情況下形成的。如果沒有水,這個方塊最終會變乾。當上面出現固體方塊或活塞臂延伸到上面時,這個方塊會變回泥土。
Wheat Seeds=小麥種子
Grows into a wheat plant. Chickens like wheat seeds.=長成小麥。雞喜歡小麥種子。
Place the wheat seeds on farmland (which can be created with a hoe) to plant a wheat plant. They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it wheat seeds.=將小麥種子放在農田上(可以用鋤頭製造)以種植一株小麥。它們在陽光下生長,在有水的農田裡生長得更快。右鍵點擊一個動物以給它餵食小麥種子。
Premature Wheat Plant=成長中的小麥
Premature wheat plants grow on farmland under sunlight in 8 stages. On hydrated farmland, they grow faster. They can be harvested at any time but will only yield a profit when mature.=小麥是在農田中陽光下生長的植物分為8個階段。在水分充足的農田裡它們生長得更快一些。它們可以在任何時候收割但只有在成熟時才會有收益。
Premature Wheat Plant (Stage @1)=成長中的小麥(第@1階段
Mature Wheat Plant=成熟的小麥
Mature wheat plants are ready to be harvested for wheat and wheat seeds. They won't grow any further.=成熟的小麥是一種隨時可以收穫小麥的植物。它不會再增長了。
Wheat=小麥
Wheat is used in crafting. Some animals like wheat.=小麥主要用於合成。有些動物喜歡小麥。
Cookie=餅乾
Bread=面包
Hay Bale=乾草捆
Hay bales are decorative blocks made from wheat.=乾草捆是用小麥製成的裝飾方塊。
To carve a face into the pumpkin, use the shears on the side you want to carve.=要在南瓜上雕刻,請將剪刀放在你要雕刻的一側。
Use the “Place” key on an animal to try to feed it wheat.=在動物身上使用「放置」鍵以嘗試給它餵食小麥。
Grows on farmland=在農田上生長
Turns block into farmland=把方塊變成農田
60% chance of poisoning=有60%的可能性會讓你中毒
Surface for crops=種植農作物的表面
Can become wet=可以變溼
Uses: @1=使用:@1

View File

@ -0,0 +1,18 @@
# textdomain: mcl_fences
Fences are structures which block the way. Fences will connect to each other and solid blocks. They cannot be jumped over with a simple jump.=柵欄是阻擋道路的結構。柵欄會連接到彼此和固體方塊。它們不能用簡單的跳躍方式跳過去。
Fence gates can be opened or closed and can't be jumped over. Fences will connect nicely to fence gates.=柵欄門可以打開或關閉,並且不能跳過。 柵欄將很好地連接到柵欄門。
Right-click the fence gate to open or close it.=右鍵單擊柵欄門以將其打開或關閉。
Oak Fence=橡木柵欄
Oak Fence Gate=橡木柵欄門
Spruce Fence=杉木柵欄
Spruce Fence Gate=杉木柵欄門
Birch Fence=樺木柵欄
Birch Fence Gate=樺木柵欄門
Jungle Fence=叢林木柵欄
Jungle Fence Gate=叢林木柵欄門
Dark Oak Fence=黑橡木柵欄
Dark Oak Fence Gate=黑橡木柵欄門
Acacia Fence=相思木柵欄
Acacia Fence Gate=相思木柵欄門
Nether Brick Fence=地獄磚柵欄
Openable by players and redstone power=可被紅石或玩家打開

View File

@ -24,29 +24,33 @@ local get_connected_players = minetest.get_connected_players
local vector = vector local vector = vector
local math = math local math = math
-- inverse pyramid pattern above lava source, floor 1 of 2: local adjacents = {
local lava_fire= { x =-1, y = 0, z = 0 },
{ { x = 1, y = 0, z = 0 },
{ x =-1, y = 1, z =-1}, { x = 0, y = 1, z = 0 },
{ x =-1, y = 1, z = 0}, { x = 0, y =-1, z = 0 },
{ x =-1, y = 1, z = 1}, { x = 0, y = 0, z =-1 },
{ x = 0, y = 1, z =-1}, { x = 0, y = 0, z = 1 },
{ x = 0, y = 1, z = 0},
{ x = 0, y = 1, z = 1},
{ x = 1, y = 1, z =-1},
{ x = 1, y = 1, z = 0},
{ x = 1, y = 1, z = 1}
}
local alldirs=
{
{ x =-1, y = 0, z = 0},
{ x = 1, y = 0, z = 0},
{ x = 0, y =-1, z = 0},
{ x = 0, y = 1, z = 0},
{ x = 0, y = 0, z =-1},
{ x = 0, y = 0, z = 1}
} }
local function shuffle_table(t)
for i = #t, 1, -1 do
local r = math.random(i)
t[i], t[r] = t[r], t[i]
end
end
shuffle_table(adjacents)
local function has_flammable(pos)
for k,v in pairs(adjacents) do
local p=vector.add(pos,v)
local n=minetest.get_node_or_nil(p)
if n and minetest.get_item_group(n.name, "flammable") ~= 0 then
return p
end
end
end
local smoke_pdef = { local smoke_pdef = {
amount = 0.009, amount = 0.009,
maxexptime = 4.0, maxexptime = 4.0,
@ -86,10 +90,6 @@ else
eternal_fire_help = S("Eternal fire is a damaging block. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.") eternal_fire_help = S("Eternal fire is a damaging block. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.")
end end
local function fire_timer(pos)
minetest.get_node_timer(pos):start(math.random(3, 7))
end
local function spawn_fire(pos, age) local function spawn_fire(pos, age)
set_node(pos, {name="mcl_fire:fire", param2 = age}) set_node(pos, {name="mcl_fire:fire", param2 = age})
minetest.check_single_for_falling({x=pos.x, y=pos.y+1, z=pos.z}) minetest.check_single_for_falling({x=pos.x, y=pos.y+1, z=pos.z})
@ -124,82 +124,6 @@ minetest.register_node("mcl_fire:fire", {
minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true) minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true)
end end
end, end,
on_timer = function(pos)
local node = get_node(pos)
-- Age is a number from 0 to 15 and is increased every timer step.
-- "old" fire is more likely to be extinguished
local age = node.param2
local flammables = find_nodes_in_area({x=pos.x-1, y=pos.y-1, z=pos.z-1}, {x=pos.x+1, y=pos.y+4, z=pos.z+1}, {"group:flammable"})
local below = get_node({x=pos.x, y=pos.z-1, z=pos.z})
local below_is_flammable = get_item_group(below.name, "flammable") > 0
-- Extinguish fire
if (not fire_enabled) and (math.random(1,3) == 1) then
remove_node(pos)
return
end
if age == 15 and not below_is_flammable then
remove_node(pos)
return
elseif age > 3 and #flammables == 0 and not below_is_flammable and math.random(1,4) == 1 then
remove_node(pos)
return
end
local age_add = 1
-- If fire spread is disabled, we have to skip the "destructive" code
if (not fire_enabled) then
if age + age_add <= 15 then
node.param2 = age + age_add
set_node(pos, node)
end
-- Restart timer
fire_timer(pos)
return
end
-- Spawn fire to nearby flammable nodes
local is_next_to_flammable = find_node_near(pos, 2, {"group:flammable"}) ~= nil
if is_next_to_flammable and math.random(1,2) == 1 then
-- The fire we spawn copies the age of this fire.
-- This prevents fire from spreading infinitely far as the fire fire dies off
-- quicker the further it has spreaded.
local age_next = math.min(15, age + math.random(0, 1))
-- Select random type of fire spread
local burntype = math.random(1,2)
if burntype == 1 then
-- Spawn fire in air
local nodes = find_nodes_in_area({x=pos.x-1, y=pos.y-1, z=pos.z-1}, {x=pos.x+1, y=pos.y+4, z=pos.z+1}, {"air"})
while #nodes > 0 do
local r = math.random(1, #nodes)
if find_node_near(nodes[r], 1, {"group:flammable"}) then
spawn_fire(nodes[r], age_next)
break
else
table.remove(nodes, r)
end
end
else
-- Burn flammable block
local nodes = find_nodes_in_area({x=pos.x-1, y=pos.y-1, z=pos.z-1}, {x=pos.x+1, y=pos.y+4, z=pos.z+1}, {"group:flammable"})
if #nodes > 0 then
local r = math.random(1, #nodes)
local nn = get_node(nodes[r]).name
local ndef = minetest.registered_nodes[nn]
local fgroup = get_item_group(nn, "flammable")
if ndef and ndef._on_burn then
ndef._on_burn(nodes[r])
elseif fgroup ~= -1 then
spawn_fire(nodes[r], age_next)
end
end
end
end
-- Regular age increase
if age + age_add <= 15 then
node.param2 = age + age_add
set_node(pos, node)
end
-- Restart timer
fire_timer(pos)
end,
drop = "", drop = "",
sounds = {}, sounds = {},
-- Turn into eternal fire on special blocks, light Nether portal (if possible), start burning timer -- Turn into eternal fire on special blocks, light Nether portal (if possible), start burning timer
@ -216,7 +140,6 @@ minetest.register_node("mcl_fire:fire", {
mcl_portals.light_nether_portal(pos) mcl_portals.light_nether_portal(pos)
end end
fire_timer(pos)
mcl_particles.spawn_smoke(pos, "fire", smoke_pdef) mcl_particles.spawn_smoke(pos, "fire", smoke_pdef)
end, end,
on_destruct = function(pos) on_destruct = function(pos)
@ -254,29 +177,8 @@ minetest.register_node("mcl_fire:eternal_fire", {
minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true) minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true)
end end
end, end,
on_timer = function(pos)
if fire_enabled then
local airs = find_nodes_in_area({x=pos.x-1, y=pos.y-1, z=pos.z-1}, {x=pos.x+1, y=pos.y+4, z=pos.z+1}, {"air"})
while #airs > 0 do
local r = math.random(1, #airs)
if find_node_near(airs[r], 1, {"group:flammable"}) then
local node = get_node(airs[r])
local age = node.param2
local age_next = math.min(15, age + math.random(0, 1))
spawn_fire(airs[r], age_next)
break
else
table.remove(airs, r)
end
end
end
-- Restart timer
fire_timer(pos)
end,
-- Start burning timer and light Nether portal (if possible) -- Start burning timer and light Nether portal (if possible)
on_construct = function(pos) on_construct = function(pos)
fire_timer(pos)
if has_mcl_portals then --Calling directly minetest.get_modpath consumes 4x more compute time if has_mcl_portals then --Calling directly minetest.get_modpath consumes 4x more compute time
mcl_portals.light_nether_portal(pos) mcl_portals.light_nether_portal(pos)
end end
@ -400,6 +302,25 @@ if flame_sound then
end) end)
end end
-- [...]a fire that is not adjacent to any flammable block does not spread, even to another flammable block within the normal range.
-- https://minecraft.fandom.com/wiki/Fire#Spread
local function check_aircube(p1,p2)
local nds=minetest.find_nodes_in_area(p1,p2,{"air"})
shuffle_table(nds)
for k,v in pairs(nds) do
if has_flammable(v) then return v end
end
end
-- [...] a fire block can turn any air block that is adjacent to a flammable block into a fire block. This can happen at a distance of up to one block downward, one block sideways (including diagonals), and four blocks upward of the original fire block (not the block the fire is on/next to).
local function get_ignitable(pos)
return check_aircube(vector.add(pos,vector.new(-1,-1,-1)),vector.add(pos,vector.new(1,4,1)))
end
-- Fire spreads from a still lava block similarly: any air block one above and up to one block sideways (including diagonals) or two above and two blocks sideways (including diagonals) that is adjacent to a flammable block may be turned into a fire block.
local function get_ignitable_by_lava(pos)
return check_aircube(vector.add(pos,vector.new(-1,1,-1)),vector.add(pos,vector.new(1,1,1))) or check_aircube(vector.add(pos,vector.new(-2,2,-2)),vector.add(pos,vector.new(2,2,2))) or nil
end
-- --
-- ABMs -- ABMs
@ -415,27 +336,13 @@ minetest.register_abm({
chance = 1, chance = 1,
catch_up = false, catch_up = false,
action = function(pos, node, active_object_count, active_object_count_wider) action = function(pos, node, active_object_count, active_object_count_wider)
remove_node(pos) minetest.remove_node(pos)
minetest.sound_play("fire_extinguish_flame", minetest.sound_play("fire_extinguish_flame",
{pos = pos, max_hear_distance = 16, gain = 0.15}, true) {pos = pos, max_hear_distance = 16, gain = 0.15}, true)
end, end,
}) })
-- Enable the following ABMs according to 'enable fire' setting -- Enable the following ABMs according to 'enable fire' setting
local function has_flammable(pos)
local npos, node
for n, v in ipairs(alldirs) do
npos = vector.add(pos, v)
node = get_node_or_nil(npos)
if node and node.name and get_item_group(node.name, "flammable") ~= 0 then
return npos
end
end
return false
end
if not fire_enabled then if not fire_enabled then
-- Occasionally remove fire if fire disabled -- Occasionally remove fire if fire disabled
@ -446,67 +353,88 @@ if not fire_enabled then
interval = 10, interval = 10,
chance = 10, chance = 10,
catch_up = false, catch_up = false,
action = remove_node, action = minetest.remove_node,
}) })
else -- Fire enabled else -- Fire enabled
-- Set fire to air nodes -- Fire Spread
minetest.register_abm({
label = "Ignite flame",
nodenames ={"mcl_fire:fire","mcl_fire:eternal_fire"},
interval = 7,
chance = 12,
catch_up = false,
action = function(pos)
local p = get_ignitable(pos)
if p then
spawn_fire(p)
shuffle_table(adjacents)
end
end
})
--lava fire spread
minetest.register_abm({ minetest.register_abm({
label = "Ignite fire by lava", label = "Ignite fire by lava",
nodenames = {"group:lava"}, nodenames = {"mcl_core:lava_source","mcl_nether:nether_lava_source"},
neighbors = {"air"}, neighbors = {"air","group:flammable"},
interval = 7, interval = 7,
chance = 3, chance = 3,
catch_up = false, catch_up = false,
action = function(pos) action = function(pos)
local i, dir, target, node, i2, f local p=get_ignitable_by_lava(pos)
i = math.random(1,9) if p then
dir = lava_fire[i] spawn_fire(p)
target = {x=pos.x+dir.x, y=pos.y+dir.y, z=pos.z+dir.z}
node = get_node(target)
if not node or node.name ~= "air" then
i = ((i + math.random(0,7)) % 9) + 1
dir = lava_fire[i]
target = {x=pos.x+dir.x, y=pos.y+dir.y, z=pos.z+dir.z}
node = get_node(target)
if not node or node.name ~= "air" then
return
end
end
i2 = math.random(1,15)
if i2 < 10 then
local dir2, target2, node2
dir2 = lava_fire[i2]
target2 = {x=target.x+dir2.x, y=target.y+dir2.y, z=target.z+dir2.z}
node2 = get_node(target2)
if node2 and node2.name == "air" then
f = has_flammable(target2)
if f then
minetest.after(1, spawn_fire, {x=target2.x, y=target2.y, z=target2.z})
minetest.add_particle({
pos = vector.new({x=pos.x, y=pos.y+0.5, z=pos.z}),
velocity={x=f.x-pos.x, y=math.max(f.y-pos.y,0.7), z=f.z-pos.z},
expirationtime=1, size=1.5, collisiondetection=false,
glow=minetest.LIGHT_MAX, texture="mcl_particles_flame.png"
})
return
end
end
end
f = has_flammable(target)
if f then
minetest.after(1, spawn_fire, {x=target.x, y=target.y, z=target.z})
minetest.add_particle({
pos = vector.new({x=pos.x, y=pos.y+0.5, z=pos.z}),
velocity={x=f.x-pos.x, y=math.max(f.y-pos.y,0.25), z=f.z-pos.z},
expirationtime=1, size=1, collisiondetection=false,
glow=minetest.LIGHT_MAX, texture="mcl_particles_flame.png"
})
end end
end, end,
}) })
minetest.register_abm({
label = "Remove fires",
nodenames = {"mcl_fire:fire"},
interval = 7,
chance = 3,
catch_up = false,
action = function(pos)
local p=has_flammable(pos)
if p then
local n=minetest.get_node_or_nil(p)
if n and minetest.get_item_group(n.name, "flammable") < 1 then
minetest.remove_node(pos)
end
else
minetest.remove_node(pos)
end
end,
})
-- Remove flammable nodes around basic flame
minetest.register_abm({
label = "Remove flammable nodes",
nodenames = {"mcl_fire:fire","mcl_fire:eternal_fire"},
neighbors = {"group:flammable"},
interval = 5,
chance = 18,
catch_up = false,
action = function(pos)
local p = has_flammable(pos)
if not p then
return
end
local nn = minetest.get_node(p).name
local def = minetest.registered_nodes[nn]
local fgroup = minetest.get_item_group(nn, "flammable")
if def and def._on_burn then
def._on_burn(p)
elseif fgroup ~= -1 then
spawn_fire(p)
minetest.check_for_falling(p)
end
end
})
end end
-- Set pointed_thing on (normal) fire. -- Set pointed_thing on (normal) fire.

View File

@ -0,0 +1,19 @@
# textdomain: mcl_fire
Fire Charge=火焰彈
Fire charges are primarily projectiles which can be launched from dispensers, they will fly in a straight line and burst into a fire on impact. Alternatively, they can be used to ignite fires directly.=火焰彈主要是可以從發射器中發射的投射物,它們會沿直線飛行,並在撞擊時爆裂成火。另外,它們也可以用來直接點燃火焰。
Put the fire charge into a dispenser and supply it with redstone power to launch it. To ignite a fire directly, simply place the fire charge on the ground, which uses it up.=將火藥放入發射器中,並為其提供紅石動力以發射火藥。要直接點火,只需將火藥放在地上,這樣就能用完。
Flint and Steel=打火機
Flint and steel is a tool to start fires and ignite blocks.=燧石和鋼是一種用來起火和點燃木塊的工具。
Rightclick the surface of a block to attempt to light a fire in front of it or ignite the block. A few blocks have an unique reaction when ignited.=右鍵點擊方塊的表面,可以在它面前點火或點燃方塊。有幾種方塊在被點燃時會有獨特的反應。
Fire is a damaging and destructive but short-lived kind of block. It will destroy and spread towards near flammable blocks, but fire will disappear when there is nothing to burn left. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=火是一種具有傷害性和破壞性的方塊,但持續時間很短。它將破壞並向附近的易燃區塊蔓延,但當沒有什麼可燃燒的東西時,火就會消失。它將被附近的水和雨所熄滅。火可以通過打它來安全地摧毀,但如果你直接站在它裡面,它是有傷害的。如果火是在地獄石或岩漿塊上面點燃的,它將立即變成永恆的火。
Fire is a damaging but non-destructive short-lived kind of block. It will disappear when there is no flammable block around. Fire does not destroy blocks, at least not in this world. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=火是一種具有傷害性但無破壞性的短命方塊。當周圍沒有可燃方塊的時候,它就會消失。火不會破壞方塊,至少在這個世界上不會。它將被附近的水和雨所熄滅。火可以通過打它來安全地摧毀,但如果你直接站在它裡面,它是有傷害的。如果火是在地獄石或岩漿塊上面點燃的,它將立即變成永恆的火。
Eternal fire is a damaging block that might create more fire. It will create fire around it when flammable blocks are nearby. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=永恆之火是一個具有破壞性的方塊,可能會產生更多的火。當附近有易燃塊方塊時,它將在周圍產生火焰。永恆之火可以被拳頭和附近的水所熄滅。和(普通)火不同,永恆之火不會自行熄滅,而且在雨中也會繼續燃燒。擊打永恆之火是安全的,但如果你站在裡面就會受傷。
Eternal fire is a damaging block. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=永恆之火是一種破壞性的方塊。永恆之火可以被拳頭和附近的水塊所熄滅。和(普通)火不同,永恆之火不會自行熄滅,而且在雨中也會繼續燃燒。擊打永恆之火是安全的,但如果你站在裡面就會受傷。
@1 has been cooked crisp.=@1 被燒死了
@1 felt the burn.=@1 被燒死了
@1 died in the flames.=@1 在火焰中昇天
@1 died in a fire.=@1 在火焰中昇天
Fire=火
Eternal Fire=永恆之火
Dispenser projectile=發射器投射物
Starts fires and ignites blocks=點火和點燃方塊

View File

@ -0,0 +1,18 @@
# textdomain: mcl_fishing
Fishing Rod=釣竿
Fishing rods can be used to catch fish.=釣竿是用來取得魚的工具。
Rightclick to launch the bobber. When it sinks right-click again to reel in an item. Who knows what you're going to catch?=右鍵單擊以啟動浮標。當它下沉時,再次點擊右鍵來釣起一個物品。誰知道你會抓到什麼?
Raw Fish=生鱈魚
Raw fish is obtained by fishing and is a food item which can be eaten safely. Cooking it improves its nutritional value.=生鱈魚是通過捕魚獲得的,是一種可以安全食用的食品。烹飪可以提高其營養價值。
Cooked Fish=熟鱈魚
Mmh, fish! This is a healthy food item.=嗯,魚! 這是一種健康的食品。
Raw Salmon=生鮭魚
Raw salmon is obtained by fishing and is a food item which can be eaten safely. Cooking it improves its nutritional value.=生鮭魚是通過捕魚獲得的,是一種可以安全食用的食品。烹飪可以提高其營養價值。
Cooked Salmon=熟鮭魚
This is a healthy food item which can be eaten.=這是一種健康的可食用食品。
Clownfish=熱帶魚
Clownfish may be obtained by fishing (and luck) and is a food item which can be eaten safely.=熱帶魚可以通過釣魚(和運氣)獲得,是一種可以安全食用的食物。
Pufferfish=河豚
Pufferfish are a common species of fish and can be obtained by fishing. They can technically be eaten, but they are very bad for humans. Eating a pufferfish only restores 1 hunger point and will poison you very badly (which drains your health non-fatally) and causes serious food poisoning (which increases your hunger).=河豚是一種常見的魚種可以通過釣魚獲得。嚴格來說它們可以被吃掉但對人類非常不利。吃了河豚只能恢復1點飢餓感而且會讓你中毒非常嚴重非致命性地消耗你的健康並導致嚴重的食物中毒會增加你的飢餓感
Catches fish in water=在水中取得魚
Very poisonous=有劇毒

View File

@ -0,0 +1,26 @@
# textdomain: mcl_flowerpots
Dandelion Flower Pot=蒲公英盆栽
Poppy Flower Pot=罌粟盆栽
Blue Orchid Flower Pot=藍色蝴蝶蘭盆栽
Allium Flower Pot=紫紅球花盆栽
Azure Bluet Flower Pot=雛草盆栽
Red Tulip Flower Pot=紅色鬱金香盆栽
Pink Tulip Flower Pot=粉色鬱金香盆栽
White Tulip Flower Pot=白色鬱金香盆栽
Orange Tulip Flower Pot=橙色鬱金香盆栽
Oxeye Daisy Flower Pot=雛菊盆栽
Brown Mushroom Flower Pot=棕色蘑菇盆栽
Red Mushroom Flower Pot=紅色蘑菇盆栽
Oak Sapling Flower Pot=橡木樹苗盆栽
Acacia Sapling Flower Pot=相思木樹苗盆栽
Jungle Sapling Flower Pot=叢林木樹苗盆栽
Dark Oak Sapling Flower Pot=黑橡木樹苗盆栽
Spruce Sapling Flower Pot=杉木樹苗盆栽
Birch Sapling Flower Pot=樺木樹苗盆栽
Dead Bush Flower Pot=枯灌木盆栽
Fern Flower Pot=蕨盆栽
Cactus Flower Pot=仙人掌盆栽
Flower Pot=花盆
Flower pots are decorative blocks in which flowers and other small plants can be placed.=花盆是可以放置鮮花和其他小植物的裝飾方塊。
Just place a plant on the flower pot. Flower pots can hold small flowers (not higher than 1 block), saplings, ferns, dead bushes, mushrooms and cacti. Rightclick a potted plant to retrieve the plant.=只需在花盆上放置一株植物即可。花盆可以放置小花不高於1格、樹苗、蕨類植物、枯樹叢、蘑菇和仙人掌。右鍵點擊盆栽即可取回植物。
Can hold a small flower or plant=放置鮮花和其他小植物

View File

@ -0,0 +1,32 @@
# textdomain: mcl_flowers
This is a small flower. Small flowers are mainly used for dye production and can also be potted.=
It can only be placed on a block on which it would also survive.=
Poppy=罌粟
Dandelion=蒲公英
Oxeye Daisy=雛菊
Orange Tulip=橙色鬱金香
Pink Tulip=粉紅色鬱金香
Red Tulip=紅色鬱金香
White Tulip=白色鬱金香
Allium=紫紅球花
Azure Bluet=藍花美耳草
Blue Orchid=藍色蝴蝶蘭
Tall Grass=草
Tall grass is a small plant which often occurs on the surface of grasslands. It can be harvested for wheat seeds. By using bone meal, tall grass can be turned into double tallgrass which is two blocks high.=草是一種小植物,經常出現在草原的表面。它可以收穫小麥的種子。通過使用骨粉,高草可以變成兩塊高的芒草。
Fern=蕨
Ferns are small plants which occur naturally in jungles and taigas. They can be harvested for wheat seeds. By using bone meal, a fern can be turned into a large fern which is two blocks high.=蕨是自然存在於叢林和台地的小型植物。它們可以被收割為小麥種子。通過使用骨粉,可以把蕨變成兩塊高的高蕨。
(Top Part)=(上部分)
Peony=牡丹花
A peony is a large plant which occupies two blocks. It is mainly used in dye production.=牡丹花是一種大型植物,共有兩格高。它主要用於染料生產。
Rose Bush=玫瑰叢
A rose bush is a large plant which occupies two blocks. It is safe to touch it. Rose bushes are mainly used in dye production.=玫瑰叢是一種大型植物,共有兩格高。觸摸它是安全的。玫瑰叢主要用於染料生產。
Lilac=紫丁香
A lilac is a large plant which occupies two blocks. It is mainly used in dye production.=紫丁香是一種大型植物,共有兩格高。它主要用於染料生產。
Sunflower=向日葵
A sunflower is a large plant which occupies two blocks. It is mainly used in dye production.=向日葵是一種大型植物,共有兩格高。它主要用於染料生產。
Double tallgrass a variant of tall grass and occupies two blocks. It can be harvested for wheat seeds.=芒草是草的兩格高變種。可以收割小麥種子。
Large fern is a variant of fern and occupies two blocks. It can be harvested for wheat seeds.=高蕨是蕨的兩格高變種。可以收割小麥種子。
Double Tallgrass=芒草
Large Fern=高蕨
Lily Pad=荷葉
A lily pad is a flat plant block which can be walked on. They can be placed on water sources, ice and frosted ice.=荷葉是一種平坦的植物方塊,可以在上面行走。它們可以放在水源、冰面和結霜的冰面上。

View File

@ -0,0 +1,9 @@
# textdomain: mcl_furnaces
Furnace=熔爐
Furnaces cook or smelt several items, using a furnace fuel, into something else.=熔爐用一種爐子燃料將幾種物品烹飪或熔煉成其他東西。
Use the furnace to open the furnace menu. Place a furnace fuel in the lower slot and the source material in the upper slot. The furnace will slowly use its fuel to smelt the item. The result will be placed into the output slot at the right side.=使用熔爐打開爐子菜單。將熔爐燃料放在下槽,將源材料放在上槽。熔爐將慢慢地使用它的燃料來熔煉或烹飪物品。其結果將被放入右側的輸出槽中。
Use the recipe book to see what you can smelt, what you can use as fuel and how long it will burn.=使用合成教學來查看您可以冶煉的東西,可以用作燃料的物品以及可燃燒時間。
Burning Furnace=燃燒的熔爐
Recipe book=合成教學
Inventory=物品欄
Uses fuel to smelt or cook items=使用燃料來熔煉或烹飪物品

View File

@ -0,0 +1,11 @@
# textdomain: mcl_heads
Zombie Head=殭屍頭
A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%.=殭屍頭是一個小的裝飾方塊類似於殭屍的頭。它也可以作為頭盔佩戴可以使殭屍的探測範圍減少50%。
Creeper Head=苦力怕頭
A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet, which reduces the detection range of creepers by 50%.=苦力怕頭是一個小的裝飾方塊類似於苦力怕的頭。它也可以作為頭盔佩戴可以使苦力怕的探測範圍減少50%。
Human Head=玩家頭
A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=玩家頭是一個小的裝飾塊,類似於玩家的頭部。它也可以作為頭盔戴著玩,但不提供任何保護。
Skeleton Skull=骷髏頭
A skeleton skull is a small decorative block which resembles the skull of a skeleton. It can also be worn as a helmet, which reduces the detection range of skeletons by 50%.=骷髏頭是一個小的裝飾方塊類似於骷髏的頭。它也可以作為頭盔佩戴可以使骷髏的探測範圍減少50%。
Wither Skeleton Skull=凋零骷髏頭
A wither skeleton skull is a small decorative block which resembles the skull of a wither skeleton. It can also be worn as a helmet for fun, but does not offer any protection.=凋零骷髏頭是一個小的裝飾塊,類似於凋零骷髏的頭部。它也可以作為頭盔戴著玩,但不提供任何保護。

View File

@ -343,7 +343,7 @@ minetest.register_abm({
local abovenode = minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}) local abovenode = minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z})
if not minetest.registered_items[abovenode.name] then return end if not minetest.registered_items[abovenode.name] then return end
-- Don't bother checking item enties if node above is a container (should save some CPU) -- Don't bother checking item enties if node above is a container (should save some CPU)
if minetest.get_item_group(abovenode.name, "container") then if minetest.get_item_group(abovenode.name, "container") ~= 0 then
return return
end end
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)

View File

@ -0,0 +1,16 @@
# textdomain: mcl_hoppers
Hopper=漏斗
Hoppers are containers with 5 inventory slots. They collect dropped items from above, take items from a container above and attempt to put its items it into an adjacent container. Hoppers can go either downwards or sideways. Hoppers interact with chests, droppers, dispensers, shulker boxes, furnaces and hoppers.=漏斗是有5個物品槽的容器。它們從上面收集掉落的物品從上面的容器中取出物品並試圖把它的物品放到鄰近的容器中。漏斗可以向下或向側面移動。漏斗與箱子、投擲器、發射器、界伏盒、熔爐和漏斗相互作用。
Hoppers interact with containers the following way:=漏斗會對容器做以下事情:
• Furnaces: Hoppers from above will put items into the source slot. Hoppers from below take items from the output slot. They also take items from the fuel slot when they can't be used as a fuel. Sideway hoppers that point to the furnace put items into the fuel slot=• 熔爐:從上面的漏斗會將物品放入源料槽。下方的漏斗從輸出槽中取出物品。當物品不能作為燃料使用時,它們也會從燃料槽中取出物品。指向熔爐的側邊漏斗將物品放入燃料槽。
• Ender chests: No interaction.=• 終界箱:不會有任何動作。
• Other containers: Normal interaction.=• 其他容器:正常動作。
Hoppers can be disabled when supplied with redstone power. Disabled hoppers don't move items.=供給紅石電源時,可以禁用漏斗。被禁用的漏斗不會移動物品。
To place a hopper vertically, place it on the floor or a ceiling. To place it sideways, place it at the side of a block. Use the hopper to access its inventory.=要垂直放置漏斗,可將其放在地板或天花板上。要想把它放在側面,就把它放在一個方塊的側面。使用漏斗來訪問其庫存。
Disabled Hopper=被禁用的漏斗
Side Hopper=側面漏斗
Disabled Side Hopper=被禁用的側面漏斗
Inventory=物品欄
5 inventory slots=5個物品槽
Collects items from above, moves items to container below=從上面收集物品,並把物品放到下面的容器中
Can be disabled with redstone power=可被紅石電源禁用

View File

@ -0,0 +1,5 @@
# textdomain: mcl_itemframes
Item Frame=物品展示框
Item frames are decorative blocks in which items can be placed.=物品展示框是可以展示物品的裝飾方塊。
Just place any item on the item frame. Use the item frame again to retrieve the item.=只需將物品放在物品展示框上即可。再次使用物品展示框來提出物品。
Can hold an item=可以展示物品

View File

@ -0,0 +1,10 @@
# textdomain: mcl_jukebox
Music Disc=唱片
A music disc holds a single music track which can be used in a jukebox to play music.=一張唱片可容納單一的音樂曲目,可在唱片機中用於播放音樂。
Place a music disc into an empty jukebox to play the music. Use the jukebox again to retrieve the music disc. The music can only be heard by you, not by other players.=將唱片放入空的唱片機中播放音樂。再次使用唱片機取出唱片。音樂只能由您自己聽,而不能由其他玩家聽。
@1—@2=
Jukebox=唱片機
Jukeboxes play music when they're supplied with a music disc.=唱片機在提供唱片的情况下播放音樂。
Place a music disc into an empty jukebox to insert the music disc and play music. If the jukebox already has a music disc, you will retrieve this music disc first. The music can only be heard by you, not by other players.=將音樂光盤放入空的點唱機,插入音樂光盤並播放音樂。如果點唱機已經有一張音樂光盤,你要先取回這張音樂光盤。音樂只能被你聽到,不能被其他玩家聽到。
Now playing: @1—@2=正在播放:@1—@2
Uses music discs to play music=使用唱片播放音樂

File diff suppressed because one or more lines are too long

View File

@ -147,11 +147,23 @@ function mcl_maps.load_map(id)
local texture = "mcl_maps_map_texture_" .. id .. ".tga" local texture = "mcl_maps_map_texture_" .. id .. ".tga"
if not loaded_maps[id] then if not loaded_maps[id] then
loaded_maps[id] = true if not minetest.features.dynamic_add_media_table then
dynamic_add_media(map_textures_path .. texture, function() end) -- minetest.dynamic_add_media() blocks in
-- Minetest 5.3 and 5.4 until media loads
loaded_maps[id] = true
dynamic_add_media(map_textures_path .. texture, function() end)
else
-- minetest.dynamic_add_media() never blocks
-- in Minetest 5.5, callback runs after load
dynamic_add_media(map_textures_path .. texture, function()
loaded_maps[id] = true
end)
end
end end
return texture if loaded_maps[id] then
return texture
end
end end
function mcl_maps.load_map_item(itemstack) function mcl_maps.load_map_item(itemstack)

View File

@ -0,0 +1,10 @@
# textdomain: mcl_maps
Empty Map=空地圖
Empty maps are not useful as maps, but they can be stacked and turned to maps which can be used.=空的地圖作為地圖是沒有用的,但它們可以被疊加,並變成可以使用的地圖。
Rightclick to start using the map (which can't be stacked anymore).=右鍵單擊以開始使用地圖(該地圖無法再堆疊)。
Map=地圖
Maps show your surroundings as you explore the world.=當您探索世界時,地圖會顯示您的周圍環境。
Hold the map in any of the hotbar slots. This allows you to access the minimap by pressing the minimap key (see controls settings).=在任何一個熱鍵槽中放置地圖。這允許你通過按小地圖鍵來訪問小地圖(見控制設置)。
In Creative Mode, you don't need this item; the minimap is always available.=在創造模式下,您不需要此項目; 小地圖始終可用。
Enables minimap=啓用小地圖
Use the minimap key to show the map.=使用小地圖鍵來顯示小地圖。

View File

@ -0,0 +1,5 @@
# textdomain: mcl_mobspawners
Mob Spawner=生怪磚
A mob spawner regularily causes mobs to appear around it while a player is nearby. Some mob spawners are disabled while in light.=
If you have a spawn egg, you can use it to change the mob to spawn. Just place the item on the mob spawner. Player-set mob spawners always spawn mobs regardless of the light level.=當玩家在附近時,生怪磚會定期導致生物出現在其周圍。有些生怪磚在光照下會被禁用。
Makes mobs appear=生成生物

View File

@ -0,0 +1,9 @@
# textdomain: mcl_monster_eggs
An infested block is a block from which a silverfish will pop out when it is broken. It looks identical to its normal counterpart.=蛀蝕的方塊是一個方塊,當它被打破時,蠹魚會從裡面跳出來。它看起來與正常的方塊完全一樣。
Infested Stone=蛀蝕的石頭
Infested Cobblestone=蛀蝕的鵝卵石
Infested Stone Bricks=蛀蝕的石磚
Infested Cracked Stone Bricks=蛀蝕的裂紋石磚
Infested Mossy Stone Bricks=蛀蝕的青苔石磚
Infested Chiseled Stone Bricks=蛀蝕的浮雕石磚
Hides a silverfish=包含一個蠹魚

View File

@ -0,0 +1,24 @@
# textdomain: mcl_mushrooms
This decorative block is like a huge mushroom stem, but with the stem texture on all sides.=這個裝飾塊就像一個巨大的蘑菇莖,但四面都有莖的紋理。
Huge red mushroom blocks are the cap parts of huge red mushrooms. It consists of a red skin and can have pores on each of its sides.=紅色蘑菇方塊是巨大的紅蘑菇的菌蓋部分。它由紅色的皮膚組成,每一面都可以有毛孔。
The stem part of a huge red mushroom.=
Huge Red Mushroom Block=紅色蘑菇方塊
Huge Red Mushroom Stem=紅色蘑菇柄
Huge Red Mushroom All-Faces Stem=紅色蘑菇(全紋理)柄
Huge brown mushroom blocks are the cap parts of huge brown mushrooms. It consists of a brown skin and can have pores on each of its sides.=
The stem part of a huge brown mushroom.=
Huge Brown Mushroom Block=棕色蘑菇方塊
Huge Brown Mushroom Stem=棕色蘑菇柄
Huge Brown Mushroom All-Faces Stem=棕色蘑菇(全紋理)柄
Brown mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=棕色蘑菇是在黑暗中生長和傳播的真菌,但對光線敏感。它們本身不能食用,但可以用來製作食品。
Red mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=紅色蘑菇是在黑暗中生長和傳播的真菌,但對光線敏感。它們本身不能食用,但可以用來製作食品。
A single mushroom of this species will slowly spread over time towards a random solid opaque block with a light level of 12 or lower in a 3×3×3 cube around the mushroom. It stops spreading when there are 5 or more mushrooms of the same species within an area of 9×3×9 blocks around the mushroom.=這個品種的單個蘑菇會隨著時間的推移慢慢地向蘑菇周圍3×3×3立方體中光照度為12或更低的隨機固體不透明方塊擴散。當蘑菇周圍9×3×9塊的區域內有5個或更多相同種類的蘑菇時它就會停止擴散。
Mushrooms will eventually uproot at a light level of 12 or higher. On mycelium or podzol, they survive and spread at any light level.=蘑菇最終會在12或更高的光照水平下連根拔起。在菌絲體或灰壤上它們在任何光照水平下都能生存和傳播。
This mushroom can be placed on mycelium and podzol at any light level. It can also be placed on blocks which are both solid and opaque, as long as the light level at daytime is not higher than 12.=這種蘑菇可以放置在任何光照水平的菌絲和莢膜上。只要白天的光照度不高於12它也可以放在既堅固又不透明的木塊上。
Brown Mushroom=棕色蘑菇
Red Mushroom=紅色蘑菇
Mushroom Stew=蘑菇湯
Mushroom stew is a healthy soup which can be consumed to restore some hunger points.=蘑菇湯是一種健康的湯,食用後可以恢復一些飢餓值。
By placing huge mushroom blocks of the same species next to each other, the sides that touch each other will turn into pores permanently.=通過將同一物種的巨大蘑菇塊放在一起,相互接觸的側面將永久地變成毛孔。
Grows on podzol, mycelium and other blocks=在灰壤,菌絲體和其他方塊上生長
Spreads in darkness=在黑暗中擴散

View File

@ -0,0 +1,15 @@
# textdomain: mcl_portals
End Portal=終界傳送門
An End portal teleports creatures and objects to the mysterious End dimension (and back!).=終界傳送門用於將生物和實體到達終末之界(或回來!)。
Hop into the portal to teleport. Entering an End portal in the Overworld teleports you to a fixed position in the End dimension and creates a 5×5 obsidian platform at your destination. End portals in the End will lead back to your spawn point in the Overworld.=跳入傳送門進行傳送。進入終界傳送門會將你傳送到終界的一個固定位置並在你的目的地創建一個5×5的黑曜石平台。終界的傳送門會將你帶回你在主界的出生點。
End Portal Frame=終界傳送門框架
End portal frames are used in the construction of End portals. Each block has a socket for an eye of ender.=終界傳送門框架用於建造終界傳送門。每個框架都有一個插座,用於放置終界之眼。
NOTE: The End dimension is currently incomplete and might change in future versions.=注意:終界目前還不完整,在未來的版本中可能會有變化。
End Portal Frame with Eye of Ender=含終界之眼的終界傳送門框架
Nether Portal=地獄傳送門
A Nether portal teleports creatures and objects to the hot and dangerous Nether dimension (and back!). Enter at your own risk!=地獄傳送門將生物和實體傳送到炎熱和危險的地獄(或回來!)。進入後風險自負!
Stand in the portal for a moment to activate the teleportation. Entering a Nether portal for the first time will also create a new portal in the other dimension. If a Nether portal has been built in the Nether, it will lead to the Overworld. A Nether portal is destroyed if the any of the obsidian which surrounds it is destroyed, or if it was caught in an explosion.=在傳送門中站立片刻以激活傳送。第一次進入地獄傳送門也會在另一維度創建一個新的傳送門。如果在地獄建立了地獄傳送門,它將會通​​向主世界。如果圍繞著它的任何黑曜石被毀壞,或者它被捲入一場爆炸,地獄傳送門就會被破壞。
Obsidian is also used as the frame of Nether portals.=黑曜石也被用來作為地獄傳送門的框架。
To open a Nether portal, place an upright frame of obsidian with a width of at least 4 blocks and a height of 5 blocks, leaving only air in the center. After placing this frame, light a fire in the obsidian frame. Nether portals only work in the Overworld and the Nether.=要打開地獄傳送門需要放置一個直立的黑曜石框架寬度至少為4塊高度為5塊中間只留有空氣。放置這個框架後在黑曜石框架中點火。地獄傳送門只在主世界上和地獄起作用。
Once placed, an eye of ender can not be taken back.=在擺放後,終界之眼無法再取回。
Used to construct end portals=用於建造終界傳送門

View File

@ -204,37 +204,52 @@ local function get_target(p)
end end
end end
-- Destroy portal if pos (portal frame or portal node) got destroyed -- Destroy a nether portal. Connected portal nodes are searched and removed
-- using 'bulk_set_node'. This function is called from 'after_destruct' of
-- nether portal nodes. The flag 'destroying_portal' is used to avoid this
-- function being called recursively through callbacks in 'bulk_set_node'.
local destroying_portal = false
local function destroy_nether_portal(pos, node) local function destroy_nether_portal(pos, node)
if not node then return end if destroying_portal then
local nn, orientation = node.name, node.param2
local obsidian = nn == OBSIDIAN
local function check_remove(pos, orientation)
local node = get_node(pos)
if node and (node.name == PORTAL and (orientation == nil or (node.param2 == orientation))) then
minetest.remove_node(pos)
remove_exit(pos)
end
end
if obsidian then -- check each of 6 sides of it and destroy every portal:
check_remove({x = pos.x - 1, y = pos.y, z = pos.z}, 0)
check_remove({x = pos.x + 1, y = pos.y, z = pos.z}, 0)
check_remove({x = pos.x, y = pos.y, z = pos.z - 1}, 1)
check_remove({x = pos.x, y = pos.y, z = pos.z + 1}, 1)
check_remove({x = pos.x, y = pos.y - 1, z = pos.z})
check_remove({x = pos.x, y = pos.y + 1, z = pos.z})
return return
end end
if orientation == 0 then destroying_portal = true
check_remove({x = pos.x - 1, y = pos.y, z = pos.z}, 0)
check_remove({x = pos.x + 1, y = pos.y, z = pos.z}, 0) local orientation = node.param2
else local checked_tab = { [minetest.hash_node_position(pos)] = true }
check_remove({x = pos.x, y = pos.y, z = pos.z - 1}, 1) local nodes = { pos }
check_remove({x = pos.x, y = pos.y, z = pos.z + 1}, 1)
local function check_remove(pos)
local h = minetest.hash_node_position(pos)
if checked_tab[h] then
return
end
local node = minetest.get_node(pos)
if node and node.name == PORTAL and (orientation == nil or node.param2 == orientation) then
table.insert(nodes, pos)
checked_tab[h] = true
end
end end
check_remove({x = pos.x, y = pos.y - 1, z = pos.z})
check_remove({x = pos.x, y = pos.y + 1, z = pos.z}) local i = 1
while i <= #nodes do
pos = nodes[i]
if orientation == 0 then
check_remove({x = pos.x - 1, y = pos.y, z = pos.z})
check_remove({x = pos.x + 1, y = pos.y, z = pos.z})
else
check_remove({x = pos.x, y = pos.y, z = pos.z - 1})
check_remove({x = pos.x, y = pos.y, z = pos.z + 1})
end
check_remove({x = pos.x, y = pos.y - 1, z = pos.z})
check_remove({x = pos.x, y = pos.y + 1, z = pos.z})
remove_exit(pos)
i = i + 1
end
minetest.bulk_set_node(nodes, { name = "air" })
destroying_portal = false
end end
local on_rotate local on_rotate
@ -817,7 +832,23 @@ local usagehelp = S("To open a Nether portal, place an upright frame of obsidian
minetest.override_item(OBSIDIAN, { minetest.override_item(OBSIDIAN, {
_doc_items_longdesc = longdesc, _doc_items_longdesc = longdesc,
_doc_items_usagehelp = usagehelp, _doc_items_usagehelp = usagehelp,
after_destruct = destroy_nether_portal, after_destruct = function(pos, node)
local function check_remove(pos, orientation)
local node = get_node(pos)
if node and node.name == PORTAL then
minetest.remove_node(pos)
end
end
-- check each of 6 sides of it and destroy every portal
check_remove({x = pos.x - 1, y = pos.y, z = pos.z})
check_remove({x = pos.x + 1, y = pos.y, z = pos.z})
check_remove({x = pos.x, y = pos.y, z = pos.z - 1})
check_remove({x = pos.x, y = pos.y, z = pos.z + 1})
check_remove({x = pos.x, y = pos.y - 1, z = pos.z})
check_remove({x = pos.x, y = pos.y + 1, z = pos.z})
end,
_on_ignite = function(user, pointed_thing) _on_ignite = function(user, pointed_thing)
local x, y, z = pointed_thing.under.x, pointed_thing.under.y, pointed_thing.under.z local x, y, z = pointed_thing.under.x, pointed_thing.under.y, pointed_thing.under.z
-- Check empty spaces around obsidian and light all frames found: -- Check empty spaces around obsidian and light all frames found:

View File

@ -1,5 +1,7 @@
local S = minetest.get_translator(minetest.get_current_modname()) local S = minetest.get_translator(minetest.get_current_modname())
local mod_target = minetest.get_modpath("mcl_target")
local function lingering_image(colorstring, opacity) local function lingering_image(colorstring, opacity)
if not opacity then if not opacity then
opacity = 127 opacity = 127
@ -95,71 +97,74 @@ function mcl_potions.register_lingering(name, descr, color, def)
end end
end end
minetest.register_craftitem(id, { minetest.register_craftitem(id, {
description = descr, description = descr,
_tt_help = def.tt, _tt_help = def.tt,
_doc_items_longdesc = longdesc, _doc_items_longdesc = longdesc,
_doc_items_usagehelp = S("Use the “Punch” key to throw it."), _doc_items_usagehelp = S("Use the “Punch” key to throw it."),
inventory_image = lingering_image(color), inventory_image = lingering_image(color),
groups = {brewitem=1, not_in_creative_inventory=0}, groups = {brewitem=1, not_in_creative_inventory=0},
on_use = function(item, placer, pointed_thing) on_use = function(item, placer, pointed_thing)
local velocity = 10 local velocity = 10
local dir = placer:get_look_dir(); local dir = placer:get_look_dir();
local pos = placer:getpos(); local pos = placer:getpos();
minetest.sound_play("mcl_throwing_throw", {pos = pos, gain = 0.4, max_hear_distance = 16}, true) minetest.sound_play("mcl_throwing_throw", {pos = pos, gain = 0.4, max_hear_distance = 16}, true)
local obj = minetest.add_entity({x=pos.x+dir.x,y=pos.y+2+dir.y,z=pos.z+dir.z}, id.."_flying") local obj = minetest.add_entity({x=pos.x+dir.x,y=pos.y+2+dir.y,z=pos.z+dir.z}, id.."_flying")
obj:setvelocity({x=dir.x*velocity,y=dir.y*velocity,z=dir.z*velocity}) obj:setvelocity({x=dir.x*velocity,y=dir.y*velocity,z=dir.z*velocity})
obj:setacceleration({x=dir.x*-3, y=-9.8, z=dir.z*-3}) obj:setacceleration({x=dir.x*-3, y=-9.8, z=dir.z*-3})
obj:get_luaentity()._thrower = placer:get_player_name() obj:get_luaentity()._thrower = placer:get_player_name()
if not minetest.is_creative_enabled(placer:get_player_name()) then if not minetest.is_creative_enabled(placer:get_player_name()) then
item:take_item() item:take_item()
end
return item
end,
stack_max = 1,
_on_dispense = function(stack, dispenserpos, droppos, dropnode, dropdir)
local s_pos = vector.add(dispenserpos, vector.multiply(dropdir, 0.51))
local pos = {x=s_pos.x+dropdir.x,y=s_pos.y+dropdir.y,z=s_pos.z+dropdir.z}
minetest.sound_play("mcl_throwing_throw", {pos = pos, gain = 0.4, max_hear_distance = 16}, true)
local obj = minetest.add_entity(pos, id.."_flying")
local velocity = 22
obj:set_velocity({x=dropdir.x*velocity,y=dropdir.y*velocity,z=dropdir.z*velocity})
obj:set_acceleration({x=dropdir.x*-3, y=-9.8, z=dropdir.z*-3})
end end
return item })
end,
stack_max = 1,
_on_dispense = function(stack, dispenserpos, droppos, dropnode, dropdir)
local s_pos = vector.add(dispenserpos, vector.multiply(dropdir, 0.51))
local pos = {x=s_pos.x+dropdir.x,y=s_pos.y+dropdir.y,z=s_pos.z+dropdir.z}
minetest.sound_play("mcl_throwing_throw", {pos = pos, gain = 0.4, max_hear_distance = 16}, true)
local obj = minetest.add_entity(pos, id.."_flying")
local velocity = 22
obj:set_velocity({x=dropdir.x*velocity,y=dropdir.y*velocity,z=dropdir.z*velocity})
obj:set_acceleration({x=dropdir.x*-3, y=-9.8, z=dropdir.z*-3})
end
})
local w = 0.7 local w = 0.7
minetest.register_entity(id.."_flying",{ minetest.register_entity(id.."_flying",{
textures = {lingering_image(color)}, textures = {lingering_image(color)},
hp_max = 1, hp_max = 1,
visual_size = {x=w/2,y=w/2}, visual_size = {x=w/2,y=w/2},
collisionbox = {-0.1,-0.1,-0.1,0.1,0.1,0.1}, collisionbox = {-0.1,-0.1,-0.1,0.1,0.1,0.1},
pointable = false, pointable = false,
on_step = function(self, dtime) on_step = function(self, dtime)
local pos = self.object:get_pos() local pos = self.object:get_pos()
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
local n = node.name local n = node.name
local g = minetest.get_item_group(n, "liquid") local g = minetest.get_item_group(n, "liquid")
local d = 4 local d = 4
if n ~= "air" and n ~= "mcl_portals:portal" and n ~= "mcl_portals:portal_end" and g == 0 or mcl_potions.is_obj_hit(self, pos) then if mod_target and n == "mcl_target:target_off" then
minetest.sound_play("mcl_potions_breaking_glass", {pos = pos, max_hear_distance = 16, gain = 1}) mcl_target.hit(vector.round(pos), 0.4) --4 redstone ticks
add_lingering_effect(pos, color, def, name == "water") end
local texture if n ~= "air" and n ~= "mcl_portals:portal" and n ~= "mcl_portals:portal_end" and g == 0 or mcl_potions.is_obj_hit(self, pos) then
if name == "water" then minetest.sound_play("mcl_potions_breaking_glass", {pos = pos, max_hear_distance = 16, gain = 1})
texture = "mcl_particles_droplet_bottle.png" add_lingering_effect(pos, color, def, name == "water")
else local texture
if def.instant then if name == "water" then
texture = "mcl_particles_instant_effect.png" texture = "mcl_particles_droplet_bottle.png"
else else
texture = "mcl_particles_effect.png" if def.instant then
texture = "mcl_particles_instant_effect.png"
else
texture = "mcl_particles_effect.png"
end
end end
linger_particles(pos, d, texture, color)
if name == "water" then
mcl_potions._extinguish_nearby_fire(pos, d)
end
self.object:remove()
end end
linger_particles(pos, d, texture, color) end,
if name == "water" then })
mcl_potions._extinguish_nearby_fire(pos, d)
end
self.object:remove()
end
end,
})
end end

View File

@ -1,6 +1,8 @@
local S = minetest.get_translator(minetest.get_current_modname()) local S = minetest.get_translator(minetest.get_current_modname())
local GRAVITY = tonumber(minetest.settings:get("movement_gravity")) local GRAVITY = tonumber(minetest.settings:get("movement_gravity"))
local mod_target = minetest.get_modpath("mcl_target")
local function splash_image(colorstring, opacity) local function splash_image(colorstring, opacity)
if not opacity then if not opacity then
opacity = 127 opacity = 127
@ -66,6 +68,9 @@ function mcl_potions.register_splash(name, descr, color, def)
local g = minetest.get_item_group(n, "liquid") local g = minetest.get_item_group(n, "liquid")
local d = 0.1 local d = 0.1
local redux_map = {7/8,0.5,0.25} local redux_map = {7/8,0.5,0.25}
if mod_target and n == "mcl_target:target_off" then
mcl_target.hit(vector.round(pos), 0.4) --4 redstone ticks
end
if n ~= "air" and n ~= "mcl_portals:portal" and n ~= "mcl_portals:portal_end" and g == 0 or mcl_potions.is_obj_hit(self, pos) then if n ~= "air" and n ~= "mcl_portals:portal" and n ~= "mcl_portals:portal_end" and g == 0 or mcl_potions.is_obj_hit(self, pos) then
minetest.sound_play("mcl_potions_breaking_glass", {pos = pos, max_hear_distance = 16, gain = 1}) minetest.sound_play("mcl_potions_breaking_glass", {pos = pos, max_hear_distance = 16, gain = 1})
local texture, acc local texture, acc

View File

@ -1,5 +1,7 @@
local S = minetest.get_translator(minetest.get_current_modname()) local S = minetest.get_translator(minetest.get_current_modname())
local mod_target = minetest.get_modpath("mcl_target")
local math = math local math = math
-- Time in seconds after which a stuck arrow is deleted -- Time in seconds after which a stuck arrow is deleted
@ -342,6 +344,11 @@ function mcl_potions.register_arrow(name, desc, color, def)
self.object:set_velocity({x=0, y=0, z=0}) self.object:set_velocity({x=0, y=0, z=0})
self.object:set_acceleration({x=0, y=0, z=0}) self.object:set_acceleration({x=0, y=0, z=0})
-- Activate target
if mod_target and snode.name == "mcl_target:target_off" then
mcl_target.hit(self._stuckin, 1) --10 redstone ticks
end
-- Push the button! Push, push, push the button! -- Push the button! Push, push, push the button!
if mod_button and minetest.get_item_group(node.name, "button") > 0 and minetest.get_item_group(node.name, "button_push_by_arrow") == 1 then if mod_button and minetest.get_item_group(node.name, "button") > 0 and minetest.get_item_group(node.name, "button_push_by_arrow") == 1 then
local bdir = minetest.wallmounted_to_dir(node.param2) local bdir = minetest.wallmounted_to_dir(node.param2)

View File

@ -0,0 +1,9 @@
# textdomain: mcl_signs
Sign=告示牌
Signs can be written and come in two variants: Wall sign and sign on a sign post. Signs can be placed on the top and the sides of other blocks, but not below them.=告示牌可以寫字,有兩種變體:牆上的告示牌和柱上的告示牌。告示牌可以放在其他方塊的頂部和側面,但不能放在下面。
After placing the sign, you can write something on it. You have 4 lines of text with up to 15 characters for each line; anything beyond these limits is lost. Not all characters are supported. The text can not be changed once it has been written; you have to break and place the sign again.=放置告示牌後你可以在上面寫東西。你最多可以寫4行文字每行最多可以寫15個字符超過這些限制的文字就會丟失。不是所有的字符都被支持。文字一旦寫完就不能更改你必須打破並重新放置標誌。
Enter sign text:=輸入告示牌文字:
Maximum line length: 15=每行最多可以寫15個字符
Maximum lines: 4=最多可以寫4行文字
Done=確認
Can be written=可以寫字

View File

@ -0,0 +1,10 @@
# textdomain: mcl_sponges
Sponge=海綿
Sponges are blocks which remove water around them when they are placed or come in contact with water, turning it into a wet sponge.=海綿是一種方塊,當它們被放置或與水接觸時,會去除它們周圍的水,使其變成濕海綿。
Waterlogged Sponge=濕海綿
A waterlogged sponge can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of a furnace, the water will pour into the bucket.=濕海綿可以在熔爐裡烘乾,變成(乾)海綿。當爐子的燃料槽裡有一個空桶時,水會倒進桶裡。
Riverwaterlogged Sponge=濕河水海綿
This is a sponge soaking wet with river water. It can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of the furnace, the river water will pour into the bucket.=濕河水海綿是含有濕河水的海綿。可以在爐子裡曬乾,變成(乾)海綿。當爐子的燃料槽裡有一個空桶時,水會倒進桶裡。
A sponge becomes riverwaterlogged (instead of waterlogged) if it sucks up more river water than (normal) water.=
Removes water on contact=如果海綿吸的河水比(正常的)水多,它就會變成濕河水海綿(而不是濕海綿)。
Can be dried in furnace=可以在熔爐裏烘乾

View File

@ -0,0 +1,12 @@
# textdomain: mcl_throwing
@1 used the ender pearl too often.=@1 扔得太多終界珍珠了。
Use the punch key to throw.=按下擊打鍵扔出
Snowball=雪球
Snowballs can be thrown or launched from a dispenser for fun. Hitting something with a snowball does nothing.=雪球可以被扔出或從發射器中發射出去取樂。用雪球打東西沒有任何作用。
Egg=蛋
Eggs can be thrown or launched from a dispenser and breaks on impact. There is a small chance that 1 or even 4 chicks will pop out of the egg.=雞蛋可以被拋出或從發射器中發射出去並在撞擊中破碎。有機會1至4個小雞會從蛋裡跳出來。
Ender Pearl=終界珍珠
An ender pearl is an item which can be used for teleportation at the cost of health. It can be thrown and teleport the thrower to its impact location when it hits a solid block or a plant. Each teleportation hurts the user by 5 hit points.=末影珍珠是一種可以在損失生命值的情況下用於傳送的物品。可以將其扔出並將撞到實心塊或植物時將其傳送到其撞擊位置。每次傳送都會傷害使用者5點生命值。
Throwable=可扔出
Chance to hatch chicks when broken=破碎時有可能孵化小雞
Teleports you on impact for cost of 5 HP=損失5點生命值以傳送

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