Merge branch 'master' into patch-1

This commit is contained in:
IFRFSX 2020-03-26 01:33:50 +08:00 committed by GitHub
commit 76fe46f3d9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
79 changed files with 979 additions and 316 deletions

View file

@ -20,5 +20,8 @@ read_globals = {
-- Overwrites minetest.handle_node_drops -- Overwrites minetest.handle_node_drops
files["mods/creative/init.lua"].globals = { "minetest" } files["mods/creative/init.lua"].globals = { "minetest" }
-- Overwrites minetest.calculate_knockback
files["mods/player_api/api.lua"].globals = { "minetest" }
-- Don't report on legacy definitions of globals. -- Don't report on legacy definitions of globals.
files["mods/default/legacy.lua"].global = false files["mods/default/legacy.lua"].global = false

View file

@ -424,7 +424,7 @@ Give Initial Stuff API
Players API Players API
----------- -----------
The player API can register player models and update the player's appearence The player API can register player models and update the player's appearance.
* `player_api.register_model(name, def)` * `player_api.register_model(name, def)`
* Register a new model to be used by players * Register a new model to be used by players
@ -457,6 +457,12 @@ The player API can register player models and update the player's appearence
* Any of the fields of the returned table may be nil. * Any of the fields of the returned table may be nil.
* player: PlayerRef * player: PlayerRef
* `player_api.player_attached`
* A table that maps a player name to a boolean.
* If the value for a given player is set to true, the default player
animations (walking, digging, ...) will no longer be updated.
Knockback from damage is also prevented for that player.
### Model Definition ### Model Definition
{ {
@ -467,7 +473,7 @@ The player API can register player models and update the player's appearence
-- <anim_name> = {x = <start_frame>, y = <end_frame>}, -- <anim_name> = {x = <start_frame>, y = <end_frame>},
foo = {x = 0, y = 19}, foo = {x = 0, y = 19},
bar = {x = 20, y = 39}, bar = {x = 20, y = 39},
-- ... -- ...
}, },
collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3}, -- In nodes from feet position collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3}, -- In nodes from feet position
stepheight = 0.6, -- In nodes stepheight = 0.6, -- In nodes

View file

@ -79,10 +79,10 @@ beds.register_bed("beds:bed", {
} }
}, },
nodebox = { nodebox = {
bottom = {-0.5, -0.5, -0.5, 0.5, 0.06, 0.5}, bottom = {-0.5, -0.5, -0.5, 0.5, 0.0625, 0.5},
top = {-0.5, -0.5, -0.5, 0.5, 0.06, 0.5}, top = {-0.5, -0.5, -0.5, 0.5, 0.0625, 0.5},
}, },
selectionbox = {-0.5, -0.5, -0.5, 0.5, 0.06, 1.5}, selectionbox = {-0.5, -0.5, -0.5, 0.5, 0.0625, 1.5},
recipe = { recipe = {
{"wool:white", "wool:white", "wool:white"}, {"wool:white", "wool:white", "wool:white"},
{"group:wood", "group:wood", "group:wood"} {"group:wood", "group:wood", "group:wood"}

View file

@ -90,7 +90,13 @@ local function lay_down(player, pos, bed_pos, state, skip)
local yaw, param2 = get_look_yaw(bed_pos) local yaw, param2 = get_look_yaw(bed_pos)
player:set_look_horizontal(yaw) player:set_look_horizontal(yaw)
local dir = minetest.facedir_to_dir(param2) local dir = minetest.facedir_to_dir(param2)
local p = {x = bed_pos.x + dir.x / 2, y = bed_pos.y, z = bed_pos.z + dir.z / 2} -- p.y is just above the nodebox height of the 'Simple Bed' (the highest bed),
-- to avoid sinking down through the bed.
local p = {
x = bed_pos.x + dir.x / 2,
y = bed_pos.y + 0.07,
z = bed_pos.z + dir.z / 2
}
player:set_physics_override(0, 0, 0) player:set_physics_override(0, 0, 0)
player:set_pos(p) player:set_pos(p)
default.player_attached[name] = true default.player_attached[name] = true

View file

@ -0,0 +1,9 @@
# textdomain: beds
Fancy Bed=花式床
Simple Bed=簡易床
Leave Bed=離開床
Good morning.=早安!
@1 of @2 players are in bed=@2位玩家中的@1位在床上
Force night skip=強制跳過夜晚
You can only sleep at night.=你只能在晚上睡覺。

View file

@ -0,0 +1,3 @@
# textdomain: binoculars
Binoculars=望遠鏡
Use with 'Zoom' key=與“縮放”鍵一起使用

View file

@ -1,4 +1,4 @@
# textdomain: boats # textdomain: boats
Boat cruise mode on=巡航模式开 Boat cruise mode on=巡航模式开
Boat cruise mode off=巡航模式关 Boat cruise mode off=巡航模式关
Boat=船 Boat=船

View file

@ -0,0 +1,4 @@
# textdomain: boats
Boat cruise mode on=巡航模式開啟
Boat cruise mode off=巡航模式關閉
Boat=船

View file

@ -0,0 +1,8 @@
# textdomain: bones
Bones=骨骸
@1's old bones=@1的舊骨骸
@1 died at @2.=@1在@2死亡。
@1 died at @2, and dropped their inventory.=@1在@2死亡丟掉了物品欄。
@1 died at @2, and bones were placed.=@1在@2死亡骨骸被放置。
@1's fresh bones=@1的新鮮骨骸
@1's bones=@1的骨骸

View file

@ -225,3 +225,16 @@ minetest.register_craft({
replacements = {{"bucket:bucket_lava", "bucket:bucket_empty"}}, replacements = {{"bucket:bucket_lava", "bucket:bucket_empty"}},
}) })
-- Register buckets as dungeon loot
if minetest.global_exists("dungeon_loot") then
dungeon_loot.register({
{name = "bucket:bucket_empty", chance = 0.55},
-- water in deserts/ice or above ground, lava otherwise
{name = "bucket:bucket_water", chance = 0.45,
types = {"sandstone", "desert", "ice"}},
{name = "bucket:bucket_water", chance = 0.45, y = {0, 32768},
types = {"normal"}},
{name = "bucket:bucket_lava", chance = 0.45, y = {-32768, -1},
types = {"normal"}},
})
end

View file

@ -2,4 +2,4 @@
Empty Bucket=空桶 Empty Bucket=空桶
Water Bucket=水桶 Water Bucket=水桶
River Water Bucket=河水桶 River Water Bucket=河水桶
Lava Bucket=岩桶 Lava Bucket=岩

View file

@ -0,0 +1,5 @@
# textdomain: bucket
Empty Bucket=空桶
Water Bucket=水桶
River Water Bucket=河水桶
Lava Bucket=岩漿桶

View file

@ -1,3 +1,4 @@
name = bucket name = bucket
description = Minetest Game mod: bucket description = Minetest Game mod: bucket
depends = default depends = default
optional_depends = dungeon_loot

View file

@ -0,0 +1,4 @@
# textdomain: butterflies
White Butterfly=白蝴蝶
Red Butterfly=紅蝴蝶
Violet Butterfly=紫蝴蝶

View file

@ -414,7 +414,7 @@ minetest.register_craftitem("carts:cart", {
end end
minetest.sound_play({name = "default_place_node_metal", gain = 0.5}, minetest.sound_play({name = "default_place_node_metal", gain = 0.5},
{pos = pointed_thing.above}) {pos = pointed_thing.above}, true)
if not (creative and creative.is_enabled_for if not (creative and creative.is_enabled_for
and creative.is_enabled_for(placer:get_player_name())) then and creative.is_enabled_for(placer:get_player_name())) then

View file

@ -19,3 +19,10 @@ carts.path_distance_max = 3
dofile(carts.modpath.."/functions.lua") dofile(carts.modpath.."/functions.lua")
dofile(carts.modpath.."/rails.lua") dofile(carts.modpath.."/rails.lua")
dofile(carts.modpath.."/cart_entity.lua") dofile(carts.modpath.."/cart_entity.lua")
-- Register rails as dungeon loot
if minetest.global_exists("dungeon_loot") then
dungeon_loot.register({
name = "carts:rail", chance = 0.35, count = {1, 6}
})
end

View file

@ -1,6 +1,6 @@
# textdomain: carts # textdomain: carts
Cart=矿车 Cart=矿车
(Sneak+Click to pick up)=(潜行+单击以捡起) (Sneak+Click to pick up)=(潜行+单击以捡起)
Rail=铁 Rail=铁
Powered Rail=动力铁 Powered Rail=动力铁
Brake Rail=制动铁 Brake Rail=制动铁

View file

@ -0,0 +1,6 @@
# textdomain: carts
Cart=礦車
(Sneak+Click to pick up)=(潛行+單擊以撿起)
Rail=鐵軌
Powered Rail=動力鐵軌
Brake Rail=制動鐵軌

View file

@ -1,3 +1,4 @@
name = carts name = carts
description = Carts (formerly boost_cart) description = Carts (formerly boost_cart)
depends = default, player_api depends = default, player_api
optional_depends = dungeon_loot

View file

@ -25,7 +25,9 @@ function creative.init_creative_inventory(player)
player_inventory[player_name] = { player_inventory[player_name] = {
size = 0, size = 0,
filter = "", filter = "",
start_i = 0 start_i = 0,
old_filter = nil, -- use only for caching in update_creative_inventory
old_content = nil
} }
minetest.create_detached_inventory("creative_" .. player_name, { minetest.create_detached_inventory("creative_" .. player_name, {
@ -74,6 +76,12 @@ function creative.update_creative_inventory(player_name, tab_content)
creative.init_creative_inventory(minetest.get_player_by_name(player_name)) creative.init_creative_inventory(minetest.get_player_by_name(player_name))
local player_inv = minetest.get_inventory({type = "detached", name = "creative_" .. player_name}) local player_inv = minetest.get_inventory({type = "detached", name = "creative_" .. player_name})
if inv.filter == inv.old_filter and tab_content == inv.old_content then
return
end
inv.old_filter = inv.filter
inv.old_content = tab_content
local items = inventory_cache[tab_content] or init_creative_cache(tab_content) local items = inventory_cache[tab_content] or init_creative_cache(tab_content)
local creative_list = {} local creative_list = {}
@ -119,8 +127,7 @@ function creative.register_tab(name, title, items)
local player_name = player:get_player_name() local player_name = player:get_player_name()
creative.update_creative_inventory(player_name, items) creative.update_creative_inventory(player_name, items)
local inv = player_inventory[player_name] local inv = player_inventory[player_name]
local start_i = inv.start_i or 0 local pagenum = math.floor(inv.start_i / (4*8) + 1)
local pagenum = math.floor(start_i / (4*8) + 1)
local pagemax = math.ceil(inv.size / (4*8)) local pagemax = math.ceil(inv.size / (4*8))
local esc = minetest.formspec_escape local esc = minetest.formspec_escape
return sfinv.make_formspec(player, context, return sfinv.make_formspec(player, context,
@ -143,7 +150,7 @@ function creative.register_tab(name, title, items)
"field_close_on_enter[creative_filter;false]" .. "field_close_on_enter[creative_filter;false]" ..
"field[0.3,4.2;2.8,1.2;creative_filter;;" .. esc(inv.filter) .. "]" .. "field[0.3,4.2;2.8,1.2;creative_filter;;" .. esc(inv.filter) .. "]" ..
"listring[detached:creative_" .. player_name .. ";main]" .. "listring[detached:creative_" .. player_name .. ";main]" ..
"list[detached:creative_" .. player_name .. ";main;0,0;8,4;" .. tostring(start_i) .. "]" .. "list[detached:creative_" .. player_name .. ";main;0,0;8,4;" .. tostring(inv.start_i) .. "]" ..
creative.formspec_add, true) creative.formspec_add, true)
end, end,
on_enter = function(self, player, context) on_enter = function(self, player, context)
@ -161,13 +168,11 @@ function creative.register_tab(name, title, items)
if fields.creative_clear then if fields.creative_clear then
inv.start_i = 0 inv.start_i = 0
inv.filter = "" inv.filter = ""
creative.update_creative_inventory(player_name, items)
sfinv.set_player_inventory_formspec(player, context) sfinv.set_player_inventory_formspec(player, context)
elseif fields.creative_search or elseif fields.creative_search or
fields.key_enter_field == "creative_filter" then fields.key_enter_field == "creative_filter" then
inv.start_i = 0 inv.start_i = 0
inv.filter = fields.creative_filter:lower() inv.filter = fields.creative_filter:lower()
creative.update_creative_inventory(player_name, items)
sfinv.set_player_inventory_formspec(player, context) sfinv.set_player_inventory_formspec(player, context)
elseif not fields.quit then elseif not fields.quit then
local start_i = inv.start_i or 0 local start_i = inv.start_i or 0

View file

@ -0,0 +1,10 @@
# textdomain: creative
Allow player to use creative inventory=允許玩家使用創造模式物品欄
Search=搜索
Reset=重置
Previous page=上一頁
Next page=下一頁
All=所有
Nodes=節點
Tools=工具
Items=物品

View file

@ -46,7 +46,8 @@ function default.chest.chest_lid_close(pn)
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
minetest.after(0.2, minetest.swap_node, pos, { name = "default:" .. swap, minetest.after(0.2, minetest.swap_node, pos, { name = "default:" .. swap,
param2 = node.param2 }) param2 = node.param2 })
minetest.sound_play(sound, {gain = 0.3, pos = pos, max_hear_distance = 10}) minetest.sound_play(sound, {gain = 0.3, pos = pos,
max_hear_distance = 10}, true)
end end
default.chest.open_chests = {} default.chest.open_chests = {}
@ -128,7 +129,7 @@ function default.chest.register_chest(name, d)
end end
minetest.sound_play(def.sound_open, {gain = 0.3, minetest.sound_play(def.sound_open, {gain = 0.3,
pos = pos, max_hear_distance = 10}) pos = pos, max_hear_distance = 10}, true)
if not default.chest.chest_lid_obstructed(pos) then if not default.chest.chest_lid_obstructed(pos) then
minetest.swap_node(pos, minetest.swap_node(pos,
{ name = "default:" .. name .. "_open", { name = "default:" .. name .. "_open",
@ -199,7 +200,7 @@ function default.chest.register_chest(name, d)
end end
def.on_rightclick = function(pos, node, clicker) def.on_rightclick = function(pos, node, clicker)
minetest.sound_play(def.sound_open, {gain = 0.3, pos = pos, minetest.sound_play(def.sound_open, {gain = 0.3, pos = pos,
max_hear_distance = 10}) max_hear_distance = 10}, true)
if not default.chest.chest_lid_obstructed(pos) then if not default.chest.chest_lid_obstructed(pos) then
minetest.swap_node(pos, { minetest.swap_node(pos, {
name = "default:" .. name .. "_open", name = "default:" .. name .. "_open",

View file

@ -141,7 +141,7 @@ default.cool_lava = function(pos, node)
minetest.set_node(pos, {name = "default:stone"}) minetest.set_node(pos, {name = "default:stone"})
end end
minetest.sound_play("default_cool_lava", minetest.sound_play("default_cool_lava",
{pos = pos, max_hear_distance = 16, gain = 0.25}) {pos = pos, max_hear_distance = 16, gain = 0.25}, true)
end end
if minetest.settings:get_bool("enable_lavacooling") ~= false then if minetest.settings:get_bool("enable_lavacooling") ~= false then

View file

@ -20,7 +20,7 @@ local item = {
minetest.sound_play("default_item_smoke", { minetest.sound_play("default_item_smoke", {
pos = p, pos = p,
max_hear_distance = 8, max_hear_distance = 8,
}) }, true)
minetest.add_particlespawner({ minetest.add_particlespawner({
amount = 3, amount = 3,
time = 0.1, time = 0.1,

View file

@ -1,8 +1,8 @@
# textdomain: default # textdomain: default
Locked Chest=锁的箱子 Locked Chest=已上锁的箱子
Locked Chest (owned by @1)=锁着的箱子(由@1拥有) Locked Chest (owned by @1)=已上锁的箱子(属于@1所有)
You do not own this chest.=您不拥有该箱子 You do not own this chest.=这个箱子不属于你所有
a locked chest=一个锁的箱子 a locked chest=一个已上锁的箱子
Chest=箱子 Chest=箱子
Stick=棒 Stick=棒
Paper=纸 Paper=纸
@ -11,20 +11,20 @@ Book=书
Book with Text=带文字的书 Book with Text=带文字的书
Skeleton Key=万能钥匙 Skeleton Key=万能钥匙
Key to @1's @2=@1的@2的钥匙 Key to @1's @2=@1的@2的钥匙
Coal Lump=煤 Coal Lump=煤
Iron Lump=铁 Iron Lump=铁
Copper Lump=铜 Copper Lump=铜
Tin Lump=锡 Tin Lump=锡
Mese Crystal=黄石 Mese Crystal=黄石晶
Gold Lump=金 Gold Lump=金
Diamond=钻石 Diamond=钻石
Clay Lump=粘土 Clay Lump=粘土
Steel Ingot=铁锭 Steel Ingot=铁锭
Copper Ingot=铜锭 Copper Ingot=铜锭
Tin Ingot=锡锭 Tin Ingot=锡锭
Bronze Ingot=青铜锭 Bronze Ingot=青铜锭
Gold Ingot=金锭 Gold Ingot=金锭
Mese Crystal Fragment=黄石晶碎片 Mese Crystal Fragment=黄石晶碎片
Clay Brick=粘土砖 Clay Brick=粘土砖
Obsidian Shard=黑曜石碎片 Obsidian Shard=黑曜石碎片
Flint=燧石 Flint=燧石
@ -34,50 +34,50 @@ Furnace is empty=熔炉是空的
@1%=@1% @1%=@1%
Empty=空 Empty=空
Not cookable=不可烹饪 Not cookable=不可烹饪
Furnace active=熔炉活跃 Furnace active=熔炉正在运转
Furnace inactive=熔炉非活跃 Furnace inactive=熔炉未使用
(Item: @1; Fuel: @2)=(项目:@1;燃料:@2 (Item: @1; Fuel: @2)=(项目:@1;燃料:@2
Furnace=熔炉 Furnace=熔炉
Stone=石 Stone=石
Cobblestone=鹅卵石 Cobblestone=鹅卵石
Stone Brick=石砖 Stone Brick=石砖
Stone Block=石块 Stone Block=石
Mossy Cobblestone=苔的鹅卵石 Mossy Cobblestone=苔藓覆盖的鹅卵石
Desert Stone=沙漠石 Desert Stone=沙漠石
Desert Cobblestone=沙漠鹅卵石 Desert Cobblestone=沙漠鹅卵石
Desert Stone Brick=沙漠鹅卵石砖 Desert Stone Brick=沙漠鹅卵石砖
Desert Stone Block=沙漠鹅卵石块 Desert Stone Block=沙漠鹅卵石
Sandstone=砂岩 Sandstone=砂岩
Sandstone Brick=砂岩砖 Sandstone Brick=砂岩砖
Sandstone Block=砂岩块 Sandstone Block=砂岩
Desert Sandstone=沙漠砂岩 Desert Sandstone=沙漠砂岩
Desert Sandstone Brick=沙漠砂岩砖 Desert Sandstone Brick=沙漠砂岩砖
Desert Sandstone Block=沙漠砂岩块 Desert Sandstone Block=沙漠砂岩
Silver Sandstone=银砂岩 Silver Sandstone=银砂岩
Silver Sandstone Brick=银砂岩砖 Silver Sandstone Brick=银砂岩砖
Silver Sandstone Block=银砂岩块 Silver Sandstone Block=银砂岩
Obsidian=黑曜石 Obsidian=黑曜石
Obsidian Brick=黑曜石砖 Obsidian Brick=黑曜石砖
Obsidian Block=黑曜石块 Obsidian Block=黑曜石
Dirt=土 Dirt=土
Dirt with Grass=带草的土 Dirt with Grass=带草的土
Dirt with Grass and Footsteps=带草的土及脚印 Dirt with Grass and Footsteps=带草的土及脚印
Dirt with Dry Grass=土和干草 Dirt with Dry Grass=带干草的
Dirt with Snow=土和雪 Dirt with Snow=带雪的
Dirt with Rainforest Litter=雨林腐土 Dirt with Rainforest Litter=雨林腐土
Dirt with Coniferous Litter=针叶林腐土 Dirt with Coniferous Litter=针叶林腐土
Dry Dirt=干土 Dry Dirt=干土
Dry Dirt with Dry Grass=干土和干草 Dry Dirt with Dry Grass=干土和干草
Permafrost=多年冻土 Permafrost=多年冻土
Permafrost with Stones=多年冻土和石头 Permafrost with Stones=带石头的多年冻土
Permafrost with Moss=生苔的多年冻土 Permafrost with Moss=生苔的多年冻土
Sand=沙 Sand=沙
Desert Sand=沙漠沙 Desert Sand=沙漠沙
Silver Sand=银沙 Silver Sand=银沙
Gravel=砾 Gravel=
Clay=粘土 Clay=粘土
Snow=雪 Snow=雪
Snow Block=雪块 Snow Block=雪
Ice=冰 Ice=冰
Cave Ice=洞穴冰 Cave Ice=洞穴冰
Apple Tree=苹果树 Apple Tree=苹果树
@ -103,26 +103,26 @@ Aspen Tree=白杨树
Aspen Wood Planks=白杨树木板 Aspen Wood Planks=白杨树木板
Aspen Tree Leaves=白杨树叶 Aspen Tree Leaves=白杨树叶
Aspen Tree Sapling=白杨树树苗 Aspen Tree Sapling=白杨树树苗
Coal Ore=煤矿石 Coal Ore=煤矿石
Coal Block=煤块 Coal Block=煤炭方
Iron Ore=铁矿石 Iron Ore=铁矿石
Steel Block=钢块 Steel Block=钢
Copper Ore=铜矿石 Copper Ore=铜矿石
Copper Block=铜块 Copper Block=铜
Tin Ore=锡矿石 Tin Ore=锡矿石
Tin Block=锡块 Tin Block=锡
Bronze Block=青铜块 Bronze Block=青铜
Mese Ore=黄石矿石 Mese Ore=黄石矿石
Mese Block=黄石块 Mese Block=黄石
Gold Ore=金矿石 Gold Ore=金矿石
Gold Block=金块 Gold Block=金
Diamond Ore=钻石矿石 Diamond Ore=钻石矿石
Diamond Block=钻石块 Diamond Block=钻石
Cactus=仙人掌 Cactus=仙人掌
Large Cactus Seedling=大仙人掌苗 Large Cactus Seedling=大仙人掌苗
Papyrus=莎草纸 Papyrus=莎草纸
Dry Shrub=干灌木 Dry Shrub=干灌木
Jungle Grass= Jungle Grass=丛林草
Grass=草 Grass=草
Dry Grass=干草 Dry Grass=干草
Fern=蕨 Fern=蕨
@ -148,20 +148,20 @@ Orange Coral=橙珊瑚
Coral Skeleton=珊瑚骨架 Coral Skeleton=珊瑚骨架
Water Source=水方块 Water Source=水方块
Flowing Water=流动的水 Flowing Water=流动的水
River Water Source=河水方块 River Water Source=河水方块
Flowing River Water=流动的河 Flowing River Water=流动的河水
Lava Source=岩方块 Lava Source=岩方块
Flowing Lava=流动的 Flowing Lava=流动的岩
Empty Bookshelf=空书架 Empty Bookshelf=空书架
Bookshelf (@1 written, @2 empty books)=书架(@1本有字的书@2本空书 Bookshelf (@1 written, @2 empty books)=书架(@1本有字的书@2本空书
Bookshelf=书架 Bookshelf=书架
Text too long=文字太长 Text too long=文字太长
Wooden Sign=木牌 Wooden Sign=木牌
Steel Sign=铁牌 Steel Sign=铁牌
Wooden Ladder=木 Wooden Ladder=木梯
Steel Ladder=铁 Steel Ladder=铁梯
Apple Wood Fence=苹果木 Apple Wood Fence=苹果木
Acacia Wood Fence=相思木 Acacia Wood Fence=相思木
Jungle Wood Fence=丛林木栅栏 Jungle Wood Fence=丛林木栅栏
Pine Wood Fence=松木栅栏 Pine Wood Fence=松木栅栏
Aspen Wood Fence=白杨木栅栏 Aspen Wood Fence=白杨木栅栏
@ -172,7 +172,7 @@ Pine Wood Fence Rail=松木栏杆
Aspen Wood Fence Rail=白杨木栏杆 Aspen Wood Fence Rail=白杨木栏杆
Glass=玻璃 Glass=玻璃
Obsidian Glass=黑曜石玻璃 Obsidian Glass=黑曜石玻璃
Brick Block=砖块 Brick Block=砖
Mese Lamp=黄石灯 Mese Lamp=黄石灯
Mese Post Light=黄石柱灯 Mese Post Light=黄石柱灯
Cloud=云 Cloud=云

View file

@ -0,0 +1,211 @@
# textdomain: default
Locked Chest=已上鎖的箱子
Locked Chest (owned by @1)=已上鎖的箱子(屬於@1所有
You do not own this chest.=這個箱子不屬於你所有。
a locked chest=一個已上鎖的箱子
Chest=箱子
Stick=棒
Paper=紙
"@1" by @2="@1" by @2
Book=書
Book with Text=帶文字的書
Skeleton Key=萬能鑰匙
Key to @1's @2=@1的@2的鑰匙
Coal Lump=煤塊
Iron Lump=鐵塊
Copper Lump=銅塊
Tin Lump=錫塊
Mese Crystal=黃石晶體
Gold Lump=金塊
Diamond=鑽石
Clay Lump=粘土塊
Steel Ingot=鐵錠
Copper Ingot=銅錠
Tin Ingot=錫錠
Bronze Ingot=青銅錠
Gold Ingot=金錠
Mese Crystal Fragment=黃石晶體碎片
Clay Brick=粘土磚
Obsidian Shard=黑曜石碎片
Flint=燧石
Blueberries=藍莓
Furnace is empty=熔爐是空的
100% (output full)=100輸出已滿
@1%=@1%
Empty=空
Not cookable=不可烹飪
Furnace active=熔爐正在運轉
Furnace inactive=熔爐未使用
(Item: @1; Fuel: @2)=(項目:@1;燃料:@2
Furnace=熔爐
Stone=石
Cobblestone=鵝卵石
Stone Brick=石磚
Stone Block=石方塊
Mossy Cobblestone=苔蘚覆蓋的鵝卵石
Desert Stone=沙漠石
Desert Cobblestone=沙漠鵝卵石
Desert Stone Brick=沙漠鵝卵石磚
Desert Stone Block=沙漠鵝卵石方塊
Sandstone=砂岩
Sandstone Brick=砂岩磚
Sandstone Block=砂岩方塊
Desert Sandstone=沙漠砂岩
Desert Sandstone Brick=沙漠砂岩磚
Desert Sandstone Block=沙漠砂岩方塊
Silver Sandstone=銀砂岩
Silver Sandstone Brick=銀砂岩磚
Silver Sandstone Block=銀砂岩方塊
Obsidian=黑曜石
Obsidian Brick=黑曜石磚
Obsidian Block=黑曜石方塊
Dirt=土
Dirt with Grass=帶草的土
Dirt with Grass and Footsteps=帶草的土及腳印
Dirt with Dry Grass=帶乾草的土
Dirt with Snow=帶雪的土
Dirt with Rainforest Litter=雨林腐土
Dirt with Coniferous Litter=針葉林腐土
Dry Dirt=乾土
Dry Dirt with Dry Grass=乾土和乾草
Permafrost=多年凍土
Permafrost with Stones=帶石頭的多年凍土
Permafrost with Moss=生苔的多年凍土
Sand=沙
Desert Sand=沙漠沙
Silver Sand=銀沙
Gravel=沙礫
Clay=粘土
Snow=雪
Snow Block=雪方塊
Ice=冰
Cave Ice=洞穴冰
Apple Tree=蘋果樹
Apple Wood Planks=蘋果樹木板
Apple Tree Sapling=蘋果樹苗
Apple Tree Leaves=蘋果樹葉
Apple=蘋果
Apple Marker=蘋果標記
Jungle Tree=叢林樹
Jungle Wood Planks=叢林樹木板
Jungle Tree Leaves=叢林樹葉
Jungle Tree Sapling=叢林樹苗
Emergent Jungle Tree Sapling=應急叢林樹苗
Pine Tree=松樹
Pine Wood Planks=松樹木板
Pine Needles=松針
Pine Tree Sapling=松樹樹苗
Acacia Tree=相思樹
Acacia Wood Planks=相思樹木板
Acacia Tree Leaves=相思樹葉
Acacia Tree Sapling=相思樹樹苗
Aspen Tree=白楊樹
Aspen Wood Planks=白楊樹木板
Aspen Tree Leaves=白楊樹葉
Aspen Tree Sapling=白楊樹樹苗
Coal Ore=煤炭礦石
Coal Block=煤炭方塊
Iron Ore=鐵礦石
Steel Block=鋼方塊
Copper Ore=銅礦石
Copper Block=銅方塊
Tin Ore=錫礦石
Tin Block=錫方塊
Bronze Block=青銅方塊
Mese Ore=黃石礦石
Mese Block=黃石方塊
Gold Ore=金礦石
Gold Block=金方塊
Diamond Ore=鑽石礦石
Diamond Block=鑽石方塊
Cactus=仙人掌
Large Cactus Seedling=大仙人掌苗
Papyrus=莎草紙
Dry Shrub=幹灌木
Jungle Grass=叢林草
Grass=草
Dry Grass=乾草
Fern=蕨
Marram Grass=濱草
Bush Stem=灌木
Bush Leaves=灌木葉
Bush Sapling=灌木苗
Blueberry Bush Leaves with Berries=藍莓灌木葉與漿果
Blueberry Bush Leaves=藍莓灌木葉
Blueberry Bush Sapling=藍莓灌木苗
Acacia Bush Stem=相思灌木
Acacia Bush Leaves=相思灌木葉
Acacia Bush Sapling=相思灌木苗
Pine Bush Stem=松樹灌木
Pine Bush Needles=松樹灌木針
Pine Bush Sapling=松樹灌木苗
Kelp=海帶
Green Coral=綠珊瑚
Pink Coral=淡紅珊瑚
Cyan Coral=青珊瑚
Brown Coral=棕珊瑚
Orange Coral=橙珊瑚
Coral Skeleton=珊瑚骨架
Water Source=水方塊
Flowing Water=流動的水
River Water Source=河水方塊
Flowing River Water=流動的河水
Lava Source=岩漿方塊
Flowing Lava=流動的岩漿
Empty Bookshelf=空書架
Bookshelf (@1 written, @2 empty books)=書架(@1本有字的書@2本空書
Bookshelf=書架
Text too long=文字太長
Wooden Sign=木牌
Steel Sign=鐵牌
Wooden Ladder=木梯子
Steel Ladder=鐵梯子
Apple Wood Fence=蘋果木柵欄
Acacia Wood Fence=相思木柵欄
Jungle Wood Fence=叢林木柵欄
Pine Wood Fence=松木柵欄
Aspen Wood Fence=白楊木柵欄
Apple Wood Fence Rail=蘋果木欄杆
Acacia Wood Fence Rail=相思木欄杆
Jungle Wood Fence Rail=叢林木欄杆
Pine Wood Fence Rail=松木欄杆
Aspen Wood Fence Rail=白楊木欄杆
Glass=玻璃
Obsidian Glass=黑曜石玻璃
Brick Block=磚方塊
Mese Lamp=黃石燈
Mese Post Light=黃石柱燈
Cloud=雲
Wooden Pickaxe=木鎬
Stone Pickaxe=石鎬
Bronze Pickaxe=青銅鎬
Steel Pickaxe=鐵鎬
Mese Pickaxe=黃石鎬
Diamond Pickaxe=鑽石鎬
Wooden Shovel=木鏟
Stone Shovel=石鏟
Bronze Shovel=青銅鏟
Steel Shovel=鐵鏟
Mese Shovel=黃石鏟
Diamond Shovel=鑽石鏟
Wooden Axe=木斧
Stone Axe=石斧
Bronze Axe=青銅斧
Steel Axe=鐵斧
Mese Axe=黃石斧
Diamond Axe=鑽石斧
Wooden Sword=木劍
Stone Sword=石劍
Bronze Sword=青銅劍
Steel Sword=鐵劍
Mese Sword=黃石劍
Diamond Sword=鑽石劍
Key=鑰匙
Torch=火把
@1 will intersect protection on growth.=@1將與增長的保護相交。
Title:=標題:
Contents:=內容:
Save=保存
by @1=由@1
Page @1 of @2=第@1頁共@2頁。
"@1"="@1"

View file

@ -2143,8 +2143,10 @@ function default.register_decorations()
-- Papyrus -- Papyrus
-- Dirt version for rainforest swamp
minetest.register_decoration({ minetest.register_decoration({
name = "default:papyrus", name = "default:papyrus_on_dirt",
deco_type = "schematic", deco_type = "schematic",
place_on = {"default:dirt"}, place_on = {"default:dirt"},
sidelen = 16, sidelen = 16,
@ -2156,10 +2158,32 @@ function default.register_decorations()
octaves = 3, octaves = 3,
persist = 0.7 persist = 0.7
}, },
biomes = {"savanna_shore", "rainforest_swamp"}, biomes = {"rainforest_swamp"},
y_max = 0, y_max = 0,
y_min = 0, y_min = 0,
schematic = minetest.get_modpath("default") .. "/schematics/papyrus.mts", schematic = minetest.get_modpath("default") .. "/schematics/papyrus_on_dirt.mts",
})
-- Dry dirt version for savanna shore
minetest.register_decoration({
name = "default:papyrus_on_dry_dirt",
deco_type = "schematic",
place_on = {"default:dry_dirt"},
sidelen = 16,
noise_params = {
offset = -0.3,
scale = 0.7,
spread = {x = 200, y = 200, z = 200},
seed = 354,
octaves = 3,
persist = 0.7
},
biomes = {"savanna_shore"},
y_max = 0,
y_min = 0,
schematic = minetest.get_modpath("default") ..
"/schematics/papyrus_on_dry_dirt.mts",
}) })
-- Bush -- Bush

View file

@ -2234,7 +2234,7 @@ minetest.register_node("default:water_flowing", {
type = "vertical_frames", type = "vertical_frames",
aspect_w = 16, aspect_w = 16,
aspect_h = 16, aspect_h = 16,
length = 0.8, length = 0.5,
}, },
}, },
{ {
@ -2244,7 +2244,7 @@ minetest.register_node("default:water_flowing", {
type = "vertical_frames", type = "vertical_frames",
aspect_w = 16, aspect_w = 16,
aspect_h = 16, aspect_h = 16,
length = 0.8, length = 0.5,
}, },
}, },
}, },
@ -2330,7 +2330,7 @@ minetest.register_node("default:river_water_flowing", {
type = "vertical_frames", type = "vertical_frames",
aspect_w = 16, aspect_w = 16,
aspect_h = 16, aspect_h = 16,
length = 0.8, length = 0.5,
}, },
}, },
{ {
@ -2340,7 +2340,7 @@ minetest.register_node("default:river_water_flowing", {
type = "vertical_frames", type = "vertical_frames",
aspect_w = 16, aspect_w = 16,
aspect_h = 16, aspect_h = 16,
length = 0.8, length = 0.5,
}, },
}, },
}, },

Binary file not shown.

View file

@ -11,7 +11,8 @@ local function on_flood(pos, oldnode, newnode)
nodedef.groups.igniter and nodedef.groups.igniter > 0) then nodedef.groups.igniter and nodedef.groups.igniter > 0) then
minetest.sound_play( minetest.sound_play(
"default_cool_lava", "default_cool_lava",
{pos = pos, max_hear_distance = 16, gain = 0.1} {pos = pos, max_hear_distance = 16, gain = 0.1},
true
) )
end end
-- Remove the torch node -- Remove the torch node
@ -70,6 +71,7 @@ minetest.register_node("default:torch", {
end, end,
floodable = true, floodable = true,
on_flood = on_flood, on_flood = on_flood,
on_rotate = false
}) })
minetest.register_node("default:torch_wall", { minetest.register_node("default:torch_wall", {
@ -93,6 +95,7 @@ minetest.register_node("default:torch_wall", {
sounds = default.node_sound_wood_defaults(), sounds = default.node_sound_wood_defaults(),
floodable = true, floodable = true,
on_flood = on_flood, on_flood = on_flood,
on_rotate = false
}) })
minetest.register_node("default:torch_ceiling", { minetest.register_node("default:torch_ceiling", {
@ -116,6 +119,7 @@ minetest.register_node("default:torch_ceiling", {
sounds = default.node_sound_wood_defaults(), sounds = default.node_sound_wood_defaults(),
floodable = true, floodable = true,
on_flood = on_flood, on_flood = on_flood,
on_rotate = false
}) })
minetest.register_lbm({ minetest.register_lbm({

View file

@ -176,10 +176,10 @@ function doors.door_toggle(pos, node, clicker)
if state % 2 == 0 then if state % 2 == 0 then
minetest.sound_play(def.door.sounds[1], minetest.sound_play(def.door.sounds[1],
{pos = pos, gain = 0.3, max_hear_distance = 10}) {pos = pos, gain = 0.3, max_hear_distance = 10}, true)
else else
minetest.sound_play(def.door.sounds[2], minetest.sound_play(def.door.sounds[2],
{pos = pos, gain = 0.3, max_hear_distance = 10}) {pos = pos, gain = 0.3, max_hear_distance = 10}, true)
end end
minetest.swap_node(pos, { minetest.swap_node(pos, {
@ -340,7 +340,7 @@ function doors.register(name, def)
itemstack:take_item() itemstack:take_item()
end end
minetest.sound_play(def.sounds.place, {pos = pos}) minetest.sound_play(def.sounds.place, {pos = pos}, true)
on_place_node(pos, minetest.get_node(pos), on_place_node(pos, minetest.get_node(pos),
placer, node, itemstack, pointed_thing) placer, node, itemstack, pointed_thing)
@ -550,12 +550,12 @@ function doors.trapdoor_toggle(pos, node, clicker)
if string.sub(node.name, -5) == "_open" then if string.sub(node.name, -5) == "_open" then
minetest.sound_play(def.sound_close, minetest.sound_play(def.sound_close,
{pos = pos, gain = 0.3, max_hear_distance = 10}) {pos = pos, gain = 0.3, max_hear_distance = 10}, true)
minetest.swap_node(pos, {name = string.sub(node.name, 1, minetest.swap_node(pos, {name = string.sub(node.name, 1,
string.len(node.name) - 5), param1 = node.param1, param2 = node.param2}) string.len(node.name) - 5), param1 = node.param1, param2 = node.param2})
else else
minetest.sound_play(def.sound_open, minetest.sound_play(def.sound_open,
{pos = pos, gain = 0.3, max_hear_distance = 10}) {pos = pos, gain = 0.3, max_hear_distance = 10}, true)
minetest.swap_node(pos, {name = node.name .. "_open", minetest.swap_node(pos, {name = node.name .. "_open",
param1 = node.param1, param2 = node.param2}) param1 = node.param1, param2 = node.param2})
end end
@ -744,7 +744,7 @@ function doors.register_fencegate(name, def)
local node_def = minetest.registered_nodes[node.name] local node_def = minetest.registered_nodes[node.name]
minetest.swap_node(pos, {name = node_def.gate, param2 = node.param2}) minetest.swap_node(pos, {name = node_def.gate, param2 = node.param2})
minetest.sound_play(node_def.sound, {pos = pos, gain = 0.3, minetest.sound_play(node_def.sound, {pos = pos, gain = 0.3,
max_hear_distance = 8}) max_hear_distance = 8}, true)
return itemstack return itemstack
end, end,
selection_box = { selection_box = {

View file

@ -1,14 +1,14 @@
# textdomain: doors # textdomain: doors
Hidden Door Segment=隐藏门段 Hidden Door Segment=隐藏门段
Owned by @1=由@1拥有 Owned by @1=由@1拥有
You do not own this locked door.=您不拥有此锁着的门 You do not own this locked door.=这个门不属于你所有
a locked door=一扇锁的门 a locked door=一扇已上锁的门
Wooden Door=木门 Wooden Door=木门
Steel Door=铁门 Steel Door=铁门
Glass Door=玻璃门 Glass Door=玻璃门
Obsidian Glass Door=黑曜石玻璃门 Obsidian Glass Door=黑曜石玻璃门
You do not own this trapdoor.=您不拥有此活板门 You do not own this trapdoor.=这个活板门不属于你所有
a locked trapdoor=一扇上锁的活板门 a locked trapdoor=一扇上锁的活板门
Wooden Trapdoor=木活板门 Wooden Trapdoor=木活板门
Steel Trapdoor=铁活板门 Steel Trapdoor=铁活板门
Apple Wood Fence Gate=用苹果树做的木栅栏门 Apple Wood Fence Gate=用苹果树做的木栅栏门

View file

@ -0,0 +1,18 @@
# textdomain: doors
Hidden Door Segment=隱藏門段
Owned by @1=由@1擁有
You do not own this locked door.=這個門不屬於你所有。
a locked door=一扇已上鎖的門
Wooden Door=木門
Steel Door=鐵門
Glass Door=玻璃門
Obsidian Glass Door=黑曜石玻璃門
You do not own this trapdoor.=這個活板門不屬於你所有。
a locked trapdoor=一扇已上鎖的活板門
Wooden Trapdoor=木活板門
Steel Trapdoor=鐵活板門
Apple Wood Fence Gate=用蘋果樹做的木柵欄門
Acacia Wood Fence Gate=相思木柵欄門
Jungle Wood Fence Gate=叢林木柵欄門
Pine Wood Fence Gate=松木柵欄門
Aspen Wood Fence Gate=白楊木柵欄門

View file

@ -1,26 +1,13 @@
dungeon_loot.registered_loot = { -- Loot from the `default` mod is registered here,
-- buckets -- with the rest being registered in the respective mods
{name = "bucket:bucket_empty", chance = 0.55},
-- water in deserts/ice or above ground, lava otherwise
{name = "bucket:bucket_water", chance = 0.45,
types = {"sandstone", "desert", "ice"}},
{name = "bucket:bucket_water", chance = 0.45, y = {0, 32768},
types = {"normal"}},
{name = "bucket:bucket_lava", chance = 0.45, y = {-32768, -1},
types = {"normal"}},
dungeon_loot.registered_loot = {
-- various items -- various items
{name = "default:stick", chance = 0.6, count = {3, 6}}, {name = "default:stick", chance = 0.6, count = {3, 6}},
{name = "default:flint", chance = 0.4, count = {1, 3}}, {name = "default:flint", chance = 0.4, count = {1, 3}},
{name = "vessels:glass_fragments", chance = 0.35, count = {1, 4}},
{name = "carts:rail", chance = 0.35, count = {1, 6}},
-- farming / consumable -- farming / consumable
{name = "farming:string", chance = 0.5, count = {1, 8}},
{name = "farming:wheat", chance = 0.5, count = {2, 5}},
{name = "default:apple", chance = 0.4, count = {1, 4}}, {name = "default:apple", chance = 0.4, count = {1, 4}},
{name = "farming:seed_cotton", chance = 0.4, count = {1, 4},
types = {"normal"}},
{name = "default:cactus", chance = 0.4, count = {1, 4}, {name = "default:cactus", chance = 0.4, count = {1, 4},
types = {"sandstone", "desert"}}, types = {"sandstone", "desert"}},

View file

@ -89,20 +89,20 @@ local function populate_chest(pos, rand, dungeontype)
amount = rand:next(loot.count[1], loot.count[2]) amount = rand:next(loot.count[1], loot.count[2])
end end
if itemdef then if not itemdef then
if itemdef.tool_capabilities then minetest.log("warning", "Registered loot item " .. loot.name .. " does not exist")
for n = 1, amount do elseif itemdef.tool_capabilities then
local wear = rand:next(0.20 * 65535, 0.75 * 65535) -- 20% to 75% wear for n = 1, amount do
table.insert(items, ItemStack({name = loot.name, wear = wear})) local wear = rand:next(0.20 * 65535, 0.75 * 65535) -- 20% to 75% wear
end table.insert(items, ItemStack({name = loot.name, wear = wear}))
elseif itemdef.stack_max == 1 then
-- not stackable, add separately
for n = 1, amount do
table.insert(items, loot.name)
end
else
table.insert(items, ItemStack({name = loot.name, count = amount}))
end end
elseif itemdef.stack_max == 1 then
-- not stackable, add separately
for n = 1, amount do
table.insert(items, loot.name)
end
else
table.insert(items, ItemStack({name = loot.name, count = amount}))
end end
end end
end end

View file

@ -2,8 +2,8 @@
White Dye=白染料 White Dye=白染料
Grey Dye=灰染料 Grey Dye=灰染料
Dark Grey Dye=暗灰染料 Dark Grey Dye=暗灰染料
Black Dye=染料 Black Dye=染料
Violet Dye=染料 Violet Dye=染料
Blue Dye=蓝染料 Blue Dye=蓝染料
Cyan Dye=青染料 Cyan Dye=青染料
Dark Green Dye=暗绿染料 Dark Green Dye=暗绿染料
@ -13,4 +13,4 @@ Brown Dye=棕染料
Orange Dye=橙染料 Orange Dye=橙染料
Red Dye=红染料 Red Dye=红染料
Magenta Dye=品红染料 Magenta Dye=品红染料
Pink Dye=红染料 Pink Dye=红染料

View file

@ -0,0 +1,16 @@
# textdomain: dye
White Dye=白染料
Grey Dye=灰染料
Dark Grey Dye=暗灰染料
Black Dye=黑染料
Violet Dye=紫染料
Blue Dye=藍染料
Cyan Dye=青染料
Dark Green Dye=暗綠染料
Green Dye=綠染料
Yellow Dye=黃染料
Brown Dye=棕染料
Orange Dye=橙染料
Red Dye=紅染料
Magenta Dye=品紅染料
Pink Dye=粉紅染料

View file

@ -59,7 +59,7 @@ farming.hoe_on_use = function(itemstack, user, pointed_thing, uses)
minetest.sound_play("default_dig_crumbly", { minetest.sound_play("default_dig_crumbly", {
pos = pt.under, pos = pt.under,
gain = 0.5, gain = 0.5,
}) }, true)
if not (creative and creative.is_enabled_for if not (creative and creative.is_enabled_for
and creative.is_enabled_for(user:get_player_name())) then and creative.is_enabled_for(user:get_player_name())) then
@ -68,7 +68,8 @@ farming.hoe_on_use = function(itemstack, user, pointed_thing, uses)
itemstack:add_wear(65535/(uses-1)) itemstack:add_wear(65535/(uses-1))
-- tool break sound -- tool break sound
if itemstack:get_count() == 0 and wdef.sound and wdef.sound.breaks then if itemstack:get_count() == 0 and wdef.sound and wdef.sound.breaks then
minetest.sound_play(wdef.sound.breaks, {pos = pt.above, gain = 0.5}) minetest.sound_play(wdef.sound.breaks, {pos = pt.above,
gain = 0.5}, true)
end end
end end
return itemstack return itemstack
@ -176,6 +177,8 @@ farming.place_seed = function(itemstack, placer, pointed_thing, plantname)
end end
-- add the node and remove 1 item from the itemstack -- add the node and remove 1 item from the itemstack
minetest.log("action", player_name .. " places node " .. plantname .. " at " ..
minetest.pos_to_string(pt.above))
minetest.add_node(pt.above, {name = plantname, param2 = 1}) minetest.add_node(pt.above, {name = plantname, param2 = 1})
tick(pt.above) tick(pt.above)
if not (creative and creative.is_enabled_for if not (creative and creative.is_enabled_for

View file

@ -144,3 +144,13 @@ minetest.register_craft({
recipe = "farming:hoe_wood", recipe = "farming:hoe_wood",
burntime = 5, burntime = 5,
}) })
-- Register farming items as dungeon loot
if minetest.global_exists("dungeon_loot") then
dungeon_loot.register({
{name = "farming:string", chance = 0.5, count = {1, 8}},
{name = "farming:wheat", chance = 0.5, count = {2, 5}},
{name = "farming:seed_cotton", chance = 0.4, count = {1, 4},
types = {"normal"}},
})
end

View file

@ -1,10 +1,10 @@
# textdomain: farming # textdomain: farming
Wooden Hoe=木锄 Wooden Hoe=木锄
Stone Hoe=石锄 Stone Hoe=石锄
Steel Hoe=铁锄 Steel Hoe=铁锄
Bronze Hoe=青铜锄 Bronze Hoe=青铜锄
Mese Hoe=Mese锄 Mese Hoe=黄石锄头
Diamond Hoe=钻石锄 Diamond Hoe=钻石锄
Wheat Seed=小麦种子 Wheat Seed=小麦种子
Flour=面粉 Flour=面粉
Bread=面包 Bread=面包

View file

@ -0,0 +1,25 @@
# textdomain: farming
Wooden Hoe=木鋤頭
Stone Hoe=石鋤頭
Steel Hoe=鐵鋤頭
Bronze Hoe=青銅鋤頭
Mese Hoe=黃石鋤頭
Diamond Hoe=鑽石鋤頭
Wheat Seed=小麥種子
Flour=麵粉
Bread=麵包
Cotton Seed=棉花種子
String=線
Soil=土
Wet Soil=溼土
Dry Soil=乾土
Wet Dry Soil=溼乾土
Desert Sand Soil=沙漠沙土
Wet Desert Sand Soil=溼沙漠沙土
Straw=稻草
Straw Stair=稻草臺階
Inner Straw Stair=稻草內樓梯
Outer Straw Stair=稻草外樓梯
Straw Slab=稻草板
Wheat=小麥
Cotton=棉

View file

@ -1,3 +1,4 @@
name = farming name = farming
description = Minetest Game mod: farming description = Minetest Game mod: farming
depends = default, wool, stairs depends = default, wool, stairs
optional_depends = dungeon_loot

View file

@ -34,7 +34,7 @@ local function flood_flame(pos, oldnode, newnode)
if not (nodedef and nodedef.groups and if not (nodedef and nodedef.groups and
nodedef.groups.igniter and nodedef.groups.igniter > 0) then nodedef.groups.igniter and nodedef.groups.igniter > 0) then
minetest.sound_play("fire_extinguish_flame", minetest.sound_play("fire_extinguish_flame",
{pos = pos, max_hear_distance = 16, gain = 0.15}) {pos = pos, max_hear_distance = 16, gain = 0.15}, true)
end end
-- Remove the flame -- Remove the flame
return false return false
@ -128,7 +128,8 @@ minetest.register_tool("fire:flint_and_steel", {
local sound_pos = pointed_thing.above or user:get_pos() local sound_pos = pointed_thing.above or user:get_pos()
minetest.sound_play( minetest.sound_play(
"fire_flint_and_steel", "fire_flint_and_steel",
{pos = sound_pos, gain = 0.5, max_hear_distance = 8} {pos = sound_pos, gain = 0.5, max_hear_distance = 8},
true
) )
local player_name = user:get_player_name() local player_name = user:get_player_name()
if pointed_thing.type == "node" then if pointed_thing.type == "node" then
@ -155,7 +156,8 @@ minetest.register_tool("fire:flint_and_steel", {
itemstack:add_wear(1000) itemstack:add_wear(1000)
-- Tool break sound -- Tool break sound
if itemstack:get_count() == 0 and wdef.sound and wdef.sound.breaks then if itemstack:get_count() == 0 and wdef.sound and wdef.sound.breaks then
minetest.sound_play(wdef.sound.breaks, {pos = sound_pos, gain = 0.5}) minetest.sound_play(wdef.sound.breaks, {pos = sound_pos,
gain = 0.5}, true)
end end
return itemstack return itemstack
end end

View file

@ -2,4 +2,4 @@
Firefly=萤火虫 Firefly=萤火虫
Hidden Firefly=隐藏的萤火虫 Hidden Firefly=隐藏的萤火虫
Bug Net=虫网 Bug Net=虫网
Firefly in a Bottle=瓶中的萤火虫 Firefly in a Bottle=放在瓶子里的萤火虫

View file

@ -0,0 +1,5 @@
# textdomain: fireflies
Firefly=螢火蟲
Hidden Firefly=隱藏的螢火蟲
Bug Net=蟲網
Firefly in a Bottle=放在瓶子裡的螢火蟲

View file

@ -4,9 +4,9 @@ Orange Tulip=橙郁金香
Yellow Dandelion=黄蒲公英 Yellow Dandelion=黄蒲公英
Green Chrysanthemum=绿菊花 Green Chrysanthemum=绿菊花
Blue Geranium=蓝天竺葵 Blue Geranium=蓝天竺葵
Viola=堇 Viola=三色
White Dandelion=白蒲公英 White Dandelion=白蒲公英
Black Tulip=黑郁金香 Black Tulip=黑郁金香
Red Mushroom=红蘑菇 Red Mushroom=红蘑菇
Brown Mushroom=棕蘑菇 Brown Mushroom=棕蘑菇
Waterlily=荷花 Waterlily=睡莲

View file

@ -0,0 +1,12 @@
# textdomain: flowers
Red Rose=紅玫瑰
Orange Tulip=橙鬱金香
Yellow Dandelion=黃蒲公英
Green Chrysanthemum=綠菊花
Blue Geranium=藍天竺葵
Viola=三色堇
White Dandelion=白蒲公英
Black Tulip=黑鬱金香
Red Mushroom=紅蘑菇
Brown Mushroom=棕蘑菇
Waterlily=睡蓮

View file

@ -1,4 +1,4 @@
# textdomain: game_commands # textdomain: game_commands
Kill yourself to respawn=杀死自己并重生 Kill yourself to respawn=杀死自己并重生
No static_spawnpoint defined=static_spawnpoint未定义 No static_spawnpoint defined=static_spawnpoint 未定义
You need to be online to be killed!=您需要在线才能被杀死! You need to be online to be killed!=您需要在线才能被杀死!

View file

@ -0,0 +1,4 @@
# textdomain: game_commands
Kill yourself to respawn=殺死自己並重生
No static_spawnpoint defined=static_spawnpoint 未定義
You need to be online to be killed!=您需要在線才能被殺死!

View file

@ -1,3 +1,3 @@
# textdomain: map # textdomain: map
Mapping Kit=制地图套件 Mapping Kit=地图绘制工具包
Use with 'Minimap' key=与“地图”键一起使用 Use with 'Minimap' key=与“迷你地图”键一起使用

View file

@ -0,0 +1,3 @@
# textdomain: map
Mapping Kit=地圖繪製工具包
Use with 'Minimap' key=與“迷你地圖”鍵一起使用

View file

@ -96,6 +96,15 @@ end)
local player_set_animation = player_api.set_animation local player_set_animation = player_api.set_animation
local player_attached = player_api.player_attached local player_attached = player_api.player_attached
-- Prevent knockback for attached players
local old_calculate_knockback = minetest.calculate_knockback
function minetest.calculate_knockback(player, ...)
if player_attached[player:get_player_name()] then
return 0
end
return old_calculate_knockback(player, ...)
end
-- Check each player and apply animations -- Check each player and apply animations
minetest.register_globalstep(function(dtime) minetest.register_globalstep(function(dtime)
for _, player in pairs(minetest.get_connected_players()) do for _, player in pairs(minetest.get_connected_players()) do

View file

@ -1,3 +1,3 @@
# textdomain: screwdriver # textdomain: screwdriver
Screwdriver=Screwdriver Screwdriver=螺丝刀
(left-click rotates face, right-click rotates axis)=(左键单击旋转面,右键单击旋转轴) (left-click rotates face, right-click rotates axis)=(左键单击旋转面,右键单击旋转轴)

View file

@ -0,0 +1,3 @@
# textdomain: screwdriver
Screwdriver=螺絲刀
(left-click rotates face, right-click rotates axis)=(左鍵單擊旋轉面,右鍵單擊旋轉軸)

View file

@ -1,8 +1,8 @@
# textdomain: sethome # textdomain: sethome
Can use /sethome and /home=可以使用/sethome和/home Can use /sethome and /home=可以使用/sethome和/home
Teleport you to your home point=传送您到您 Teleport you to your home point=传送您到您家的地点
Teleported to home!=传送到家 Teleported to home!=传送到家!
Set a home using /sethome=使用/sethome设定家 Set a home using /sethome=使用/sethome设定家
Set your home point=设定您 Set your home point=设定您家的地点
Home set!=家设定了 Home set!=已设定家
Player not found!=找到玩家! Player not found!=找到玩家!

View file

@ -0,0 +1,8 @@
# textdomain: sethome
Can use /sethome and /home=可以使用/sethome和/home
Teleport you to your home point=傳送您到您家的地點
Teleported to home!=已傳送到家!
Set a home using /sethome=使用/sethome設定家
Set your home point=設定您家的地點
Home set!=已設定家!
Player not found!=未找到玩家!

View file

@ -0,0 +1,2 @@
# textdomain:sfinv
Crafting=合成

View file

@ -142,4 +142,4 @@ Ice Slab=Dalle de glace
Snow Block Stair=Escalier en bloc de neige Snow Block Stair=Escalier en bloc de neige
Inner Snow Block Stair=Escalier intérieur en bloc de neige Inner Snow Block Stair=Escalier intérieur en bloc de neige
Outer Snow Block Stair=Escalier extérieur en bloc de neige Outer Snow Block Stair=Escalier extérieur en bloc de neige
Snow Block Slab=Escalier en bloc de neige Snow Block Slab=Dalle en bloc de neige

View file

@ -1,145 +1,149 @@
# textdomain: stairs # textdomain: stairs
Glass Stair=玻璃楼梯 Glass Stair=玻璃楼梯
Glass Slab=玻璃平板 Glass Slab=玻璃台阶
Inner Glass Stair=玻璃楼梯 Inner Glass Stair=玻璃楼梯(内)
Outer Glass Stair=玻璃楼梯 Outer Glass Stair=玻璃楼梯(外)
Obsidian Glass Stair=黑曜石玻璃楼梯 Obsidian Glass Stair=黑曜石玻璃楼梯
Obsidian Glass Slab=黑曜石玻璃平板 Obsidian Glass Slab=黑曜石玻璃台阶
Inner Obsidian Glass Stair=黑曜石玻璃楼梯 Inner Obsidian Glass Stair=黑曜石玻璃楼梯(内)
Outer Obsidian Glass Stair=黑曜石玻璃楼梯 Outer Obsidian Glass Stair=黑曜石玻璃楼梯(外)
Wooden Stair=木楼梯 Wooden Stair=木楼梯
Inner Wooden Stair=木楼梯 Inner Wooden Stair=木楼梯(内)
Outer Wooden Stair=木楼梯 Outer Wooden Stair=木楼梯(外)
Wooden Slab=木平板 Wooden Slab=木制台阶
Jungle Wood Stair=丛林木楼梯 Jungle Wood Stair=丛林木楼梯
Inner Jungle Wood Stair=丛林木楼梯 Inner Jungle Wood Stair=丛林木楼梯(内)
Outer Jungle Wood Stair=丛林木楼梯 Outer Jungle Wood Stair=丛林木楼梯(外)
Jungle Wood Slab=丛林木平板 Jungle Wood Slab=丛林木台阶
Pine Wood Stair=松木楼梯 Pine Wood Stair=松木楼梯
Inner Pine Wood Stair=松木楼梯 Inner Pine Wood Stair=松木楼梯(内)
Outer Pine Wood Stair=松木楼梯 Outer Pine Wood Stair=松木楼梯(外)
Pine Wood Slab=松木平板 Pine Wood Slab=松木台阶
Acacia Wood Stair=相思木楼梯 Acacia Wood Stair=金合欢木楼梯
Inner Acacia Wood Stair=内相思木楼梯 Inner Acacia Wood Stair=金合欢木楼梯(内)
Outer Acacia Wood Stair=外相思木楼梯 Outer Acacia Wood Stair=金合欢木楼梯(外)
Acacia Wood Slab=相思木平板 Acacia Wood Slab=金合欢木台阶
Aspen Wood Stair=白杨木楼梯 Aspen Wood Stair=白杨木楼梯
Inner Aspen Wood Stair=内白杨木楼梯 Inner Aspen Wood Stair=白杨木楼梯(内)
Outer Aspen Wood Stair=外白杨木楼梯 Outer Aspen Wood Stair=白杨木楼梯(外)
Aspen Wood Slab=白杨木平板 Aspen Wood Slab=白杨木台阶
Blue Stained Stair=蓝木楼梯
Inner Blue Stained Stair=蓝木楼梯(内)
Outer Blue Stained Stair=蓝木楼梯(外)
Blue Stained Slab=蓝木台阶
Stone Stair=石楼梯 Stone Stair=石楼梯
Inner Stone Stair=内石楼梯 Inner Stone Stair=石楼梯(内)
Outer Stone Stair=外石楼梯 Outer Stone Stair=石楼梯(外)
Stone Slab=石平板 Stone Slab=石台阶
Cobblestone Stair=鹅卵石楼梯 Cobblestone Stair=石楼梯
Inner Cobblestone Stair=内鹅卵石楼梯 Inner Cobblestone Stair=圆石楼梯(内)
Outer Cobblestone Stair=外鹅卵石楼梯 Outer Cobblestone Stair=圆石楼梯(外)
Cobblestone Slab=鹅卵石平板 Cobblestone Slab=圆石台阶
Mossy Cobblestone Stair=生苔的鹅卵石楼梯 Mossy Cobblestone Stair=石楼梯
Inner Mossy Cobblestone Stair=内生苔的鹅卵石楼梯 Inner Mossy Cobblestone Stair=苔石楼梯(内)
Outer Mossy Cobblestone Stair=外生苔的鹅卵石楼梯 Outer Mossy Cobblestone Stair=苔石楼梯(外)
Mossy Cobblestone Slab=生苔的鹅卵石平板 Mossy Cobblestone Slab=苔石台阶
Stone Brick Stair=石砖楼梯 Stone Brick Stair=石砖楼梯
Inner Stone Brick Stair=石砖楼梯 Inner Stone Brick Stair=石砖楼梯(内)
Outer Stone Brick Stair=石砖楼梯 Outer Stone Brick Stair=石砖楼梯(外)
Stone Brick Slab=石砖平板 Stone Brick Slab=石砖台阶
Stone Block Stair=石块楼梯 Stone Block Stair=石块楼梯
Inner Stone Block Stair=石块楼梯 Inner Stone Block Stair=石块楼梯(内)
Outer Stone Block Stair=石块楼梯 Outer Stone Block Stair=石块楼梯(外)
Stone Block Slab=石块平板 Stone Block Slab=石块台阶
Desert Stone Stair=沙漠石楼梯 Desert Stone Stair=沙漠石楼梯
Inner Desert Stone Stair=沙漠石楼梯 Inner Desert Stone Stair=沙漠石楼梯(内)
Outer Desert Stone Stair=沙漠石楼梯 Outer Desert Stone Stair=沙漠石楼梯(外)
Desert Stone Slab=沙漠石平板 Desert Stone Slab=沙漠石台阶
Desert Cobblestone Stair=沙漠鹅卵石楼梯 Desert Cobblestone Stair=沙漠石楼梯
Inner Desert Cobblestone Stair=内沙漠鹅卵石 Inner Desert Cobblestone Stair=沙漠圆石楼梯(内)
Outer Desert Cobblestone Stair=外沙漠鹅卵石 Outer Desert Cobblestone Stair=沙漠圆石楼梯(外)
Desert Cobblestone Slab=沙漠鹅卵石平板 Desert Cobblestone Slab=沙漠圆石台阶
Desert Stone Brick Stair=沙漠石砖楼梯 Desert Stone Brick Stair=沙漠石砖楼梯
Inner Desert Stone Brick Stair=沙漠石砖楼梯 Inner Desert Stone Brick Stair=沙漠石砖楼梯(内)
Outer Desert Stone Brick Stair=沙漠石砖楼梯 Outer Desert Stone Brick Stair=沙漠石砖楼梯(外)
Desert Stone Brick Slab=沙漠石砖平板 Desert Stone Brick Slab=沙漠石砖台阶
Desert Stone Block Stair=沙漠石块楼梯 Desert Stone Block Stair=沙漠石块楼梯
Inner Desert Stone Block Stair=沙漠石块楼梯 Inner Desert Stone Block Stair=沙漠石块楼梯(内)
Outer Desert Stone Block Stair=沙漠石块楼梯 Outer Desert Stone Block Stair=沙漠石块楼梯(外)
Desert Stone Block Slab=沙漠石块平板 Desert Stone Block Slab=沙漠石块台阶
Sandstone Stair=砂岩楼梯 Sandstone Stair=沙石楼梯
Inner Sandstone Stair=内砂岩楼梯 Inner Sandstone Stair=沙石楼梯(内)
Outer Sandstone Stair=外砂岩楼梯 Outer Sandstone Stair=沙石楼梯(外)
Sandstone Slab=砂岩平板 Sandstone Slab=沙石台阶
Sandstone Brick Stair=砂岩砖楼梯 Sandstone Brick Stair=沙石砖楼梯
Inner Sandstone Brick Stair=内砂岩砖楼梯 Inner Sandstone Brick Stair=沙石砖楼梯(内)
Outer Sandstone Brick Stair=外砂岩砖楼梯 Outer Sandstone Brick Stair=沙石砖楼梯(外)
Sandstone Brick Slab=砂岩砖平板 Sandstone Brick Slab=沙石砖台阶
Sandstone Block Stair=砂岩块楼梯 Sandstone Block Stair=沙石块楼梯
Inner Sandstone Block Stair=内砂岩块楼梯 Inner Sandstone Block Stair=沙石块楼梯(内)
Outer Sandstone Block Stair=外砂岩块楼梯 Outer Sandstone Block Stair=沙石块楼梯(外)
Sandstone Block Slab=砂岩块平板 Sandstone Block Slab=沙石块台阶
Desert Sandstone Stair=沙漠砂岩楼梯 Desert Sandstone Stair=沙漠沙石楼梯
Inner Desert Sandstone Stair=内沙漠砂岩楼梯 Inner Desert Sandstone Stair=沙漠沙石楼梯(内)
Outer Desert Sandstone Stair=外沙漠砂岩楼梯 Outer Desert Sandstone Stair=沙漠沙石楼梯(外)
Desert Sandstone Slab=沙漠砂岩平板 Desert Sandstone Slab=沙漠沙石台阶
Desert Sandstone Brick Stair=沙漠砂岩砖楼梯 Desert Sandstone Brick Stair=沙漠沙石砖楼梯
Inner Desert Sandstone Brick Stair=内沙漠砂岩砖楼梯 Inner Desert Sandstone Brick Stair=沙漠沙石砖楼梯(内)
Outer Desert Sandstone Brick Stair=外沙漠砂岩砖楼梯 Outer Desert Sandstone Brick Stair=沙漠沙石砖楼梯(外)
Desert Sandstone Brick Slab=沙漠砂岩砖平板 Desert Sandstone Brick Slab=沙漠沙石砖台阶
Desert Sandstone Block Stair=沙漠砂岩块楼梯 Desert Sandstone Block Stair=沙漠沙石块楼梯
Inner Desert Sandstone Block Stair=内沙漠砂岩块楼梯 Inner Desert Sandstone Block Stair=沙漠沙石块楼梯(内)
Outer Desert Sandstone Block Stair=外沙漠砂岩块楼梯 Outer Desert Sandstone Block Stair=沙漠沙石块楼梯(外)
Desert Sandstone Block Slab=沙漠砂岩块平板 Desert Sandstone Block Slab=沙漠沙石块台阶
Silver Sandstone Stair=银砂岩楼梯 Silver Sandstone Stair=银沙石楼梯
Inner Silver Sandstone Stair=内银砂岩楼梯 Inner Silver Sandstone Stair=银沙石楼梯(内)
Outer Silver Sandstone Stair=外银砂岩楼梯 Outer Silver Sandstone Stair=银沙石楼梯(外)
Silver Sandstone Slab=银砂岩平板 Silver Sandstone Slab=银沙石台阶
Silver Sandstone Brick Stair=银砂岩砖楼梯 Silver Sandstone Brick Stair=银沙石砖楼梯
Inner Silver Sandstone Brick Stair=内银砂岩砖楼梯 Inner Silver Sandstone Brick Stair=银沙石砖楼梯(内)
Outer Silver Sandstone Brick Stair=外银砂岩砖楼梯 Outer Silver Sandstone Brick Stair=银沙石砖楼梯(外)
Silver Sandstone Brick Slab=银砂岩砖平板 Silver Sandstone Brick Slab=银沙石砖台阶
Silver Sandstone Block Stair=银砂岩块楼梯 Silver Sandstone Block Stair=银沙石块楼梯
Inner Silver Sandstone Block Stair=内银砂岩块楼梯 Inner Silver Sandstone Block Stair=银沙石块楼梯(内)
Outer Silver Sandstone Block Stair=外银砂岩块楼梯 Outer Silver Sandstone Block Stair=银沙石块楼梯(外)
Silver Sandstone Block Slab=银砂岩块平板 Silver Sandstone Block Slab=银沙石块台阶
Obsidian Stair=黑曜石楼梯 Obsidian Stair=黑曜石楼梯
Inner Obsidian Stair=黑曜石楼梯 Inner Obsidian Stair=黑曜石楼梯(内)
Outer Obsidian Stair=黑曜石楼梯 Outer Obsidian Stair=黑曜石楼梯(外)
Obsidian Slab=黑曜石平板 Obsidian Slab=黑曜石台阶
Obsidian Brick Stair=黑曜石砖楼梯 Obsidian Brick Stair=黑曜石砖楼梯
Inner Obsidian Brick Stair=黑曜石砖楼梯 Inner Obsidian Brick Stair=黑曜石砖楼梯(内)
Outer Obsidian Brick Stair=黑曜石砖楼梯 Outer Obsidian Brick Stair=黑曜石砖楼梯(外)
Obsidian Brick Slab=黑曜石砖平板 Obsidian Brick Slab=黑曜石砖台阶
Obsidian Block Stair=黑曜石块楼梯 Obsidian Block Stair=黑曜石块楼梯
Inner Obsidian Block Stair=黑曜石块楼梯 Inner Obsidian Block Stair=黑曜石块楼梯(内)
Outer Obsidian Block Stair=黑曜石块楼梯 Outer Obsidian Block Stair=黑曜石块楼梯(外)
Obsidian Block Slab=黑曜石块平板 Obsidian Block Slab=黑曜石块台阶
Brick Stair=砖楼梯 Brick Stair=砖楼梯
Inner Brick Stair=砖楼梯 Inner Brick Stair=砖楼梯(内)
Outer Brick Stair=砖楼梯 Outer Brick Stair=砖楼梯(外)
Brick Slab=砖平板 Brick Slab=砖制台阶
Steel Block Stair=楼梯 Steel Block Stair=铁块楼梯
Inner Steel Block Stair=内钢楼梯 Inner Steel Block Stair=铁块楼梯(内)
Outer Steel Block Stair=外钢楼梯 Outer Steel Block Stair=铁块楼梯(外)
Steel Block Slab=钢平板 Steel Block Slab=铁块台阶
Tin Block Stair=锡楼梯 Tin Block Stair=锡楼梯
Inner Tin Block Stair=内锡楼梯 Inner Tin Block Stair=锡块楼梯(内)
Outer Tin Block Stair=外锡楼梯 Outer Tin Block Stair=锡块楼梯(外)
Tin Block Slab=锡平板 Tin Block Slab=锡块台阶
Copper Block Stair=铜楼梯 Copper Block Stair=铜楼梯
Inner Copper Block Stair=内铜楼梯 Inner Copper Block Stair=铜块楼梯(内)
Outer Copper Block Stair=外铜楼梯 Outer Copper Block Stair=铜块楼梯(外)
Copper Block Slab=铜平板 Copper Block Slab=铜块台阶
Bronze Block Stair=青铜楼梯 Bronze Block Stair=青铜楼梯
Inner Bronze Block Stair=青铜楼梯 Inner Bronze Block Stair=青铜楼梯(内)
Outer Bronze Block Stair=青铜楼梯 Outer Bronze Block Stair=青铜楼梯(外)
Bronze Block Slab=青铜平板 Bronze Block Slab=青铜块台阶
Gold Block Stair=金楼梯 Gold Block Stair=金楼梯
Inner Gold Block Stair=内金楼梯 Inner Gold Block Stair=金块楼梯(内)
Outer Gold Block Stair=外金楼梯 Outer Gold Block Stair=金块楼梯(外)
Gold Block Slab=金平板 Gold Block Slab=金块台阶
Ice Stair=冰 Ice Stair=冰
Inner Ice Stair=内冰楼梯 Inner Ice Stair=冰块楼梯(内)
Outer Ice Stair=外冰楼梯 Outer Ice Stair=冰块楼梯(外)
Ice Slab=冰平板 Ice Slab=冰台阶
Snow Block Stair=雪块楼梯 Snow Block Stair=雪块楼梯
Inner Snow Block Stair=雪块楼梯 Inner Snow Block Stair=雪块楼梯(内)
Outer Snow Block Stair=雪块楼梯 Outer Snow Block Stair=雪块楼梯(外)
Snow Block Slab=雪块平板 Snow Block Slab=雪块台阶

View file

@ -0,0 +1,149 @@
# textdomain: stairs
Glass Stair=玻璃樓梯
Glass Slab=玻璃臺階
Inner Glass Stair=玻璃樓梯(內)
Outer Glass Stair=玻璃樓梯(外)
Obsidian Glass Stair=黑曜石玻璃樓梯
Obsidian Glass Slab=黑曜石玻璃臺階
Inner Obsidian Glass Stair=黑曜石玻璃樓梯(內)
Outer Obsidian Glass Stair=黑曜石玻璃樓梯(外)
Wooden Stair=木製樓梯
Inner Wooden Stair=木樓梯(內)
Outer Wooden Stair=木樓梯(外)
Wooden Slab=木製臺階
Jungle Wood Stair=叢林木樓梯
Inner Jungle Wood Stair=叢林木樓梯(內)
Outer Jungle Wood Stair=叢林木樓梯(外)
Jungle Wood Slab=叢林木臺階
Pine Wood Stair=松木樓梯
Inner Pine Wood Stair=松木樓梯(內)
Outer Pine Wood Stair=松木樓梯(外)
Pine Wood Slab=松木臺階
Acacia Wood Stair=金合歡木樓梯
Inner Acacia Wood Stair=金合歡木樓梯(內)
Outer Acacia Wood Stair=金合歡木樓梯(外)
Acacia Wood Slab=金合歡木臺階
Aspen Wood Stair=白楊木樓梯
Inner Aspen Wood Stair=白楊木樓梯(內)
Outer Aspen Wood Stair=白楊木樓梯(外)
Aspen Wood Slab=白楊木臺階
Blue Stained Stair=藍木樓梯
Inner Blue Stained Stair=藍木樓梯(內)
Outer Blue Stained Stair=藍木樓梯(外)
Blue Stained Slab=藍木臺階
Stone Stair=石樓梯
Inner Stone Stair=石樓梯(內)
Outer Stone Stair=石樓梯(外)
Stone Slab=石臺階
Cobblestone Stair=圓石樓梯
Inner Cobblestone Stair=圓石樓梯(內)
Outer Cobblestone Stair=圓石樓梯(外)
Cobblestone Slab=圓石臺階
Mossy Cobblestone Stair=苔石樓梯
Inner Mossy Cobblestone Stair=苔石樓梯(內)
Outer Mossy Cobblestone Stair=苔石樓梯(外)
Mossy Cobblestone Slab=苔石臺階
Stone Brick Stair=石磚樓梯
Inner Stone Brick Stair=石磚樓梯(內)
Outer Stone Brick Stair=石磚樓梯(外)
Stone Brick Slab=石磚臺階
Stone Block Stair=石塊樓梯
Inner Stone Block Stair=石塊樓梯(內)
Outer Stone Block Stair=石塊樓梯(外)
Stone Block Slab=石塊臺階
Desert Stone Stair=沙漠石樓梯
Inner Desert Stone Stair=沙漠石樓梯(內)
Outer Desert Stone Stair=沙漠石樓梯(外)
Desert Stone Slab=沙漠石臺階
Desert Cobblestone Stair=沙漠圓石樓梯
Inner Desert Cobblestone Stair=沙漠圓石樓梯(內)
Outer Desert Cobblestone Stair=沙漠圓石樓梯(外)
Desert Cobblestone Slab=沙漠圓石臺階
Desert Stone Brick Stair=沙漠石磚樓梯
Inner Desert Stone Brick Stair=沙漠石磚樓梯(內)
Outer Desert Stone Brick Stair=沙漠石磚樓梯(外)
Desert Stone Brick Slab=沙漠石磚臺階
Desert Stone Block Stair=沙漠石塊樓梯
Inner Desert Stone Block Stair=沙漠石塊樓梯(內)
Outer Desert Stone Block Stair=沙漠石塊樓梯(外)
Desert Stone Block Slab=沙漠石塊臺階
Sandstone Stair=沙石樓梯
Inner Sandstone Stair=沙石樓梯(內)
Outer Sandstone Stair=沙石樓梯(外)
Sandstone Slab=沙石臺階
Sandstone Brick Stair=沙石磚樓梯
Inner Sandstone Brick Stair=沙石磚樓梯(內)
Outer Sandstone Brick Stair=沙石磚樓梯(外)
Sandstone Brick Slab=沙石磚臺階
Sandstone Block Stair=沙石塊樓梯
Inner Sandstone Block Stair=沙石塊樓梯(內)
Outer Sandstone Block Stair=沙石塊樓梯(外)
Sandstone Block Slab=沙石塊臺階
Desert Sandstone Stair=沙漠沙石樓梯
Inner Desert Sandstone Stair=沙漠沙石樓梯(內)
Outer Desert Sandstone Stair=沙漠沙石樓梯(外)
Desert Sandstone Slab=沙漠沙石臺階
Desert Sandstone Brick Stair=沙漠沙石磚樓梯
Inner Desert Sandstone Brick Stair=沙漠沙石磚樓梯(內)
Outer Desert Sandstone Brick Stair=沙漠沙石磚樓梯(外)
Desert Sandstone Brick Slab=沙漠沙石磚臺階
Desert Sandstone Block Stair=沙漠沙石塊樓梯
Inner Desert Sandstone Block Stair=沙漠沙石塊樓梯(內)
Outer Desert Sandstone Block Stair=沙漠沙石塊樓梯(外)
Desert Sandstone Block Slab=沙漠沙石塊臺階
Silver Sandstone Stair=銀沙石樓梯
Inner Silver Sandstone Stair=銀沙石樓梯(內)
Outer Silver Sandstone Stair=銀沙石樓梯(外)
Silver Sandstone Slab=銀沙石臺階
Silver Sandstone Brick Stair=銀沙石磚樓梯
Inner Silver Sandstone Brick Stair=銀沙石磚樓梯(內)
Outer Silver Sandstone Brick Stair=銀沙石磚樓梯(外)
Silver Sandstone Brick Slab=銀沙石磚臺階
Silver Sandstone Block Stair=銀沙石塊樓梯
Inner Silver Sandstone Block Stair=銀沙石塊樓梯(內)
Outer Silver Sandstone Block Stair=銀沙石塊樓梯(外)
Silver Sandstone Block Slab=銀沙石塊臺階
Obsidian Stair=黑曜石樓梯
Inner Obsidian Stair=黑曜石樓梯(內)
Outer Obsidian Stair=黑曜石樓梯(外)
Obsidian Slab=黑曜石臺階
Obsidian Brick Stair=黑曜石磚樓梯
Inner Obsidian Brick Stair=黑曜石磚樓梯(內)
Outer Obsidian Brick Stair=黑曜石磚樓梯(外)
Obsidian Brick Slab=黑曜石磚臺階
Obsidian Block Stair=黑曜石塊樓梯
Inner Obsidian Block Stair=黑曜石塊樓梯(內)
Outer Obsidian Block Stair=黑曜石塊樓梯(外)
Obsidian Block Slab=黑曜石塊臺階
Brick Stair=磚樓梯
Inner Brick Stair=磚樓梯(內)
Outer Brick Stair=磚樓梯(外)
Brick Slab=磚制臺階
Steel Block Stair=鐵塊樓梯
Inner Steel Block Stair=鐵塊樓梯(內)
Outer Steel Block Stair=鐵塊樓梯(外)
Steel Block Slab=鐵塊臺階
Tin Block Stair=錫塊樓梯
Inner Tin Block Stair=錫塊樓梯(內)
Outer Tin Block Stair=錫塊樓梯(外)
Tin Block Slab=錫塊臺階
Copper Block Stair=銅塊樓梯
Inner Copper Block Stair=銅塊樓梯(內)
Outer Copper Block Stair=銅塊樓梯(外)
Copper Block Slab=銅塊臺階
Bronze Block Stair=青銅塊樓梯
Inner Bronze Block Stair=青銅塊樓梯(內)
Outer Bronze Block Stair=青銅塊樓梯(外)
Bronze Block Slab=青銅塊臺階
Gold Block Stair=金塊樓梯
Inner Gold Block Stair=金塊樓梯(內)
Outer Gold Block Stair=金塊樓梯(外)
Gold Block Slab=金塊臺階
Ice Stair=冰階梯
Inner Ice Stair=冰塊樓梯(內)
Outer Ice Stair=冰塊樓梯(外)
Ice Slab=冰臺階
Snow Block Stair=雪塊樓梯
Inner Snow Block Stair=雪塊樓梯(內)
Outer Snow Block Stair=雪塊樓梯(外)
Snow Block Slab=雪塊臺階

View file

@ -163,9 +163,8 @@ local function entity_physics(pos, radius, drops)
local damage = (4 / dist) * radius local damage = (4 / dist) * radius
if obj:is_player() then if obj:is_player() then
-- currently the engine has no method to set -- we knock the player back 1.0 node, and slightly upwards
-- player velocity. See #2960 -- TODO: switch to add_player_velocity() introduced in 5.1
-- instead, we knock the player back 1.0 node, and slightly upwards
local dir = vector.normalize(vector.subtract(obj_pos, pos)) local dir = vector.normalize(vector.subtract(obj_pos, pos))
local moveoff = vector.multiply(dir, dist + 1.0) local moveoff = vector.multiply(dir, dist + 1.0)
local newpos = vector.add(pos, moveoff) local newpos = vector.add(pos, moveoff)
@ -174,31 +173,35 @@ local function entity_physics(pos, radius, drops)
obj:set_hp(obj:get_hp() - damage) obj:set_hp(obj:get_hp() - damage)
else else
local do_damage = true
local do_knockback = true
local entity_drops = {}
local luaobj = obj:get_luaentity() local luaobj = obj:get_luaentity()
local objdef = minetest.registered_entities[luaobj.name]
if objdef and objdef.on_blast then -- object might have disappeared somehow
do_damage, do_knockback, entity_drops = objdef.on_blast(luaobj, damage) if luaobj then
end local do_damage = true
local do_knockback = true
local entity_drops = {}
local objdef = minetest.registered_entities[luaobj.name]
if do_knockback then if objdef and objdef.on_blast then
local obj_vel = obj:get_velocity() do_damage, do_knockback, entity_drops = objdef.on_blast(luaobj, damage)
obj:set_velocity(calc_velocity(pos, obj_pos, end
obj_vel, radius * 10))
end if do_knockback then
if do_damage then local obj_vel = obj:get_velocity()
if not obj:get_armor_groups().immortal then obj:set_velocity(calc_velocity(pos, obj_pos,
obj:punch(obj, 1.0, { obj_vel, radius * 10))
full_punch_interval = 1.0, end
damage_groups = {fleshy = damage}, if do_damage then
}, nil) if not obj:get_armor_groups().immortal then
obj:punch(obj, 1.0, {
full_punch_interval = 1.0,
damage_groups = {fleshy = damage},
}, nil)
end
end
for _, item in pairs(entity_drops) do
add_drop(drops, item)
end end
end
for _, item in pairs(entity_drops) do
add_drop(drops, item)
end end
end end
end end
@ -274,7 +277,7 @@ function tnt.burn(pos, nodename)
def.on_ignite(pos) def.on_ignite(pos)
elseif minetest.get_item_group(name, "tnt") > 0 then elseif minetest.get_item_group(name, "tnt") > 0 then
minetest.swap_node(pos, {name = name .. "_burning"}) minetest.swap_node(pos, {name = name .. "_burning"})
minetest.sound_play("tnt_ignite", {pos = pos}) minetest.sound_play("tnt_ignite", {pos = pos}, true)
minetest.get_node_timer(pos):start(1) minetest.get_node_timer(pos):start(1)
end end
end end
@ -403,7 +406,7 @@ function tnt.boom(pos, def)
end end
local sound = def.sound or "tnt_explode" local sound = def.sound or "tnt_explode"
minetest.sound_play(sound, {pos = pos, gain = 2.5, minetest.sound_play(sound, {pos = pos, gain = 2.5,
max_hear_distance = math.min(def.radius * 20, 128)}) max_hear_distance = math.min(def.radius * 20, 128)}, true)
local drops, radius = tnt_explode(pos, def.radius, def.ignore_protection, local drops, radius = tnt_explode(pos, def.radius, def.ignore_protection,
def.ignore_on_blast, owner, def.explode_center) def.ignore_on_blast, owner, def.explode_center)
-- append entity drops -- append entity drops
@ -541,7 +544,8 @@ minetest.register_node("tnt:gunpowder_burning", {
-- unaffected by explosions -- unaffected by explosions
on_blast = function() end, on_blast = function() end,
on_construct = function(pos) on_construct = function(pos)
minetest.sound_play("tnt_gunpowder_burning", {pos = pos, gain = 2}) minetest.sound_play("tnt_gunpowder_burning", {pos = pos,
gain = 2}, true)
minetest.get_node_timer(pos):start(1) minetest.get_node_timer(pos):start(1)
end, end,
}) })
@ -672,7 +676,7 @@ function tnt.register_tnt(def)
-- unaffected by explosions -- unaffected by explosions
on_blast = function() end, on_blast = function() end,
on_construct = function(pos) on_construct = function(pos)
minetest.sound_play("tnt_ignite", {pos = pos}) minetest.sound_play("tnt_ignite", {pos = pos}, true)
minetest.get_node_timer(pos):start(4) minetest.get_node_timer(pos):start(4)
minetest.check_for_falling(pos) minetest.check_for_falling(pos)
end, end,

View file

@ -1,4 +1,4 @@
# textdomain: tnt # textdomain: tnt
Gun Powder=火药粉 Gun Powder=火药粉
TNT Stick=炸药棒 TNT Stick=炸药棒
TNT=炸药 TNT=炸药

View file

@ -0,0 +1,4 @@
# textdomain: tnt
Gun Powder=火藥粉
TNT Stick=炸藥棒
TNT=炸藥包

View file

@ -228,3 +228,10 @@ minetest.register_craft({
recipe = "vessels:shelf", recipe = "vessels:shelf",
burntime = 30, burntime = 30,
}) })
-- Register glass fragments as dungeon loot
if minetest.global_exists("dungeon_loot") then
dungeon_loot.register({
name = "vessels:glass_fragments", chance = 0.35, count = {1, 4}
})
end

View file

@ -2,7 +2,7 @@
Vessels Shelf=容器架 Vessels Shelf=容器架
Empty Glass Bottle=空玻璃瓶 Empty Glass Bottle=空玻璃瓶
Empty Drinking Glass=空水杯 Empty Drinking Glass=空水杯
Empty Heavy Steel Bottle=空重钢瓶 Empty Heavy Steel Bottle=空重钢瓶
Glass Fragments=玻璃碎片 Glass Fragments=玻璃碎片
Empty Vessels Shelf=空容器架 Empty Vessels Shelf=空容器架
Vessels Shelf (@1 items)=容器架(@1项 Vessels Shelf (@1 items)=容器架(@1项

View file

@ -0,0 +1,8 @@
# textdomain: vessels
Vessels Shelf=容器架
Empty Glass Bottle=空玻璃瓶
Empty Drinking Glass=空水杯
Empty Heavy Steel Bottle=空重型鋼瓶
Glass Fragments=玻璃碎片
Empty Vessels Shelf=空容器架
Vessels Shelf (@1 items)=容器架(@1項

View file

@ -1,3 +1,4 @@
name = vessels name = vessels
description = Minetest Game mod: vessels description = Minetest Game mod: vessels
depends = default depends = default
optional_depends = dungeon_loot

View file

@ -1,4 +1,4 @@
# textdomain: walls # textdomain: walls
Cobblestone Wall=鹅卵石墙 Cobblestone Wall=鹅卵石墙
Mossy Cobblestone Wall=苔的鹅卵石墙 Mossy Cobblestone Wall=苔藓覆盖的鹅卵石墙
Desert Cobblestone Wall=沙漠鹅卵石墙 Desert Cobblestone Wall=沙漠鹅卵石墙

View file

@ -0,0 +1,4 @@
# textdomain: walls
Cobblestone Wall=鵝卵石牆
Mossy Cobblestone Wall=苔蘚覆蓋的鵝卵石牆
Desert Cobblestone Wall=沙漠鵝卵石牆

View file

@ -13,4 +13,4 @@ Brown Wool=棕羊毛
Orange Wool=橙羊毛 Orange Wool=橙羊毛
Red Wool=红羊毛 Red Wool=红羊毛
Magenta Wool=品红羊毛 Magenta Wool=品红羊毛
Pink Wool=红羊毛 Pink Wool=红羊毛

View file

@ -0,0 +1,16 @@
# textdomain: wool
White Wool=白羊毛
Grey Wool=灰羊毛
Dark Grey Wool=暗灰羊毛
Black Wool=黑羊毛
Violet Wool=紫羊毛
Blue Wool=藍羊毛
Cyan Wool=青羊毛
Dark Green Wool=暗綠羊毛
Green Wool=綠羊毛
Yellow Wool=黃羊毛
Brown Wool=棕羊毛
Orange Wool=橙羊毛
Red Wool=紅羊毛
Magenta Wool=品紅羊毛
Pink Wool=粉紅羊毛

View file

@ -106,12 +106,12 @@ function xpanes.register_pane(name, def)
wield_image = def.wield_image, wield_image = def.wield_image,
paramtype2 = "facedir", paramtype2 = "facedir",
tiles = { tiles = {
def.textures[3], def.textures[3],
def.textures[3], def.textures[3],
def.textures[3], def.textures[3],
def.textures[3], def.textures[3],
def.textures[1], def.textures[1],
def.textures[1] def.textures[1]
}, },
groups = flatgroups, groups = flatgroups,
drop = "xpanes:" .. name .. "_flat", drop = "xpanes:" .. name .. "_flat",
@ -137,7 +137,11 @@ function xpanes.register_pane(name, def)
is_ground_content = false, is_ground_content = false,
sunlight_propagates = true, sunlight_propagates = true,
description = def.description, description = def.description,
tiles = {def.textures[3], def.textures[3], def.textures[1]}, tiles = {
def.textures[3],
def.textures[3],
def.textures[1]
},
groups = groups, groups = groups,
drop = "xpanes:" .. name .. "_flat", drop = "xpanes:" .. name .. "_flat",
sounds = def.sounds, sounds = def.sounds,
@ -161,7 +165,7 @@ end
xpanes.register_pane("pane", { xpanes.register_pane("pane", {
description = S("Glass Pane"), description = S("Glass Pane"),
textures = {"default_glass.png","xpanes_pane_half.png","xpanes_edge.png"}, textures = {"default_glass.png", "", "xpanes_edge.png"},
inventory_image = "default_glass.png", inventory_image = "default_glass.png",
wield_image = "default_glass.png", wield_image = "default_glass.png",
sounds = default.node_sound_glass_defaults(), sounds = default.node_sound_glass_defaults(),
@ -174,7 +178,7 @@ xpanes.register_pane("pane", {
xpanes.register_pane("obsidian_pane", { xpanes.register_pane("obsidian_pane", {
description = S("Obsidian Glass Pane"), description = S("Obsidian Glass Pane"),
textures = {"default_obsidian_glass.png","xpanes_pane_half.png","xpanes_edge_obsidian.png"}, textures = {"default_obsidian_glass.png", "", "xpanes_edge_obsidian.png"},
inventory_image = "default_obsidian_glass.png", inventory_image = "default_obsidian_glass.png",
wield_image = "default_obsidian_glass.png", wield_image = "default_obsidian_glass.png",
sounds = default.node_sound_glass_defaults(), sounds = default.node_sound_glass_defaults(),
@ -187,7 +191,7 @@ xpanes.register_pane("obsidian_pane", {
xpanes.register_pane("bar", { xpanes.register_pane("bar", {
description = S("Steel Bars"), description = S("Steel Bars"),
textures = {"xpanes_bar.png","xpanes_bar.png","xpanes_bar_top.png"}, textures = {"xpanes_bar.png", "", "xpanes_bar_top.png"},
inventory_image = "xpanes_bar.png", inventory_image = "xpanes_bar.png",
wield_image = "xpanes_bar.png", wield_image = "xpanes_bar.png",
groups = {cracky=2}, groups = {cracky=2},

View file

@ -1,6 +1,6 @@
# textdomain: xpanes # textdomain: xpanes
Glass Pane=玻璃 Glass Pane=玻璃
Obsidian Glass Pane=黑曜石玻璃 Obsidian Glass Pane=黑曜石玻璃
Steel Bars=钢筋 Steel Bars=钢筋
Steel Bar Door=钢筋门 Steel Bar Door=钢筋门
Steel Bar Trapdoor=钢筋活板门 Steel Bar Trapdoor=钢筋活板门

View file

@ -0,0 +1,6 @@
# textdomain: xpanes
Glass Pane=玻璃窗
Obsidian Glass Pane=黑曜石玻璃窗
Steel Bars=鋼筋
Steel Bar Door=鋼筋門
Steel Bar Trapdoor=鋼筋活板門

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 101 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 149 B

View file

@ -2100,7 +2100,7 @@ mts_save("large_cactus", {
-- Papyrus -- Papyrus
mts_save("papyrus", { mts_save("papyrus_on_dirt", {
size = {x = 1, y = 7, z = 1}, size = {x = 1, y = 7, z = 1},
data = { data = {
{name = "default:dirt", prob = 255, force_place = true}, {name = "default:dirt", prob = 255, force_place = true},
@ -2117,6 +2117,23 @@ mts_save("papyrus", {
}, },
}) })
mts_save("papyrus_on_dry_dirt", {
size = {x = 1, y = 7, z = 1},
data = {
{name = "default:dry_dirt", prob = 255, force_place = true},
{name = "default:dry_dirt", prob = 255, force_place = true},
{name = "default:papyrus", prob = 255},
{name = "default:papyrus", prob = 255},
{name = "default:papyrus", prob = 255},
{name = "default:papyrus", prob = 255},
{name = "default:papyrus", prob = 255},
},
yslice_prob = {
{ypos = 2, prob = 127},
{ypos = 3, prob = 127},
},
})
-- Bush -- Bush