Merge branch 'master' into newsounds
|
@ -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
|
||||||
|
|
27
game_api.txt
|
@ -93,16 +93,21 @@ For example,
|
||||||
is used to show all tools. Name is used in the sfinv page name, title is the
|
is used to show all tools. Name is used in the sfinv page name, title is the
|
||||||
human readable title.
|
human readable title.
|
||||||
|
|
||||||
`is_enabled_for` is used to check whether a player is in creative mode:
|
Creative provides `creative.is_enabled_for(name)`, which is identical in
|
||||||
|
functionality to the engine's `minetest.creative_is_enabled(name)`.
|
||||||
creative.is_enabled_for(name)
|
Its use is deprecated and it should also not be overriden.
|
||||||
|
|
||||||
Override this to allow per-player game modes.
|
|
||||||
|
|
||||||
The contents of `creative.formspec_add` is appended to every creative inventory
|
The contents of `creative.formspec_add` is appended to every creative inventory
|
||||||
page. Mods can use it to add additional formspec elements onto the default
|
page. Mods can use it to add additional formspec elements onto the default
|
||||||
creative inventory formspec to be drawn after each update.
|
creative inventory formspec to be drawn after each update.
|
||||||
|
|
||||||
|
Group overrides can be used for any registered item, node or tool. Use one of
|
||||||
|
the groups stated below to pick which category it will appear in.
|
||||||
|
|
||||||
|
node = 1 -- Appears in the Nodes category
|
||||||
|
tool = 1 -- Appears in the Tools category
|
||||||
|
craftitem = 1 -- Appears in the Items category
|
||||||
|
|
||||||
|
|
||||||
Chests API
|
Chests API
|
||||||
----------
|
----------
|
||||||
|
@ -129,12 +134,12 @@ The chests API allows the creation of chests, which have their own inventories f
|
||||||
* A table indexed by player name to keep track of who opened what chest.
|
* A table indexed by player name to keep track of who opened what chest.
|
||||||
* Key: The name of the player.
|
* Key: The name of the player.
|
||||||
* Value: A table containing information about the chest the player is looking at.
|
* Value: A table containing information about the chest the player is looking at.
|
||||||
e.g `{ pos = {1, 1, 1}, sound = null, swap = "chest" }`
|
e.g `{ pos = {1, 1, 1}, sound = null, swap = "default:chest" }`
|
||||||
|
|
||||||
`default.chest.register_chest(name, def)`
|
`default.chest.register_chest(name, def)`
|
||||||
|
|
||||||
* Registers new chest
|
* Registers new chest
|
||||||
* `name` Name for chest
|
* `name` Name for chest e.g. "default:chest"
|
||||||
* `def` See [#Chest Definition]
|
* `def` See [#Chest Definition]
|
||||||
|
|
||||||
### Chest Definition
|
### Chest Definition
|
||||||
|
@ -424,7 +429,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 +462,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
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
|
@ -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"}
|
||||||
|
|
|
@ -74,10 +74,10 @@ local function lay_down(player, pos, bed_pos, state, skip)
|
||||||
-- physics, eye_offset, etc
|
-- physics, eye_offset, etc
|
||||||
player:set_eye_offset({x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0})
|
player:set_eye_offset({x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0})
|
||||||
player:set_look_horizontal(math.random(1, 180) / 100)
|
player:set_look_horizontal(math.random(1, 180) / 100)
|
||||||
default.player_attached[name] = false
|
player_api.player_attached[name] = false
|
||||||
player:set_physics_override(1, 1, 1)
|
player:set_physics_override(1, 1, 1)
|
||||||
hud_flags.wielditem = true
|
hud_flags.wielditem = true
|
||||||
default.player_set_animation(player, "stand" , 30)
|
player_api.set_animation(player, "stand" , 30)
|
||||||
|
|
||||||
-- lay down
|
-- lay down
|
||||||
else
|
else
|
||||||
|
@ -90,12 +90,18 @@ 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
|
player_api.player_attached[name] = true
|
||||||
hud_flags.wielditem = false
|
hud_flags.wielditem = false
|
||||||
default.player_set_animation(player, "lay" , 0)
|
player_api.set_animation(player, "lay" , 0)
|
||||||
end
|
end
|
||||||
|
|
||||||
player:hud_set_flags(hud_flags)
|
player:hud_set_flags(hud_flags)
|
||||||
|
|
8
mods/beds/locale/beds.id.tr
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# textdomain: beds
|
||||||
|
Leave Bed=Tinggalkan Dipan
|
||||||
|
Good morning.=Selamat pagi.
|
||||||
|
@1 of @2 players are in bed=@1 dari @2 pemain sedang tidur
|
||||||
|
Force night skip=Paksa lewati malam
|
||||||
|
You can only sleep at night.=Anda hanya boleh tidur pada waktu malam.
|
||||||
|
Fancy Bed=Dipan Mewah
|
||||||
|
Simple Bed=Dipan Sederhana
|
9
mods/beds/locale/beds.zh_TW.tr
Normal 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.=你只能在晚上睡覺。
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# textdomain: beds
|
# textdomain: beds
|
||||||
Fancy Bed=
|
|
||||||
Simple Bed=
|
|
||||||
Leave Bed=
|
Leave Bed=
|
||||||
Good morning.=
|
Good morning.=
|
||||||
@1 of @2 players are in bed=
|
@1 of @2 players are in bed=
|
||||||
Force night skip=
|
Force night skip=
|
||||||
You can only sleep at night.=
|
You can only sleep at night.=
|
||||||
|
Fancy Bed=
|
||||||
|
Simple Bed=
|
||||||
|
|
3
mods/binoculars/locale/binoculars.id.tr
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# textdomain: binoculars
|
||||||
|
Binoculars=Binokular
|
||||||
|
Use with 'Zoom' key=Pakai dengan tombol 'Zum'
|
3
mods/binoculars/locale/binoculars.zh_TW.tr
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# textdomain: binoculars
|
||||||
|
Binoculars=望遠鏡
|
||||||
|
Use with 'Zoom' key=與“縮放”鍵一起使用
|
4
mods/boats/locale/boats.id.tr
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
# textdomain: boats
|
||||||
|
Boat cruise mode on=Mode perahu jelajah nyala
|
||||||
|
Boat cruise mode off=Mode perahu jelajah mati
|
||||||
|
Boat=Perahu
|
|
@ -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=船
|
||||||
|
|
4
mods/boats/locale/boats.zh_TW.tr
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
# textdomain: boats
|
||||||
|
Boat cruise mode on=巡航模式開啟
|
||||||
|
Boat cruise mode off=巡航模式關閉
|
||||||
|
Boat=船
|
8
mods/bones/locale/bones.id.tr
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# textdomain: bones
|
||||||
|
Bones=Tulang
|
||||||
|
@1's old bones=Tulang lama @1
|
||||||
|
@1 died at @2.=@1 mati di @2.
|
||||||
|
@1 died at @2, and dropped their inventory.=@1 mati di @2 dan meninggalkan barangnya.
|
||||||
|
@1 died at @2, and bones were placed.=@1 mati di @2 dan tulangnya diletakkan.
|
||||||
|
@1's fresh bones=Tulang segar @1
|
||||||
|
@1's bones=Tulang @1
|
8
mods/bones/locale/bones.zh_TW.tr
Normal 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的骨骸
|
|
@ -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
|
||||||
|
|
5
mods/bucket/locale/bucket.id.tr
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
# textdomain: bucket
|
||||||
|
Empty Bucket=Ember Kosong
|
||||||
|
Water Bucket=Ember Air
|
||||||
|
River Water Bucket=Ember Air Sungai
|
||||||
|
Lava Bucket=Ember Lava
|
|
@ -2,4 +2,4 @@
|
||||||
Empty Bucket=空桶
|
Empty Bucket=空桶
|
||||||
Water Bucket=水桶
|
Water Bucket=水桶
|
||||||
River Water Bucket=河水桶
|
River Water Bucket=河水桶
|
||||||
Lava Bucket=熔岩桶
|
Lava Bucket=岩浆桶
|
||||||
|
|
5
mods/bucket/locale/bucket.zh_TW.tr
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
# textdomain: bucket
|
||||||
|
Empty Bucket=空桶
|
||||||
|
Water Bucket=水桶
|
||||||
|
River Water Bucket=河水桶
|
||||||
|
Lava Bucket=岩漿桶
|
|
@ -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
|
||||||
|
|
4
mods/butterflies/locale/butterflies.id.tr
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
# textdomain: butterflies
|
||||||
|
White Butterfly=Kupu-Kupu Putih
|
||||||
|
Red Butterfly=Kupu-Kupu Merah
|
||||||
|
Violet Butterfly=Kupu-Kupu Ungu
|
4
mods/butterflies/locale/butterflies.zh_TW.tr
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
# textdomain: butterflies
|
||||||
|
White Butterfly=白蝴蝶
|
||||||
|
Red Butterfly=紅蝴蝶
|
||||||
|
Violet Butterfly=紫蝴蝶
|
|
@ -67,6 +67,7 @@ end
|
||||||
function cart_entity:on_detach_child(child)
|
function cart_entity:on_detach_child(child)
|
||||||
if child and child:get_player_name() == self.driver then
|
if child and child:get_player_name() == self.driver then
|
||||||
self.driver = nil
|
self.driver = nil
|
||||||
|
carts:manage_attachment(child, nil)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -327,11 +328,10 @@ local function rail_on_step(self, dtime)
|
||||||
if self.punched then
|
if self.punched then
|
||||||
-- Collect dropped items
|
-- Collect dropped items
|
||||||
for _, obj_ in pairs(minetest.get_objects_inside_radius(pos, 1)) do
|
for _, obj_ in pairs(minetest.get_objects_inside_radius(pos, 1)) do
|
||||||
if not obj_:is_player() and
|
local ent = obj_:get_luaentity()
|
||||||
obj_:get_luaentity() and
|
-- Careful here: physical_state and disable_physics are item-internal APIs
|
||||||
not obj_:get_luaentity().physical_state and
|
if ent and ent.name == "__builtin:item" and ent.physical_state then
|
||||||
obj_:get_luaentity().name == "__builtin:item" then
|
ent:disable_physics()
|
||||||
|
|
||||||
obj_:set_attach(self.object, "", {x=0, y=0, z=0}, {x=0, y=0, z=0})
|
obj_:set_attach(self.object, "", {x=0, y=0, z=0}, {x=0, y=0, z=0})
|
||||||
self.attached_items[#self.attached_items + 1] = obj_
|
self.attached_items[#self.attached_items + 1] = obj_
|
||||||
end
|
end
|
||||||
|
@ -389,8 +389,8 @@ minetest.register_entity("carts:cart", cart_entity)
|
||||||
|
|
||||||
minetest.register_craftitem("carts:cart", {
|
minetest.register_craftitem("carts:cart", {
|
||||||
description = S("Cart") .. "\n" .. S("(Sneak+Click to pick up)"),
|
description = S("Cart") .. "\n" .. S("(Sneak+Click to pick up)"),
|
||||||
inventory_image = minetest.inventorycube("carts_cart_top.png", "carts_cart_side.png", "carts_cart_side.png"),
|
inventory_image = minetest.inventorycube("carts_cart_top.png", "carts_cart_front.png", "carts_cart_side.png"),
|
||||||
wield_image = "carts_cart_side.png",
|
wield_image = "carts_cart_front.png",
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
on_place = function(itemstack, placer, pointed_thing)
|
||||||
local under = pointed_thing.under
|
local under = pointed_thing.under
|
||||||
local node = minetest.get_node(under)
|
local node = minetest.get_node(under)
|
||||||
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
6
mods/carts/locale/carts.id.tr
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# textdomain: carts
|
||||||
|
Rail=Rel
|
||||||
|
Powered Rail=Rel Bertenaga
|
||||||
|
Brake Rail=Rel Rem
|
||||||
|
Cart=Kereta
|
||||||
|
(Sneak+Click to pick up)=(selinap + klik untuk ambil)
|
|
@ -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=制动铁轨
|
||||||
|
|
6
mods/carts/locale/carts.zh_TW.tr
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# textdomain: carts
|
||||||
|
Cart=礦車
|
||||||
|
(Sneak+Click to pick up)=(潛行+單擊以撿起)
|
||||||
|
Rail=鐵軌
|
||||||
|
Powered Rail=動力鐵軌
|
||||||
|
Brake Rail=制動鐵軌
|
|
@ -1,6 +1,6 @@
|
||||||
# textdomain: carts
|
# textdomain: carts
|
||||||
Cart=
|
|
||||||
(Sneak+Click to pick up)=
|
|
||||||
Rail=
|
Rail=
|
||||||
Powered Rail=
|
Powered Rail=
|
||||||
Brake Rail=
|
Brake Rail=
|
||||||
|
Cart=
|
||||||
|
(Sneak+Click to pick up)=
|
||||||
|
|
|
@ -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
|
||||||
|
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 684 B After Width: | Height: | Size: 456 B |
Before Width: | Height: | Size: 618 B After Width: | Height: | Size: 436 B |
Before Width: | Height: | Size: 660 B After Width: | Height: | Size: 494 B |
Before Width: | Height: | Size: 698 B After Width: | Height: | Size: 434 B |
|
@ -27,16 +27,25 @@ minetest.register_privilege("creative", {
|
||||||
on_revoke = update_sfinv,
|
on_revoke = update_sfinv,
|
||||||
})
|
})
|
||||||
|
|
||||||
local creative_mode_cache = minetest.settings:get_bool("creative_mode")
|
-- Override the engine's creative mode function
|
||||||
|
local old_is_creative_enabled = minetest.is_creative_enabled
|
||||||
|
|
||||||
|
function minetest.is_creative_enabled(name)
|
||||||
|
if name == "" then
|
||||||
|
return old_is_creative_enabled(name)
|
||||||
|
end
|
||||||
|
return minetest.check_player_privs(name, {creative = true}) or
|
||||||
|
old_is_creative_enabled(name)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- For backwards compatibility:
|
||||||
function creative.is_enabled_for(name)
|
function creative.is_enabled_for(name)
|
||||||
return creative_mode_cache or
|
return minetest.is_creative_enabled(name)
|
||||||
minetest.check_player_privs(name, {creative = true})
|
|
||||||
end
|
end
|
||||||
|
|
||||||
dofile(minetest.get_modpath("creative") .. "/inventory.lua")
|
dofile(minetest.get_modpath("creative") .. "/inventory.lua")
|
||||||
|
|
||||||
if creative_mode_cache then
|
if minetest.is_creative_enabled("") then
|
||||||
-- Dig time is modified according to difference (leveldiff) between tool
|
-- Dig time is modified according to difference (leveldiff) between tool
|
||||||
-- 'maxlevel' and node 'level'. Digtime is divided by the larger of
|
-- 'maxlevel' and node 'level'. Digtime is divided by the larger of
|
||||||
-- leveldiff and 1.
|
-- leveldiff and 1.
|
||||||
|
|
|
@ -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, {
|
||||||
|
@ -59,6 +61,7 @@ function creative.init_creative_inventory(player)
|
||||||
return player_inventory[player_name]
|
return player_inventory[player_name]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local NO_MATCH = 999
|
||||||
local function match(s, filter)
|
local function match(s, filter)
|
||||||
if filter == "" then
|
if filter == "" then
|
||||||
return 0
|
return 0
|
||||||
|
@ -66,7 +69,15 @@ local function match(s, filter)
|
||||||
if s:lower():find(filter, 1, true) then
|
if s:lower():find(filter, 1, true) then
|
||||||
return #s - #filter
|
return #s - #filter
|
||||||
end
|
end
|
||||||
return nil
|
return NO_MATCH
|
||||||
|
end
|
||||||
|
|
||||||
|
local function description(def, lang_code)
|
||||||
|
local s = def.description
|
||||||
|
if lang_code then
|
||||||
|
s = minetest.get_translated_string(lang_code, s)
|
||||||
|
end
|
||||||
|
return s:gsub("\n.*", "") -- First line only
|
||||||
end
|
end
|
||||||
|
|
||||||
function creative.update_creative_inventory(player_name, tab_content)
|
function creative.update_creative_inventory(player_name, tab_content)
|
||||||
|
@ -74,15 +85,34 @@ 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 lang
|
||||||
|
local player_info = minetest.get_player_information(player_name)
|
||||||
|
if player_info and player_info.lang_code ~= "" then
|
||||||
|
lang = player_info.lang_code
|
||||||
|
end
|
||||||
|
|
||||||
local creative_list = {}
|
local creative_list = {}
|
||||||
local order = {}
|
local order = {}
|
||||||
for name, def in pairs(items) do
|
for name, def in pairs(items) do
|
||||||
local m = match(def.description, inv.filter) or match(def.name, inv.filter)
|
local m = match(description(def), inv.filter)
|
||||||
if m then
|
if m > 0 then
|
||||||
|
m = math.min(m, match(description(def, lang), inv.filter))
|
||||||
|
end
|
||||||
|
if m > 0 then
|
||||||
|
m = math.min(m, match(name, inv.filter))
|
||||||
|
end
|
||||||
|
|
||||||
|
if m < NO_MATCH then
|
||||||
creative_list[#creative_list+1] = name
|
creative_list[#creative_list+1] = name
|
||||||
-- Sort by description length first so closer matches appear earlier
|
-- Sort by match value first so closer matches appear earlier
|
||||||
order[name] = string.format("%02d", m) .. name
|
order[name] = string.format("%02d", m) .. name
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -119,8 +149,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 +172,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 +190,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
|
||||||
|
@ -194,10 +221,30 @@ function creative.register_tab(name, title, items)
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Sort registered items
|
||||||
|
local registered_nodes = {}
|
||||||
|
local registered_tools = {}
|
||||||
|
local registered_craftitems = {}
|
||||||
|
|
||||||
|
minetest.register_on_mods_loaded(function()
|
||||||
|
for name, def in pairs(minetest.registered_items) do
|
||||||
|
local group = def.groups or {}
|
||||||
|
|
||||||
|
local nogroup = not (group.node or group.tool or group.craftitem)
|
||||||
|
if group.node or (nogroup and minetest.registered_nodes[name]) then
|
||||||
|
registered_nodes[name] = def
|
||||||
|
elseif group.tool or (nogroup and minetest.registered_tools[name]) then
|
||||||
|
registered_tools[name] = def
|
||||||
|
elseif group.craftitem or (nogroup and minetest.registered_craftitems[name]) then
|
||||||
|
registered_craftitems[name] = def
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
creative.register_tab("all", S("All"), minetest.registered_items)
|
creative.register_tab("all", S("All"), minetest.registered_items)
|
||||||
creative.register_tab("nodes", S("Nodes"), minetest.registered_nodes)
|
creative.register_tab("nodes", S("Nodes"), registered_nodes)
|
||||||
creative.register_tab("tools", S("Tools"), minetest.registered_tools)
|
creative.register_tab("tools", S("Tools"), registered_tools)
|
||||||
creative.register_tab("craftitems", S("Items"), minetest.registered_craftitems)
|
creative.register_tab("craftitems", S("Items"), registered_craftitems)
|
||||||
|
|
||||||
local old_homepage_name = sfinv.get_homepage_name
|
local old_homepage_name = sfinv.get_homepage_name
|
||||||
function sfinv.get_homepage_name(player)
|
function sfinv.get_homepage_name(player)
|
||||||
|
|
10
mods/creative/locale/creative.id.tr
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
# textdomain: creative
|
||||||
|
Search=Cari
|
||||||
|
Reset=Atur ulang
|
||||||
|
Previous page=Halaman sebelumnya
|
||||||
|
Next page=Halaman selanjutnya
|
||||||
|
All=Semua
|
||||||
|
Nodes=Nodus
|
||||||
|
Tools=Perkakas
|
||||||
|
Items=Barang
|
||||||
|
Allow player to use creative inventory=Bolehkan pemain memakai inventaris kreatif
|
10
mods/creative/locale/creative.zh_TW.tr
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
# textdomain: creative
|
||||||
|
Allow player to use creative inventory=允許玩家使用創造模式物品欄
|
||||||
|
Search=搜索
|
||||||
|
Reset=重置
|
||||||
|
Previous page=上一頁
|
||||||
|
Next page=下一頁
|
||||||
|
All=所有
|
||||||
|
Nodes=節點
|
||||||
|
Tools=工具
|
||||||
|
Items=物品
|
|
@ -1,5 +1,4 @@
|
||||||
# textdomain: creative
|
# textdomain: creative
|
||||||
Allow player to use creative inventory=
|
|
||||||
Search=
|
Search=
|
||||||
Reset=
|
Reset=
|
||||||
Previous page=
|
Previous page=
|
||||||
|
@ -8,3 +7,4 @@ All=
|
||||||
Nodes=
|
Nodes=
|
||||||
Tools=
|
Tools=
|
||||||
Items=
|
Items=
|
||||||
|
Allow player to use creative inventory=
|
||||||
|
|
|
@ -151,7 +151,6 @@ BlockMen (CC BY-SA 3.0):
|
||||||
default_chest_top.png
|
default_chest_top.png
|
||||||
default_mineral_mese.png
|
default_mineral_mese.png
|
||||||
default_meselamp.png
|
default_meselamp.png
|
||||||
bubble.png
|
|
||||||
gui_formbg.png
|
gui_formbg.png
|
||||||
gui_furnace_arrow_bg.png
|
gui_furnace_arrow_bg.png
|
||||||
gui_furnace_arrow_fg.png
|
gui_furnace_arrow_fg.png
|
||||||
|
@ -196,9 +195,6 @@ Gambit (CC BY-SA 3.0):
|
||||||
asl97 (CC BY-SA 3.0):
|
asl97 (CC BY-SA 3.0):
|
||||||
default_ice.png
|
default_ice.png
|
||||||
|
|
||||||
KevDoy (CC BY-SA 3.0):
|
|
||||||
heart.png
|
|
||||||
|
|
||||||
Pithydon (CC BY-SA 3.0)
|
Pithydon (CC BY-SA 3.0)
|
||||||
default_coral_brown.png
|
default_coral_brown.png
|
||||||
default_coral_orange.png
|
default_coral_orange.png
|
||||||
|
@ -253,6 +249,11 @@ Topywo (CC BY-SA 3.0)
|
||||||
|
|
||||||
Extex101 (CC BY-SA 3.0)
|
Extex101 (CC BY-SA 3.0)
|
||||||
default_large_cactus_seedling.png
|
default_large_cactus_seedling.png
|
||||||
|
default_dry_shrub.png -- Derived from the original texture by celeron55
|
||||||
|
|
||||||
|
An0n3m0us (CC BY-SA 3.0):
|
||||||
|
heart.png -- Derived from a texture by KevDoy (CC BY-SA 3.0)
|
||||||
|
bubble.png -- Derived from a texture by BlockMen (CC BY-SA 3.0)
|
||||||
|
|
||||||
|
|
||||||
Sounds
|
Sounds
|
||||||
|
@ -357,6 +358,10 @@ Angel_Perez_Grandi (CC BY 3.0):
|
||||||
https://freesound.org/people/Angel_Perez_Grandi/sounds/49190/
|
https://freesound.org/people/Angel_Perez_Grandi/sounds/49190/
|
||||||
default_ice_dug.ogg
|
default_ice_dug.ogg
|
||||||
|
|
||||||
|
iankath (CC0 1.0)
|
||||||
|
https://freesound.org/people/iankath/sounds/173991/
|
||||||
|
default_furnace_active.ogg
|
||||||
|
|
||||||
|
|
||||||
Models
|
Models
|
||||||
------
|
------
|
||||||
|
|
|
@ -44,9 +44,10 @@ function default.chest.chest_lid_close(pn)
|
||||||
end
|
end
|
||||||
|
|
||||||
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 = 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 = {}
|
||||||
|
@ -75,7 +76,8 @@ minetest.register_on_leaveplayer(function(player)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
function default.chest.register_chest(name, d)
|
function default.chest.register_chest(prefixed_name, d)
|
||||||
|
local name = prefixed_name:sub(1,1) == ':' and prefixed_name:sub(2,-1) or prefixed_name
|
||||||
local def = table.copy(d)
|
local def = table.copy(d)
|
||||||
def.drawtype = "mesh"
|
def.drawtype = "mesh"
|
||||||
def.visual = "mesh"
|
def.visual = "mesh"
|
||||||
|
@ -128,10 +130,10 @@ 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 = name .. "_open",
|
||||||
param2 = node.param2 })
|
param2 = node.param2 })
|
||||||
end
|
end
|
||||||
minetest.after(0.2, minetest.show_formspec,
|
minetest.after(0.2, minetest.show_formspec,
|
||||||
|
@ -199,10 +201,10 @@ 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 = name .. "_open",
|
||||||
param2 = node.param2 })
|
param2 = node.param2 })
|
||||||
end
|
end
|
||||||
minetest.after(0.2, minetest.show_formspec,
|
minetest.after(0.2, minetest.show_formspec,
|
||||||
|
@ -214,7 +216,7 @@ function default.chest.register_chest(name, d)
|
||||||
def.on_blast = function(pos)
|
def.on_blast = function(pos)
|
||||||
local drops = {}
|
local drops = {}
|
||||||
default.get_inventory_drops(pos, "main", drops)
|
default.get_inventory_drops(pos, "main", drops)
|
||||||
drops[#drops+1] = "default:" .. name
|
drops[#drops+1] = name
|
||||||
minetest.remove_node(pos)
|
minetest.remove_node(pos)
|
||||||
return drops
|
return drops
|
||||||
end
|
end
|
||||||
|
@ -247,7 +249,7 @@ function default.chest.register_chest(name, d)
|
||||||
def_opened.tiles[i].backface_culling = true
|
def_opened.tiles[i].backface_culling = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
def_opened.drop = "default:" .. name
|
def_opened.drop = name
|
||||||
def_opened.groups.not_in_creative_inventory = 1
|
def_opened.groups.not_in_creative_inventory = 1
|
||||||
def_opened.selection_box = {
|
def_opened.selection_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
|
@ -264,14 +266,15 @@ function default.chest.register_chest(name, d)
|
||||||
def_closed.tiles[5] = def.tiles[3] -- drawtype to make them match the mesh
|
def_closed.tiles[5] = def.tiles[3] -- drawtype to make them match the mesh
|
||||||
def_closed.tiles[3] = def.tiles[3].."^[transformFX"
|
def_closed.tiles[3] = def.tiles[3].."^[transformFX"
|
||||||
|
|
||||||
minetest.register_node("default:" .. name, def_closed)
|
minetest.register_node(prefixed_name, def_closed)
|
||||||
minetest.register_node("default:" .. name .. "_open", def_opened)
|
minetest.register_node(prefixed_name .. "_open", def_opened)
|
||||||
|
|
||||||
-- convert old chests to this new variant
|
-- convert old chests to this new variant
|
||||||
|
if name == "default:chest" or name == "default:chest_locked" then
|
||||||
minetest.register_lbm({
|
minetest.register_lbm({
|
||||||
label = "update chests to opening chests",
|
label = "update chests to opening chests",
|
||||||
name = "default:upgrade_" .. name .. "_v2",
|
name = "default:upgrade_" .. name:sub(9,-1) .. "_v2",
|
||||||
nodenames = {"default:" .. name},
|
nodenames = {name},
|
||||||
action = function(pos, node)
|
action = function(pos, node)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
meta:set_string("formspec", nil)
|
meta:set_string("formspec", nil)
|
||||||
|
@ -285,8 +288,9 @@ function default.chest.register_chest(name, d)
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
default.chest.register_chest("chest", {
|
default.chest.register_chest("default:chest", {
|
||||||
description = S("Chest"),
|
description = S("Chest"),
|
||||||
tiles = {
|
tiles = {
|
||||||
"default_chest_top.png",
|
"default_chest_top.png",
|
||||||
|
@ -302,7 +306,7 @@ default.chest.register_chest("chest", {
|
||||||
groups = {choppy = 2, oddly_breakable_by_hand = 2},
|
groups = {choppy = 2, oddly_breakable_by_hand = 2},
|
||||||
})
|
})
|
||||||
|
|
||||||
default.chest.register_chest("chest_locked", {
|
default.chest.register_chest("default:chest_locked", {
|
||||||
description = S("Locked Chest"),
|
description = S("Locked Chest"),
|
||||||
tiles = {
|
tiles = {
|
||||||
"default_chest_top.png",
|
"default_chest_top.png",
|
||||||
|
|
|
@ -300,15 +300,6 @@ minetest.register_craft({
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = "default:mese_post_light 3",
|
|
||||||
recipe = {
|
|
||||||
{"", "default:glass", ""},
|
|
||||||
{"default:mese_crystal", "default:mese_crystal", "default:mese_crystal"},
|
|
||||||
{"", "group:wood", ""},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = "default:obsidian",
|
output = "default:obsidian",
|
||||||
recipe = {
|
recipe = {
|
||||||
|
|
|
@ -155,7 +155,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
|
||||||
|
@ -224,7 +224,12 @@ end
|
||||||
function default.grow_papyrus(pos, node)
|
function default.grow_papyrus(pos, node)
|
||||||
pos.y = pos.y - 1
|
pos.y = pos.y - 1
|
||||||
local name = minetest.get_node(pos).name
|
local name = minetest.get_node(pos).name
|
||||||
if name ~= "default:dirt_with_grass" and name ~= "default:dirt" then
|
if name ~= "default:dirt" and
|
||||||
|
name ~= "default:dirt_with_grass" and
|
||||||
|
name ~= "default:dirt_with_dry_grass" and
|
||||||
|
name ~= "default:dirt_with_rainforest_litter" and
|
||||||
|
name ~= "default:dry_dirt" and
|
||||||
|
name ~= "default:dry_dirt_with_dry_grass" then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
if not minetest.find_node_near(pos, 3, {"group:water"}) then
|
if not minetest.find_node_near(pos, 3, {"group:water"}) then
|
||||||
|
@ -261,7 +266,17 @@ minetest.register_abm({
|
||||||
minetest.register_abm({
|
minetest.register_abm({
|
||||||
label = "Grow papyrus",
|
label = "Grow papyrus",
|
||||||
nodenames = {"default:papyrus"},
|
nodenames = {"default:papyrus"},
|
||||||
neighbors = {"default:dirt", "default:dirt_with_grass"},
|
-- Grows on the dirt and surface dirt nodes of the biomes papyrus appears in,
|
||||||
|
-- including the old savanna nodes.
|
||||||
|
-- 'default:dirt_with_grass' is here only because it was allowed before.
|
||||||
|
neighbors = {
|
||||||
|
"default:dirt",
|
||||||
|
"default:dirt_with_grass",
|
||||||
|
"default:dirt_with_dry_grass",
|
||||||
|
"default:dirt_with_rainforest_litter",
|
||||||
|
"default:dry_dirt",
|
||||||
|
"default:dry_dirt_with_dry_grass",
|
||||||
|
},
|
||||||
interval = 14,
|
interval = 14,
|
||||||
chance = 71,
|
chance = 71,
|
||||||
action = function(...)
|
action = function(...)
|
||||||
|
@ -420,6 +435,51 @@ function default.register_fence_rail(name, def)
|
||||||
minetest.register_node(name, def)
|
minetest.register_node(name, def)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Mese post registration helper
|
||||||
|
--
|
||||||
|
|
||||||
|
function default.register_mesepost(name, def)
|
||||||
|
minetest.register_craft({
|
||||||
|
output = name .. " 4",
|
||||||
|
recipe = {
|
||||||
|
{'', 'default:glass', ''},
|
||||||
|
{'default:mese_crystal', 'default:mese_crystal', 'default:mese_crystal'},
|
||||||
|
{'', def.material, ''},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
local post_texture = def.texture .. "^default_mese_post_light_side.png^[makealpha:0,0,0"
|
||||||
|
local post_texture_dark = def.texture .. "^default_mese_post_light_side_dark.png^[makealpha:0,0,0"
|
||||||
|
-- Allow almost everything to be overridden
|
||||||
|
local default_fields = {
|
||||||
|
wield_image = post_texture,
|
||||||
|
drawtype = "nodebox",
|
||||||
|
node_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-2 / 16, -8 / 16, -2 / 16, 2 / 16, 8 / 16, 2 / 16},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
paramtype = "light",
|
||||||
|
tiles = {def.texture, def.texture, post_texture_dark, post_texture_dark, post_texture, post_texture},
|
||||||
|
light_source = default.LIGHT_MAX,
|
||||||
|
sunlight_propagates = true,
|
||||||
|
is_ground_content = false,
|
||||||
|
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
}
|
||||||
|
for k, v in pairs(default_fields) do
|
||||||
|
if def[k] == nil then
|
||||||
|
def[k] = v
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def.texture = nil
|
||||||
|
def.material = nil
|
||||||
|
|
||||||
|
minetest.register_node(name, def)
|
||||||
|
end
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Leafdecay
|
-- Leafdecay
|
||||||
|
@ -447,6 +507,9 @@ local function leafdecay_after_destruct(pos, oldnode, def)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local movement_gravity = tonumber(
|
||||||
|
minetest.settings:get("movement_gravity")) or 9.81
|
||||||
|
|
||||||
local function leafdecay_on_timer(pos, def)
|
local function leafdecay_on_timer(pos, def)
|
||||||
if minetest.find_node_near(pos, def.radius, def.trunks) then
|
if minetest.find_node_near(pos, def.radius, def.trunks) then
|
||||||
return false
|
return false
|
||||||
|
@ -473,6 +536,21 @@ local function leafdecay_on_timer(pos, def)
|
||||||
|
|
||||||
minetest.remove_node(pos)
|
minetest.remove_node(pos)
|
||||||
minetest.check_for_falling(pos)
|
minetest.check_for_falling(pos)
|
||||||
|
|
||||||
|
-- spawn a few particles for the removed node
|
||||||
|
minetest.add_particlespawner({
|
||||||
|
amount = 8,
|
||||||
|
time = 0.001,
|
||||||
|
minpos = vector.subtract(pos, {x=0.5, y=0.5, z=0.5}),
|
||||||
|
maxpos = vector.add(pos, {x=0.5, y=0.5, z=0.5}),
|
||||||
|
minvel = vector.new(-0.5, -1, -0.5),
|
||||||
|
maxvel = vector.new(0.5, 0, 0.5),
|
||||||
|
minacc = vector.new(0, -movement_gravity, 0),
|
||||||
|
maxacc = vector.new(0, -movement_gravity, 0),
|
||||||
|
minsize = 0,
|
||||||
|
maxsize = 0,
|
||||||
|
node = node,
|
||||||
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
function default.register_leafdecay(def)
|
function default.register_leafdecay(def)
|
||||||
|
@ -497,7 +575,7 @@ end
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Convert dirt to something that fits the environment
|
-- Convert default:dirt to something that fits the environment
|
||||||
--
|
--
|
||||||
|
|
||||||
minetest.register_abm({
|
minetest.register_abm({
|
||||||
|
@ -506,6 +584,7 @@ minetest.register_abm({
|
||||||
neighbors = {
|
neighbors = {
|
||||||
"air",
|
"air",
|
||||||
"group:grass",
|
"group:grass",
|
||||||
|
"group:dry_grass",
|
||||||
"default:snow",
|
"default:snow",
|
||||||
},
|
},
|
||||||
interval = 6,
|
interval = 6,
|
||||||
|
@ -534,6 +613,8 @@ minetest.register_abm({
|
||||||
minetest.set_node(pos, {name = "default:dirt_with_snow"})
|
minetest.set_node(pos, {name = "default:dirt_with_snow"})
|
||||||
elseif minetest.get_item_group(name, "grass") ~= 0 then
|
elseif minetest.get_item_group(name, "grass") ~= 0 then
|
||||||
minetest.set_node(pos, {name = "default:dirt_with_grass"})
|
minetest.set_node(pos, {name = "default:dirt_with_grass"})
|
||||||
|
elseif minetest.get_item_group(name, "dry_grass") ~= 0 then
|
||||||
|
minetest.set_node(pos, {name = "default:dirt_with_dry_grass"})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
|
@ -113,6 +113,9 @@ local function furnace_node_timer(pos, elapsed)
|
||||||
local srclist, fuellist
|
local srclist, fuellist
|
||||||
local dst_full = false
|
local dst_full = false
|
||||||
|
|
||||||
|
local timer_elapsed = meta:get_int("timer_elapsed") or 0
|
||||||
|
meta:set_int("timer_elapsed", timer_elapsed + 1)
|
||||||
|
|
||||||
local cookable, cooked
|
local cookable, cooked
|
||||||
local fuel
|
local fuel
|
||||||
|
|
||||||
|
@ -154,6 +157,9 @@ local function furnace_node_timer(pos, elapsed)
|
||||||
else
|
else
|
||||||
dst_full = true
|
dst_full = true
|
||||||
end
|
end
|
||||||
|
-- Play cooling sound
|
||||||
|
minetest.sound_play("default_cool_lava",
|
||||||
|
{pos = pos, max_hear_distance = 16, gain = 0.1}, true)
|
||||||
else
|
else
|
||||||
-- Item could not be cooked: probably missing fuel
|
-- Item could not be cooked: probably missing fuel
|
||||||
update = true
|
update = true
|
||||||
|
@ -237,6 +243,12 @@ local function furnace_node_timer(pos, elapsed)
|
||||||
swap_node(pos, "default:furnace_active")
|
swap_node(pos, "default:furnace_active")
|
||||||
-- make sure timer restarts automatically
|
-- make sure timer restarts automatically
|
||||||
result = true
|
result = true
|
||||||
|
|
||||||
|
-- Play sound every 5 seconds while the furnace is active
|
||||||
|
if timer_elapsed == 0 or (timer_elapsed+1) % 5 == 0 then
|
||||||
|
minetest.sound_play("default_furnace_active",
|
||||||
|
{pos = pos, max_hear_distance = 16, gain = 0.5}, true)
|
||||||
|
end
|
||||||
else
|
else
|
||||||
if fuellist and not fuellist[1]:is_empty() then
|
if fuellist and not fuellist[1]:is_empty() then
|
||||||
fuel_state = S("@1%", 0)
|
fuel_state = S("@1%", 0)
|
||||||
|
@ -245,6 +257,7 @@ local function furnace_node_timer(pos, elapsed)
|
||||||
swap_node(pos, "default:furnace")
|
swap_node(pos, "default:furnace")
|
||||||
-- stop timer on the inactive furnace
|
-- stop timer on the inactive furnace
|
||||||
minetest.get_node_timer(pos):stop()
|
minetest.get_node_timer(pos):stop()
|
||||||
|
meta:set_int("timer_elapsed", 0)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -15,12 +15,12 @@ local item = {
|
||||||
|
|
||||||
burn_up = function(self)
|
burn_up = function(self)
|
||||||
-- disappear in a smoke puff
|
-- disappear in a smoke puff
|
||||||
self.object:remove()
|
|
||||||
local p = self.object:get_pos()
|
local p = self.object:get_pos()
|
||||||
|
self.object:remove()
|
||||||
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,
|
||||||
|
@ -39,16 +39,20 @@ local item = {
|
||||||
})
|
})
|
||||||
end,
|
end,
|
||||||
|
|
||||||
on_step = function(self, dtime)
|
on_step = function(self, dtime, ...)
|
||||||
builtin_item.on_step(self, dtime)
|
builtin_item.on_step(self, dtime, ...)
|
||||||
|
|
||||||
if self.flammable then
|
if self.flammable then
|
||||||
-- flammable, check for igniters
|
-- flammable, check for igniters every 10 s
|
||||||
self.ignite_timer = (self.ignite_timer or 0) + dtime
|
self.ignite_timer = (self.ignite_timer or 0) + dtime
|
||||||
if self.ignite_timer > 10 then
|
if self.ignite_timer > 10 then
|
||||||
self.ignite_timer = 0
|
self.ignite_timer = 0
|
||||||
|
|
||||||
local node = minetest.get_node_or_nil(self.object:get_pos())
|
local pos = self.object:get_pos()
|
||||||
|
if pos == nil then
|
||||||
|
return -- object already deleted
|
||||||
|
end
|
||||||
|
local node = minetest.get_node_or_nil(pos)
|
||||||
if not node then
|
if not node then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
|
@ -51,6 +51,7 @@ Copyright (C) 2010-2018:
|
||||||
Mossmanikin
|
Mossmanikin
|
||||||
random-geek
|
random-geek
|
||||||
Extex101
|
Extex101
|
||||||
|
An0n3m0us
|
||||||
|
|
||||||
You are free to:
|
You are free to:
|
||||||
Share — copy and redistribute the material in any medium or format.
|
Share — copy and redistribute the material in any medium or format.
|
||||||
|
|
|
@ -62,12 +62,12 @@ Obsidian Block=Obsidianblock
|
||||||
Dirt=Erde
|
Dirt=Erde
|
||||||
Dirt with Grass=Erde mit Gras
|
Dirt with Grass=Erde mit Gras
|
||||||
Dirt with Grass and Footsteps=Erde mit Gras und Fußstapfen
|
Dirt with Grass and Footsteps=Erde mit Gras und Fußstapfen
|
||||||
Dirt with Dry Grass=Erde mit trockenem Gras
|
Dirt with Savanna Grass=Erde mit Savannengras
|
||||||
Dirt with Snow=Erde mit Schnee
|
Dirt with Snow=Erde mit Schnee
|
||||||
Dirt with Rainforest Litter=Erde mit Regenwaldboden
|
Dirt with Rainforest Litter=Erde mit Regenwaldboden
|
||||||
Dirt with Coniferous Litter=Erde mit Nadelwaldboden
|
Dirt with Coniferous Litter=Erde mit Nadelwaldboden
|
||||||
Dry Dirt=Trockene Erde
|
Savanna Dirt=Savannenerde
|
||||||
Dry Dirt with Dry Grass=Trockene Erde mit trockenem Gras
|
Savanna Dirt with Savanna Grass=Savannenerde mit Savannengras
|
||||||
Permafrost=Permafrost
|
Permafrost=Permafrost
|
||||||
Permafrost with Stones=Permafrost mit Steinen
|
Permafrost with Stones=Permafrost mit Steinen
|
||||||
Permafrost with Moss=Permafrost mit Moos
|
Permafrost with Moss=Permafrost mit Moos
|
||||||
|
@ -124,7 +124,7 @@ Papyrus=Papyrus
|
||||||
Dry Shrub=Trockener Busch
|
Dry Shrub=Trockener Busch
|
||||||
Jungle Grass=Dschungelgras
|
Jungle Grass=Dschungelgras
|
||||||
Grass=Gras
|
Grass=Gras
|
||||||
Dry Grass=Trockenes Gras
|
Savanna Grass=Savannengras
|
||||||
Fern=Farn
|
Fern=Farn
|
||||||
Marram Grass=Dünengras
|
Marram Grass=Dünengras
|
||||||
Bush Stem=Buschstamm
|
Bush Stem=Buschstamm
|
||||||
|
|
211
mods/default/locale/default.id.tr
Normal file
|
@ -0,0 +1,211 @@
|
||||||
|
# textdomain: default
|
||||||
|
Stone=Batu
|
||||||
|
Cobblestone=Bongkahan Batu
|
||||||
|
Stone Brick=Tembok Batu
|
||||||
|
Stone Block=Balok Batu
|
||||||
|
Mossy Cobblestone=Bongkahan Batu Berlumut
|
||||||
|
Desert Stone=Batu Gurun
|
||||||
|
Desert Cobblestone=Bongkahan Batu Gurun
|
||||||
|
Desert Stone Brick=Tembok Batu Gurun
|
||||||
|
Desert Stone Block=Balok Batu Gurun
|
||||||
|
Sandstone=Batu Pasir
|
||||||
|
Sandstone Brick=Tembok Batu Pasir
|
||||||
|
Sandstone Block=Balok Batu Pasir
|
||||||
|
Desert Sandstone=Batu Pasir Gurun
|
||||||
|
Desert Sandstone Brick=Tembok Batu Pasir Gurun
|
||||||
|
Desert Sandstone Block=Balok Batu Pasir Gurun
|
||||||
|
Silver Sandstone=Batu Pasir Perak
|
||||||
|
Silver Sandstone Brick=Tembok Batu Pasir Perak
|
||||||
|
Silver Sandstone Block=Balok Batu Pasir Perak
|
||||||
|
Obsidian=Obsidian
|
||||||
|
Obsidian Brick=Tembok Obsidian
|
||||||
|
Obsidian Block=Balok Obsidian
|
||||||
|
Dirt=Tanah
|
||||||
|
Dirt with Grass=Tanah Berumput
|
||||||
|
Dirt with Grass and Footsteps=Tanah Berumput dan Tapak Kaki
|
||||||
|
Dirt with Savanna Grass=Tanah Berumput Sabana
|
||||||
|
Dirt with Snow=Tanah Bersalju
|
||||||
|
Dirt with Rainforest Litter=Tanah Berserasah Hutan Hujan
|
||||||
|
Dirt with Coniferous Litter=Tanah Berserasah Hutan Konifer
|
||||||
|
Savanna Dirt=Tanah Sabana
|
||||||
|
Savanna Dirt with Savanna Grass=Tanah Sabana Berumput Sabana
|
||||||
|
Permafrost=Ibun Abadi
|
||||||
|
Permafrost with Stones=Ibun Abadi Berbatu
|
||||||
|
Permafrost with Moss=Ibun Abadi Berlumut
|
||||||
|
Sand=Pasir
|
||||||
|
Desert Sand=Pasir Gurun
|
||||||
|
Silver Sand=Pasir Perak
|
||||||
|
Gravel=Kerikil
|
||||||
|
Clay=Semen
|
||||||
|
Snow=Salju
|
||||||
|
Snow Block=Balok Salju
|
||||||
|
Ice=Es
|
||||||
|
Cave Ice=Es Gua
|
||||||
|
Apple Tree=Pohon Apel
|
||||||
|
Apple Wood Planks=Papan Kayu Pohon Apel
|
||||||
|
Apple Tree Sapling=Bibit Apel
|
||||||
|
Apple Tree Leaves=Daun Pohon Apel
|
||||||
|
Apple=Apel
|
||||||
|
Apple Marker=Penanda Apel
|
||||||
|
Jungle Tree=Pohon Hutan Rimba
|
||||||
|
Jungle Wood Planks=Papan Kayu Pohon Rimba
|
||||||
|
Jungle Tree Leaves=Daun Pohon Rimba
|
||||||
|
Jungle Tree Sapling=Bibit Pohon Rimba
|
||||||
|
Emergent Jungle Tree Sapling=Bibit Bertumbuh Pohon Rimba
|
||||||
|
Pine Tree=Pohon Pinus
|
||||||
|
Pine Wood Planks=Papan Kayu Pinus
|
||||||
|
Pine Needles=Daun Pinus
|
||||||
|
Pine Tree Sapling=Bibit Pinus
|
||||||
|
Acacia Tree=Pohon Akasia
|
||||||
|
Acacia Wood Planks=Papan Kayu Akasia
|
||||||
|
Acacia Tree Leaves=Daun Akasia
|
||||||
|
Acacia Tree Sapling=Bibit Akasia
|
||||||
|
Aspen Tree=Pohon Aspen
|
||||||
|
Aspen Wood Planks=Papan Kayu Aspen
|
||||||
|
Aspen Tree Leaves=Daun Aspen
|
||||||
|
Aspen Tree Sapling=Bibit Aspen
|
||||||
|
Coal Ore=Bijih Batu Bara
|
||||||
|
Coal Block=Balok Batu Bara
|
||||||
|
Iron Ore=Biji Besi
|
||||||
|
Steel Block=Balok Baja
|
||||||
|
Copper Ore=Bijih Tembaga
|
||||||
|
Copper Block=Balok Tembaga
|
||||||
|
Tin Ore=Bijih Timah
|
||||||
|
Tin Block=Balok Timah
|
||||||
|
Bronze Block=Balok Perunggu
|
||||||
|
Mese Ore=Bijih Mese
|
||||||
|
Mese Block=Balok Mese
|
||||||
|
Gold Ore=Bijih Emas
|
||||||
|
Gold Block=Balok Emas
|
||||||
|
Diamond Ore=Bijih Berlian
|
||||||
|
Diamond Block=Balok Berlian
|
||||||
|
Cactus=Kaktus
|
||||||
|
Large Cactus Seedling=Bibit Kaktus Besar
|
||||||
|
Papyrus=Papirus
|
||||||
|
Dry Shrub=Semak Kering
|
||||||
|
Jungle Grass=Rumput Rimba
|
||||||
|
Grass=Rumput
|
||||||
|
Savanna Grass=Rumput Sabana
|
||||||
|
Fern=Pakis
|
||||||
|
Marram Grass=Rumput Pantai
|
||||||
|
Bush Stem=Batang Semak
|
||||||
|
Bush Leaves=Daun Semak
|
||||||
|
Bush Sapling=Bibit Semak
|
||||||
|
Blueberry Bush Leaves with Berries=Daun Bluberi Berbuah
|
||||||
|
Blueberry Bush Leaves=Daun Bluberi
|
||||||
|
Blueberry Bush Sapling=Bibit Bluberi
|
||||||
|
Acacia Bush Stem=Batang Semak Akasia
|
||||||
|
Acacia Bush Leaves=Daun Semak Akasia
|
||||||
|
Acacia Bush Sapling=Bibit Semak Akasia
|
||||||
|
Pine Bush Stem=Batang Semak Pinus
|
||||||
|
Pine Bush Needles=Daun Semak Pinus
|
||||||
|
Pine Bush Sapling=Bibit Semak Pinus
|
||||||
|
Kelp=Kelp
|
||||||
|
Green Coral=Koral Hijau
|
||||||
|
Pink Coral=Koral Jambon
|
||||||
|
Cyan Coral=Koral Sian
|
||||||
|
Brown Coral=Koral Cokelat
|
||||||
|
Orange Coral=Koral Oranye
|
||||||
|
Coral Skeleton=Kerangka Koral
|
||||||
|
Water Source=Mata Air
|
||||||
|
Flowing Water=Aliran Air
|
||||||
|
River Water Source=Mata Air Sungai
|
||||||
|
Flowing River Water=Aliran Air Sungai
|
||||||
|
Lava Source=Sumber Lava
|
||||||
|
Flowing Lava=Aliran Lava
|
||||||
|
Empty Bookshelf=Rak Buku Kosong
|
||||||
|
Bookshelf (@1 written, @2 empty books)=Rak Buku (@1 buku tertulis, @2 buku kosong)
|
||||||
|
Bookshelf=Rak Buku
|
||||||
|
Text too long=Teks terlalu panjang
|
||||||
|
Wooden Sign=Penanda Kayu
|
||||||
|
Steel Sign=Penanda Baja
|
||||||
|
Wooden Ladder=Tangga Kayu
|
||||||
|
Steel Ladder=Tangga Baja
|
||||||
|
Apple Wood Fence=Pagar Kayu Apel
|
||||||
|
Acacia Wood Fence=Pagar Akasia
|
||||||
|
Jungle Wood Fence=Pagar Kayu Rimba
|
||||||
|
Pine Wood Fence=Pagar Pinus
|
||||||
|
Aspen Wood Fence=Pagar Aspen
|
||||||
|
Apple Wood Fence Rail=Rel Pagar Kayu Apel
|
||||||
|
Acacia Wood Fence Rail=Rel Pagar Akasia
|
||||||
|
Jungle Wood Fence Rail=Rel Pagar Kayu Rimba
|
||||||
|
Pine Wood Fence Rail=Rel Pagar Pinus
|
||||||
|
Aspen Wood Fence Rail=Rel Pagar Aspen
|
||||||
|
Glass=Kaca
|
||||||
|
Obsidian Glass=Kaca Obsidian
|
||||||
|
Brick Block=Balok Bata
|
||||||
|
Mese Lamp=Lampu Mese
|
||||||
|
Mese Post Light=Lampu Taman Mese
|
||||||
|
Cloud=Awan
|
||||||
|
@1 will intersect protection on growth.=@1 akan memotong perlindungan ketika tumbuh.
|
||||||
|
Torch=Obor
|
||||||
|
Wooden Pickaxe=Beliung Kayu
|
||||||
|
Stone Pickaxe=Beliung Batu
|
||||||
|
Bronze Pickaxe=Beliung Perunggu
|
||||||
|
Steel Pickaxe=Beliung Baja
|
||||||
|
Mese Pickaxe=Beliung Mese
|
||||||
|
Diamond Pickaxe=Beliung Berlian
|
||||||
|
Wooden Shovel=Sekop Kayu
|
||||||
|
Stone Shovel=Sekop Batu
|
||||||
|
Bronze Shovel=Sekop Perunggu
|
||||||
|
Steel Shovel=Sekop Baja
|
||||||
|
Mese Shovel=Sekop Mese
|
||||||
|
Diamond Shovel=Sekop Berlian
|
||||||
|
Wooden Axe=Kapak Kayu
|
||||||
|
Stone Axe=Kapak Batu
|
||||||
|
Bronze Axe=Kapak Perunggu
|
||||||
|
Steel Axe=Kapak Baja
|
||||||
|
Mese Axe=Kapak Mese
|
||||||
|
Diamond Axe=Kapak Berlian
|
||||||
|
Wooden Sword=Pedang Kayu
|
||||||
|
Stone Sword=Pedang Batu
|
||||||
|
Bronze Sword=Pedang Perunggu
|
||||||
|
Steel Sword=Pedang Baja
|
||||||
|
Mese Sword=Pedang Mese
|
||||||
|
Diamond Sword=Pedang Berlian
|
||||||
|
Key=Kunci
|
||||||
|
Furnace is empty=Tungku kosong
|
||||||
|
100% (output full)=100% (keluaran penuh)
|
||||||
|
@1%=@1%
|
||||||
|
Not cookable=Tidak bisa dimasak
|
||||||
|
Empty=Kosong
|
||||||
|
Furnace active=Tungku nyala
|
||||||
|
Furnace inactive=Tungku mati
|
||||||
|
(Item: @1; Fuel: @2)=(Barang: @1; Bahan Bakar: @2)
|
||||||
|
Furnace=Tungku
|
||||||
|
Title:=Judul:
|
||||||
|
Contents:=Isi:
|
||||||
|
Save=Simpan
|
||||||
|
by @1=oleh @1
|
||||||
|
Page @1 of @2=Halaman @1 dari @2
|
||||||
|
"@1"="@1"
|
||||||
|
"@1" by @2="@1" oleh @2
|
||||||
|
Skeleton Key=Kunci Induk
|
||||||
|
Key to @1's @2=Kunci @2 milik @1
|
||||||
|
Blueberries=Bluberi
|
||||||
|
Book=Buku
|
||||||
|
Book with Text=Buku Tertulis
|
||||||
|
Bronze Ingot=Perunggu Batangan
|
||||||
|
Clay Brick=Bata
|
||||||
|
Clay Lump=Bongkahan Semen
|
||||||
|
Coal Lump=Bongkahan Batu Bara
|
||||||
|
Copper Ingot=Tembaga Batangan
|
||||||
|
Copper Lump=Bongkahan Tembaga
|
||||||
|
Diamond=Berlian
|
||||||
|
Flint=Batu Api
|
||||||
|
Gold Ingot=Emas Batangan
|
||||||
|
Gold Lump=Bongkahan Emas
|
||||||
|
Iron Lump=Bongkahan Besi
|
||||||
|
Mese Crystal=Kristal Mese
|
||||||
|
Mese Crystal Fragment=Pecahan Kristal Mese
|
||||||
|
Obsidian Shard=Pecahan Obsidian
|
||||||
|
Paper=Kertas
|
||||||
|
Steel Ingot=Baja Batangan
|
||||||
|
Stick=Tongkat
|
||||||
|
Tin Ingot=Timah Batangan
|
||||||
|
Tin Lump=Bongkahan Timah
|
||||||
|
Locked Chest=Peti Terkunci
|
||||||
|
Locked Chest (owned by @1)=Peti Terkunci (milik @1)
|
||||||
|
You do not own this chest.=Anda bukan pemilik peti ini.
|
||||||
|
a locked chest=suatu peti terkunci
|
||||||
|
Chest=Peti
|
|
@ -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=云
|
||||||
|
|
211
mods/default/locale/default.zh_TW.tr
Normal 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"
|
|
@ -1,43 +1,4 @@
|
||||||
# textdomain: default
|
# textdomain: default
|
||||||
Locked Chest=
|
|
||||||
Locked Chest (owned by @1)=
|
|
||||||
You do not own this chest.=
|
|
||||||
a locked chest=
|
|
||||||
Chest=
|
|
||||||
Stick=
|
|
||||||
Paper=
|
|
||||||
"@1" by @2=
|
|
||||||
Book=
|
|
||||||
Book with Text=
|
|
||||||
Skeleton Key=
|
|
||||||
Key to @1's @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)=
|
|
||||||
@1%=
|
|
||||||
Empty=
|
|
||||||
Not cookable=
|
|
||||||
Furnace active=
|
|
||||||
Furnace inactive=
|
|
||||||
(Item: @1; Fuel: @2)=
|
|
||||||
Furnace=
|
|
||||||
Stone=
|
Stone=
|
||||||
Cobblestone=
|
Cobblestone=
|
||||||
Stone Brick=
|
Stone Brick=
|
||||||
|
@ -62,12 +23,12 @@ 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 Savanna 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=
|
Savanna Dirt=
|
||||||
Dry Dirt with Dry Grass=
|
Savanna Dirt with Savanna Grass=
|
||||||
Permafrost=
|
Permafrost=
|
||||||
Permafrost with Stones=
|
Permafrost with Stones=
|
||||||
Permafrost with Moss=
|
Permafrost with Moss=
|
||||||
|
@ -124,7 +85,7 @@ Papyrus=
|
||||||
Dry Shrub=
|
Dry Shrub=
|
||||||
Jungle Grass=
|
Jungle Grass=
|
||||||
Grass=
|
Grass=
|
||||||
Dry Grass=
|
Savanna Grass=
|
||||||
Fern=
|
Fern=
|
||||||
Marram Grass=
|
Marram Grass=
|
||||||
Bush Stem=
|
Bush Stem=
|
||||||
|
@ -176,6 +137,8 @@ Brick Block=
|
||||||
Mese Lamp=
|
Mese Lamp=
|
||||||
Mese Post Light=
|
Mese Post Light=
|
||||||
Cloud=
|
Cloud=
|
||||||
|
@1 will intersect protection on growth.=
|
||||||
|
Torch=
|
||||||
Wooden Pickaxe=
|
Wooden Pickaxe=
|
||||||
Stone Pickaxe=
|
Stone Pickaxe=
|
||||||
Bronze Pickaxe=
|
Bronze Pickaxe=
|
||||||
|
@ -201,11 +164,48 @@ Steel Sword=
|
||||||
Mese Sword=
|
Mese Sword=
|
||||||
Diamond Sword=
|
Diamond Sword=
|
||||||
Key=
|
Key=
|
||||||
Torch=
|
Furnace is empty=
|
||||||
@1 will intersect protection on growth.=
|
100% (output full)=
|
||||||
|
@1%=
|
||||||
|
Not cookable=
|
||||||
|
Empty=
|
||||||
|
Furnace active=
|
||||||
|
Furnace inactive=
|
||||||
|
(Item: @1; Fuel: @2)=
|
||||||
|
Furnace=
|
||||||
Title:=
|
Title:=
|
||||||
Contents:=
|
Contents:=
|
||||||
Save=
|
Save=
|
||||||
by @1=
|
by @1=
|
||||||
Page @1 of @2=
|
Page @1 of @2=
|
||||||
"@1"=
|
"@1"=
|
||||||
|
"@1" by @2=
|
||||||
|
Skeleton Key=
|
||||||
|
Key to @1's @2=
|
||||||
|
Blueberries=
|
||||||
|
Book=
|
||||||
|
Book with Text=
|
||||||
|
Bronze Ingot=
|
||||||
|
Clay Brick=
|
||||||
|
Clay Lump=
|
||||||
|
Coal Lump=
|
||||||
|
Copper Ingot=
|
||||||
|
Copper Lump=
|
||||||
|
Diamond=
|
||||||
|
Flint=
|
||||||
|
Gold Ingot=
|
||||||
|
Gold Lump=
|
||||||
|
Iron Lump=
|
||||||
|
Mese Crystal=
|
||||||
|
Mese Crystal Fragment=
|
||||||
|
Obsidian Shard=
|
||||||
|
Paper=
|
||||||
|
Steel Ingot=
|
||||||
|
Stick=
|
||||||
|
Tin Ingot=
|
||||||
|
Tin Lump=
|
||||||
|
Locked Chest=
|
||||||
|
Locked Chest (owned by @1)=
|
||||||
|
You do not own this chest.=
|
||||||
|
a locked chest=
|
||||||
|
Chest=
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -221,6 +221,10 @@ default:brick
|
||||||
|
|
||||||
default:meselamp
|
default:meselamp
|
||||||
default:mese_post_light
|
default:mese_post_light
|
||||||
|
default:mese_post_light_acacia_wood
|
||||||
|
default:mese_post_light_junglewood
|
||||||
|
default:mese_post_light_pine_wood
|
||||||
|
default:mese_post_light_aspen_wood
|
||||||
|
|
||||||
Misc
|
Misc
|
||||||
----
|
----
|
||||||
|
@ -458,12 +462,12 @@ minetest.register_node("default:dirt_with_grass_footsteps", {
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("default:dirt_with_dry_grass", {
|
minetest.register_node("default:dirt_with_dry_grass", {
|
||||||
description = S("Dirt with Dry Grass"),
|
description = S("Dirt with Savanna Grass"),
|
||||||
tiles = {"default_dry_grass.png",
|
tiles = {"default_dry_grass.png",
|
||||||
"default_dirt.png",
|
"default_dirt.png",
|
||||||
{name = "default_dirt.png^default_dry_grass_side.png",
|
{name = "default_dirt.png^default_dry_grass_side.png",
|
||||||
tileable_vertical = false}},
|
tileable_vertical = false}},
|
||||||
groups = {crumbly = 3, soil = 1},
|
groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1},
|
||||||
drop = "default:dirt",
|
drop = "default:dirt",
|
||||||
sounds = default.node_sound_dirt_defaults({
|
sounds = default.node_sound_dirt_defaults({
|
||||||
footstep = {name = "default_grass_footstep", gain = 0.4},
|
footstep = {name = "default_grass_footstep", gain = 0.4},
|
||||||
|
@ -513,14 +517,14 @@ minetest.register_node("default:dirt_with_coniferous_litter", {
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("default:dry_dirt", {
|
minetest.register_node("default:dry_dirt", {
|
||||||
description = S("Dry Dirt"),
|
description = S("Savanna Dirt"),
|
||||||
tiles = {"default_dry_dirt.png"},
|
tiles = {"default_dry_dirt.png"},
|
||||||
groups = {crumbly = 3, soil = 1},
|
groups = {crumbly = 3, soil = 1},
|
||||||
sounds = default.node_sound_dirt_defaults(),
|
sounds = default.node_sound_dirt_defaults(),
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("default:dry_dirt_with_dry_grass", {
|
minetest.register_node("default:dry_dirt_with_dry_grass", {
|
||||||
description = S("Dry Dirt with Dry Grass"),
|
description = S("Savanna Dirt with Savanna Grass"),
|
||||||
tiles = {"default_dry_grass.png", "default_dry_dirt.png",
|
tiles = {"default_dry_grass.png", "default_dry_dirt.png",
|
||||||
{name = "default_dry_dirt.png^default_dry_grass_side.png",
|
{name = "default_dry_dirt.png^default_dry_grass_side.png",
|
||||||
tileable_vertical = false}},
|
tileable_vertical = false}},
|
||||||
|
@ -621,7 +625,7 @@ minetest.register_node("default:snow", {
|
||||||
collision_box = {
|
collision_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {
|
fixed = {
|
||||||
{-0.5, -0.5, -0.5, 0.5, -7 / 16, 0.5},
|
{-0.5, -0.5, -0.5, 0.5, -6 / 16, 0.5},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
groups = {crumbly = 3, falling_node = 1, snowy = 1},
|
groups = {crumbly = 3, falling_node = 1, snowy = 1},
|
||||||
|
@ -1497,7 +1501,7 @@ end
|
||||||
|
|
||||||
|
|
||||||
minetest.register_node("default:dry_grass_1", {
|
minetest.register_node("default:dry_grass_1", {
|
||||||
description = S("Dry Grass"),
|
description = S("Savanna Grass"),
|
||||||
drawtype = "plantlike",
|
drawtype = "plantlike",
|
||||||
waving = 1,
|
waving = 1,
|
||||||
tiles = {"default_dry_grass_1.png"},
|
tiles = {"default_dry_grass_1.png"},
|
||||||
|
@ -1526,7 +1530,7 @@ minetest.register_node("default:dry_grass_1", {
|
||||||
|
|
||||||
for i = 2, 5 do
|
for i = 2, 5 do
|
||||||
minetest.register_node("default:dry_grass_" .. i, {
|
minetest.register_node("default:dry_grass_" .. i, {
|
||||||
description = S("Dry Grass"),
|
description = S("Savanna Grass"),
|
||||||
drawtype = "plantlike",
|
drawtype = "plantlike",
|
||||||
waving = 1,
|
waving = 1,
|
||||||
tiles = {"default_dry_grass_" .. i .. ".png"},
|
tiles = {"default_dry_grass_" .. i .. ".png"},
|
||||||
|
@ -2234,7 +2238,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 +2248,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 +2334,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 +2344,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,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -2579,12 +2583,10 @@ local function register_sign(material, desc, def)
|
||||||
sounds = def.sounds,
|
sounds = def.sounds,
|
||||||
|
|
||||||
on_construct = function(pos)
|
on_construct = function(pos)
|
||||||
--local n = minetest.get_node(pos)
|
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
meta:set_string("formspec", "field[text;;${text}]")
|
meta:set_string("formspec", "field[text;;${text}]")
|
||||||
end,
|
end,
|
||||||
on_receive_fields = function(pos, formname, fields, sender)
|
on_receive_fields = function(pos, formname, fields, sender)
|
||||||
--print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields))
|
|
||||||
local player_name = sender:get_player_name()
|
local player_name = sender:get_player_name()
|
||||||
if minetest.is_protected(pos, player_name) then
|
if minetest.is_protected(pos, player_name) then
|
||||||
minetest.record_protection_violation(pos, player_name)
|
minetest.record_protection_violation(pos, player_name)
|
||||||
|
@ -2598,8 +2600,8 @@ local function register_sign(material, desc, def)
|
||||||
minetest.chat_send_player(player_name, S("Text too long"))
|
minetest.chat_send_player(player_name, S("Text too long"))
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
minetest.log("action", (player_name or "") .. " wrote \"" ..
|
minetest.log("action", player_name .. " wrote \"" .. text ..
|
||||||
text .. "\" to sign at " .. minetest.pos_to_string(pos))
|
"\" to the sign at " .. minetest.pos_to_string(pos))
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
meta:set_string("text", text)
|
meta:set_string("text", text)
|
||||||
|
|
||||||
|
@ -2816,7 +2818,10 @@ minetest.register_node("default:brick", {
|
||||||
description = S("Brick Block"),
|
description = S("Brick Block"),
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
place_param2 = 0,
|
place_param2 = 0,
|
||||||
tiles = {"default_brick.png"},
|
tiles = {
|
||||||
|
"default_brick.png^[transformFX",
|
||||||
|
"default_brick.png",
|
||||||
|
},
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
groups = {cracky = 3},
|
groups = {cracky = 3},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
sounds = default.node_sound_stone_defaults(),
|
||||||
|
@ -2835,25 +2840,34 @@ minetest.register_node("default:meselamp", {
|
||||||
light_source = default.LIGHT_MAX,
|
light_source = default.LIGHT_MAX,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("default:mese_post_light", {
|
default.register_mesepost("default:mese_post_light", {
|
||||||
description = S("Mese Post Light"),
|
description = S("Apple Wood Mese Post Light"),
|
||||||
tiles = {"default_mese_post_light_top.png", "default_mese_post_light_top.png",
|
texture = "default_fence_wood.png",
|
||||||
"default_mese_post_light_side_dark.png", "default_mese_post_light_side_dark.png",
|
material = "default:wood",
|
||||||
"default_mese_post_light_side.png", "default_mese_post_light_side.png"},
|
})
|
||||||
wield_image = "default_mese_post_light_side.png",
|
|
||||||
drawtype = "nodebox",
|
default.register_mesepost("default:mese_post_light_acacia", {
|
||||||
node_box = {
|
description = S("Acacia Wood Mese Post Light"),
|
||||||
type = "fixed",
|
texture = "default_fence_acacia_wood.png",
|
||||||
fixed = {
|
material = "default:acacia_wood",
|
||||||
{-2 / 16, -8 / 16, -2 / 16, 2 / 16, 8 / 16, 2 / 16},
|
})
|
||||||
},
|
|
||||||
},
|
default.register_mesepost("default:mese_post_light_junglewood", {
|
||||||
paramtype = "light",
|
description = S("Jungle Wood Mese Post Light"),
|
||||||
light_source = default.LIGHT_MAX,
|
texture = "default_fence_junglewood.png",
|
||||||
sunlight_propagates = true,
|
material = "default:junglewood",
|
||||||
is_ground_content = false,
|
})
|
||||||
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
default.register_mesepost("default:mese_post_light_pine_wood", {
|
||||||
|
description = S("Pine Wood Mese Post Light"),
|
||||||
|
texture = "default_fence_pine_wood.png",
|
||||||
|
material = "default:pine_wood",
|
||||||
|
})
|
||||||
|
|
||||||
|
default.register_mesepost("default:mese_post_light_aspen_wood", {
|
||||||
|
description = S("Aspen Wood Mese Post Light"),
|
||||||
|
texture = "default_fence_aspen_wood.png",
|
||||||
|
material = "default:aspen_wood",
|
||||||
})
|
})
|
||||||
|
|
||||||
--
|
--
|
||||||
|
|
BIN
mods/default/schematics/papyrus_on_dry_dirt.mts
Normal file
BIN
mods/default/sounds/default_furnace_active.ogg
Normal file
Before Width: | Height: | Size: 459 B After Width: | Height: | Size: 331 B |
Before Width: | Height: | Size: 148 B After Width: | Height: | Size: 154 B |
Before Width: | Height: | Size: 353 B After Width: | Height: | Size: 294 B |
Before Width: | Height: | Size: 353 B After Width: | Height: | Size: 301 B |
Before Width: | Height: | Size: 128 B |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 279 B |
|
@ -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({
|
||||||
|
|
|
@ -16,9 +16,7 @@ function default.can_grow(pos)
|
||||||
if not node_under then
|
if not node_under then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
local name_under = node_under.name
|
if minetest.get_item_group(node_under.name, "soil") == 0 then
|
||||||
local is_soil = minetest.get_item_group(name_under, "soil")
|
|
||||||
if is_soil == 0 then
|
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
local light_level = minetest.get_node_light(pos)
|
local light_level = minetest.get_node_light(pos)
|
||||||
|
|
|
@ -78,9 +78,7 @@ end
|
||||||
-- nodes from being placed in the top half of the door.
|
-- nodes from being placed in the top half of the door.
|
||||||
minetest.register_node("doors:hidden", {
|
minetest.register_node("doors:hidden", {
|
||||||
description = S("Hidden Door Segment"),
|
description = S("Hidden Door Segment"),
|
||||||
-- can't use airlike otherwise falling nodes will turn to entities
|
drawtype = "airlike",
|
||||||
-- and will be forever stuck until door is removed.
|
|
||||||
drawtype = "nodebox",
|
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
|
@ -93,13 +91,7 @@ minetest.register_node("doors:hidden", {
|
||||||
drop = "",
|
drop = "",
|
||||||
groups = {not_in_creative_inventory = 1},
|
groups = {not_in_creative_inventory = 1},
|
||||||
on_blast = function() end,
|
on_blast = function() end,
|
||||||
tiles = {"doors_blank.png"},
|
-- 1px block inside door hinge near node top
|
||||||
-- 1px transparent block inside door hinge near node top.
|
|
||||||
node_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {-15/32, 13/32, -15/32, -13/32, 1/2, -13/32},
|
|
||||||
},
|
|
||||||
-- collision_box needed otherise selection box would be full node size
|
|
||||||
collision_box = {
|
collision_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-15/32, 13/32, -15/32, -13/32, 1/2, -13/32},
|
fixed = {-15/32, 13/32, -15/32, -13/32, 1/2, -13/32},
|
||||||
|
@ -115,10 +107,10 @@ local transform = {
|
||||||
{v = "_a", param2 = 2},
|
{v = "_a", param2 = 2},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{v = "_b", param2 = 1},
|
{v = "_c", param2 = 1},
|
||||||
{v = "_b", param2 = 2},
|
{v = "_c", param2 = 2},
|
||||||
{v = "_b", param2 = 3},
|
{v = "_c", param2 = 3},
|
||||||
{v = "_b", param2 = 0},
|
{v = "_c", param2 = 0},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{v = "_b", param2 = 1},
|
{v = "_b", param2 = 1},
|
||||||
|
@ -127,10 +119,10 @@ local transform = {
|
||||||
{v = "_b", param2 = 0},
|
{v = "_b", param2 = 0},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{v = "_a", param2 = 3},
|
{v = "_d", param2 = 3},
|
||||||
{v = "_a", param2 = 0},
|
{v = "_d", param2 = 0},
|
||||||
{v = "_a", param2 = 1},
|
{v = "_d", param2 = 1},
|
||||||
{v = "_a", param2 = 2},
|
{v = "_d", param2 = 2},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,10 +168,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 +332,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)
|
||||||
|
@ -449,15 +441,23 @@ function doors.register(name, def)
|
||||||
def.mesh = "door_b.obj"
|
def.mesh = "door_b.obj"
|
||||||
minetest.register_node(":" .. name .. "_b", def)
|
minetest.register_node(":" .. name .. "_b", def)
|
||||||
|
|
||||||
|
def.mesh = "door_a2.obj"
|
||||||
|
minetest.register_node(":" .. name .. "_c", def)
|
||||||
|
|
||||||
|
def.mesh = "door_b2.obj"
|
||||||
|
minetest.register_node(":" .. name .. "_d", def)
|
||||||
|
|
||||||
doors.registered_doors[name .. "_a"] = true
|
doors.registered_doors[name .. "_a"] = true
|
||||||
doors.registered_doors[name .. "_b"] = true
|
doors.registered_doors[name .. "_b"] = true
|
||||||
|
doors.registered_doors[name .. "_c"] = true
|
||||||
|
doors.registered_doors[name .. "_d"] = true
|
||||||
end
|
end
|
||||||
|
|
||||||
doors.register("door_wood", {
|
doors.register("door_wood", {
|
||||||
tiles = {{ name = "doors_door_wood.png", backface_culling = true }},
|
tiles = {{ name = "doors_door_wood.png", backface_culling = true }},
|
||||||
description = S("Wooden Door"),
|
description = S("Wooden Door"),
|
||||||
inventory_image = "doors_item_wood.png",
|
inventory_image = "doors_item_wood.png",
|
||||||
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
|
groups = {node = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
|
||||||
recipe = {
|
recipe = {
|
||||||
{"group:wood", "group:wood"},
|
{"group:wood", "group:wood"},
|
||||||
{"group:wood", "group:wood"},
|
{"group:wood", "group:wood"},
|
||||||
|
@ -470,7 +470,7 @@ doors.register("door_steel", {
|
||||||
description = S("Steel Door"),
|
description = S("Steel Door"),
|
||||||
inventory_image = "doors_item_steel.png",
|
inventory_image = "doors_item_steel.png",
|
||||||
protected = true,
|
protected = true,
|
||||||
groups = {cracky = 1, level = 2},
|
groups = {node = 1, cracky = 1, level = 2},
|
||||||
sounds = default.node_sound_metal_defaults(),
|
sounds = default.node_sound_metal_defaults(),
|
||||||
sound_open = "doors_steel_door_open",
|
sound_open = "doors_steel_door_open",
|
||||||
sound_close = "doors_steel_door_close",
|
sound_close = "doors_steel_door_close",
|
||||||
|
@ -485,7 +485,7 @@ doors.register("door_glass", {
|
||||||
tiles = {"doors_door_glass.png"},
|
tiles = {"doors_door_glass.png"},
|
||||||
description = S("Glass Door"),
|
description = S("Glass Door"),
|
||||||
inventory_image = "doors_item_glass.png",
|
inventory_image = "doors_item_glass.png",
|
||||||
groups = {cracky=3, oddly_breakable_by_hand=3},
|
groups = {node = 1, cracky=3, oddly_breakable_by_hand=3},
|
||||||
sounds = default.node_sound_glass_defaults(),
|
sounds = default.node_sound_glass_defaults(),
|
||||||
sound_open = "doors_glass_door_open",
|
sound_open = "doors_glass_door_open",
|
||||||
sound_close = "doors_glass_door_close",
|
sound_close = "doors_glass_door_close",
|
||||||
|
@ -500,7 +500,7 @@ doors.register("door_obsidian_glass", {
|
||||||
tiles = {"doors_door_obsidian_glass.png"},
|
tiles = {"doors_door_obsidian_glass.png"},
|
||||||
description = S("Obsidian Glass Door"),
|
description = S("Obsidian Glass Door"),
|
||||||
inventory_image = "doors_item_obsidian_glass.png",
|
inventory_image = "doors_item_obsidian_glass.png",
|
||||||
groups = {cracky=3},
|
groups = {node = 1, cracky=3},
|
||||||
sounds = default.node_sound_glass_defaults(),
|
sounds = default.node_sound_glass_defaults(),
|
||||||
sound_open = "doors_glass_door_open",
|
sound_open = "doors_glass_door_open",
|
||||||
sound_close = "doors_glass_door_close",
|
sound_close = "doors_glass_door_close",
|
||||||
|
@ -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 = {
|
||||||
|
|
18
mods/doors/locale/doors.id.tr
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
# textdomain: doors
|
||||||
|
Hidden Door Segment=Bagian Pintu Tersembunyi
|
||||||
|
Owned by @1=Milik @1
|
||||||
|
You do not own this locked door.=Anda bukan pemilik pintu terkunci ini.
|
||||||
|
a locked door=pintu terkunci
|
||||||
|
Wooden Door=Pintu Kayu
|
||||||
|
Steel Door=Pintu Baja
|
||||||
|
Glass Door=Pintu Kaca
|
||||||
|
Obsidian Glass Door=Pintu Kaca Obsidian
|
||||||
|
You do not own this trapdoor.=Anda bukan pemilik pintu kolong ini.
|
||||||
|
a locked trapdoor=pintu kolong terkunci
|
||||||
|
Wooden Trapdoor=Pintu Kolong Kayu
|
||||||
|
Steel Trapdoor=Pintu Kolong Baja
|
||||||
|
Apple Wood Fence Gate=Gerbang Kayu Pohon Apel
|
||||||
|
Acacia Wood Fence Gate=Gerbang Kayu Akasia
|
||||||
|
Jungle Wood Fence Gate=Gerbang Kayu Pohon Rimba
|
||||||
|
Pine Wood Fence Gate=Gerbang Kayu Pinus
|
||||||
|
Aspen Wood Fence Gate=Gerbang Kayu Aspen
|
|
@ -4,7 +4,7 @@ Owned by @1=Di proprietà di @1
|
||||||
You do not own this locked door.=Non sei il proprietario di questa porta chiusa a chiave.
|
You do not own this locked door.=Non sei il proprietario di questa porta chiusa a chiave.
|
||||||
a locked door=una porta chiusa a chiave
|
a locked door=una porta chiusa a chiave
|
||||||
Wooden Door=Porta di legno
|
Wooden Door=Porta di legno
|
||||||
Steel Door=Porta d'acciacio
|
Steel Door=Porta d'acciaio
|
||||||
Glass Door=Porta di vetro
|
Glass Door=Porta di vetro
|
||||||
Obsidian Glass Door=Porta di vetro d'ossidiana
|
Obsidian Glass Door=Porta di vetro d'ossidiana
|
||||||
Owned by @1=Di proprietà di @1
|
Owned by @1=Di proprietà di @1
|
||||||
|
|
|
@ -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=用苹果树做的木栅栏门
|
||||||
|
|
18
mods/doors/locale/doors.zh_TW.tr
Normal 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=白楊木柵欄門
|
|
@ -1,7 +1,7 @@
|
||||||
# Blender v2.76 (sub 0) OBJ File: 'door_a.blend'
|
# Blender v2.76 (sub 0) OBJ File: 'door_a.blend'
|
||||||
# www.blender.org
|
# www.blender.org
|
||||||
mtllib door_a.mtl
|
mtllib door_a.mtl
|
||||||
o Cube_Cube.001
|
o door_a
|
||||||
v 0.499000 -0.499000 -0.499000
|
v 0.499000 -0.499000 -0.499000
|
||||||
v 0.499000 1.499000 -0.499000
|
v 0.499000 1.499000 -0.499000
|
||||||
v 0.499000 -0.499000 -0.375000
|
v 0.499000 -0.499000 -0.375000
|
||||||
|
|
50
mods/doors/models/door_a2.obj
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
# Blender v2.79 (sub 0) OBJ File: ''
|
||||||
|
# www.blender.org
|
||||||
|
mtllib door_a2.mtl
|
||||||
|
o door_a2
|
||||||
|
v -0.499000 1.499000 -0.499000
|
||||||
|
v -0.499000 -0.499000 -0.499000
|
||||||
|
v -0.499000 -0.499000 -0.375000
|
||||||
|
v -0.499000 1.499000 -0.375000
|
||||||
|
v 0.499000 -0.499000 -0.375000
|
||||||
|
v 0.499000 1.499000 -0.375000
|
||||||
|
v 0.499000 -0.499000 -0.499000
|
||||||
|
v 0.499000 1.499000 -0.499000
|
||||||
|
vt 0.894737 1.000000
|
||||||
|
vt 0.894737 0.000000
|
||||||
|
vt 0.842105 0.000000
|
||||||
|
vt 0.842105 1.000000
|
||||||
|
vt 0.421052 1.000000
|
||||||
|
vt 0.421052 0.000000
|
||||||
|
vt 0.000001 0.000000
|
||||||
|
vt 0.000001 1.000000
|
||||||
|
vt 0.894737 1.000000
|
||||||
|
vt 0.894737 0.000000
|
||||||
|
vt 0.947368 0.000000
|
||||||
|
vt 0.947368 1.000000
|
||||||
|
vt 0.842105 1.000000
|
||||||
|
vt 0.842105 0.000000
|
||||||
|
vt 0.421052 0.000000
|
||||||
|
vt 0.421052 1.000000
|
||||||
|
vt 0.947368 0.000000
|
||||||
|
vt 0.947368 0.500000
|
||||||
|
vt 1.000000 0.500000
|
||||||
|
vt 1.000000 0.000000
|
||||||
|
vt 1.000000 1.000000
|
||||||
|
vt 1.000000 0.500000
|
||||||
|
vt 0.947368 0.500000
|
||||||
|
vt 0.947368 1.000000
|
||||||
|
vn -1.0000 -0.0000 0.0000
|
||||||
|
vn 0.0000 -0.0000 1.0000
|
||||||
|
vn 1.0000 0.0000 0.0000
|
||||||
|
vn 0.0000 0.0000 -1.0000
|
||||||
|
vn 0.0000 -1.0000 0.0000
|
||||||
|
vn 0.0000 1.0000 0.0000
|
||||||
|
usemtl None.009
|
||||||
|
s 1
|
||||||
|
f 1/1/1 2/2/1 3/3/1 4/4/1
|
||||||
|
f 4/5/2 3/6/2 5/7/2 6/8/2
|
||||||
|
f 6/9/3 5/10/3 7/11/3 8/12/3
|
||||||
|
f 8/13/4 7/14/4 2/15/4 1/16/4
|
||||||
|
f 2/17/5 7/18/5 5/19/5 3/20/5
|
||||||
|
f 8/21/6 1/22/6 4/23/6 6/24/6
|
|
@ -1,40 +1,50 @@
|
||||||
# Blender v2.76 (sub 0) OBJ File: 'door_b.blend'
|
# Blender v2.79 (sub 0) OBJ File: ''
|
||||||
# www.blender.org
|
# www.blender.org
|
||||||
mtllib door_b.mtl
|
mtllib door_b.mtl
|
||||||
o Cube_Cube.001
|
o door_b
|
||||||
v -0.499000 -0.499000 -0.499000
|
|
||||||
v -0.499000 1.499000 -0.499000
|
|
||||||
v -0.499000 -0.499000 -0.375000
|
|
||||||
v -0.499000 1.499000 -0.375000
|
|
||||||
v 0.499000 -0.499000 -0.499000
|
|
||||||
v 0.499000 1.499000 -0.499000
|
v 0.499000 1.499000 -0.499000
|
||||||
v 0.499000 -0.499000 -0.375000
|
|
||||||
v 0.499000 1.499000 -0.375000
|
v 0.499000 1.499000 -0.375000
|
||||||
|
v 0.499000 -0.499000 -0.375000
|
||||||
|
v 0.499000 -0.499000 -0.499000
|
||||||
|
v -0.499000 1.499000 -0.375000
|
||||||
|
v -0.499000 -0.499000 -0.375000
|
||||||
|
v -0.499000 1.499000 -0.499000
|
||||||
|
v -0.499000 -0.499000 -0.499000
|
||||||
|
vt 0.894736 1.000000
|
||||||
|
vt 0.947368 1.000000
|
||||||
|
vt 0.947368 0.000000
|
||||||
|
vt 0.894736 0.000000
|
||||||
vt 0.842105 1.000000
|
vt 0.842105 1.000000
|
||||||
vt 0.842105 0.000000
|
|
||||||
vt 0.894737 0.000000
|
|
||||||
vt 0.894737 1.000000
|
|
||||||
vt 0.421053 1.000000
|
vt 0.421053 1.000000
|
||||||
vt 0.421053 0.000000
|
vt 0.421053 0.000000
|
||||||
vt 0.947368 0.000000
|
vt 0.842105 0.000000
|
||||||
vt 0.947368 1.000000
|
vt 0.842105 1.000000
|
||||||
|
vt 0.894736 1.000000
|
||||||
|
vt 0.894736 0.000000
|
||||||
|
vt 0.842105 0.000000
|
||||||
|
vt 0.421053 1.000000
|
||||||
vt 0.000000 1.000000
|
vt 0.000000 1.000000
|
||||||
vt 0.000000 0.000000
|
vt 0.000000 0.000000
|
||||||
vt 1.000000 0.000000
|
vt 0.421053 0.000000
|
||||||
vt 1.000000 0.500000
|
vt 1.000000 0.500000
|
||||||
vt 0.947368 0.500000
|
vt 0.947368 0.500000
|
||||||
|
vt 0.947368 1.000000
|
||||||
vt 1.000000 1.000000
|
vt 1.000000 1.000000
|
||||||
vn -1.000000 0.000000 0.000000
|
vt 1.000000 0.000000
|
||||||
vn 0.000000 0.000000 1.000000
|
vt 0.947368 0.000000
|
||||||
vn 1.000000 0.000000 0.000000
|
vt 0.947368 0.500000
|
||||||
vn 0.000000 0.000000 -1.000000
|
vt 1.000000 0.500000
|
||||||
vn 0.000000 -1.000000 0.000000
|
vn 1.0000 0.0000 0.0000
|
||||||
vn 0.000000 1.000000 0.000000
|
vn 0.0000 -0.0000 1.0000
|
||||||
usemtl None
|
vn -1.0000 0.0000 0.0000
|
||||||
s off
|
vn 0.0000 0.0000 -1.0000
|
||||||
f 2/1/1 1/2/1 3/3/1 4/4/1
|
vn 0.0000 -1.0000 0.0000
|
||||||
f 4/5/2 3/6/2 7/2/2 8/1/2
|
vn 0.0000 1.0000 0.0000
|
||||||
f 8/4/3 7/3/3 5/7/3 6/8/3
|
usemtl None.007
|
||||||
f 6/9/4 5/10/4 1/6/4 2/5/4
|
s 1
|
||||||
f 1/11/5 5/12/5 7/13/5 3/7/5
|
f 1/1/1 2/2/1 3/3/1 4/4/1
|
||||||
f 6/8/6 2/13/6 4/12/6 8/14/6
|
f 2/5/2 5/6/2 6/7/2 3/8/2
|
||||||
|
f 5/9/3 7/10/3 8/11/3 6/12/3
|
||||||
|
f 7/13/4 1/14/4 4/15/4 8/16/4
|
||||||
|
f 4/17/5 3/18/5 6/19/5 8/20/5
|
||||||
|
f 7/21/6 5/22/6 2/23/6 1/24/6
|
||||||
|
|
50
mods/doors/models/door_b2.obj
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
# Blender v2.79 (sub 0) OBJ File: ''
|
||||||
|
# www.blender.org
|
||||||
|
mtllib door_b2.mtl
|
||||||
|
o door_b2
|
||||||
|
v 0.499000 1.499000 -0.499000
|
||||||
|
v 0.499000 1.499000 -0.375000
|
||||||
|
v 0.499000 -0.499000 -0.375000
|
||||||
|
v 0.499000 -0.499000 -0.499000
|
||||||
|
v -0.499000 1.499000 -0.375000
|
||||||
|
v -0.499000 -0.499000 -0.375000
|
||||||
|
v -0.499000 1.499000 -0.499000
|
||||||
|
v -0.499000 -0.499000 -0.499000
|
||||||
|
vt 0.842105 1.000000
|
||||||
|
vt 0.894737 1.000000
|
||||||
|
vt 0.894737 0.000000
|
||||||
|
vt 0.842105 0.000000
|
||||||
|
vt 0.421052 1.000000
|
||||||
|
vt 0.000001 1.000000
|
||||||
|
vt 0.000001 0.000000
|
||||||
|
vt 0.421052 0.000000
|
||||||
|
vt 0.894737 1.000000
|
||||||
|
vt 0.947368 1.000000
|
||||||
|
vt 0.947368 0.000000
|
||||||
|
vt 0.894737 0.000000
|
||||||
|
vt 0.842105 1.000000
|
||||||
|
vt 0.421052 1.000000
|
||||||
|
vt 0.421052 0.000000
|
||||||
|
vt 0.842105 0.000000
|
||||||
|
vt 1.000000 0.500000
|
||||||
|
vt 0.947368 0.500000
|
||||||
|
vt 0.947368 1.000000
|
||||||
|
vt 1.000000 1.000000
|
||||||
|
vt 1.000000 0.000000
|
||||||
|
vt 0.947368 0.000000
|
||||||
|
vt 0.947368 0.500000
|
||||||
|
vt 1.000000 0.500000
|
||||||
|
vn 1.0000 0.0000 0.0000
|
||||||
|
vn 0.0000 -0.0000 1.0000
|
||||||
|
vn -1.0000 0.0000 0.0000
|
||||||
|
vn 0.0000 0.0000 -1.0000
|
||||||
|
vn 0.0000 -1.0000 0.0000
|
||||||
|
vn 0.0000 1.0000 0.0000
|
||||||
|
usemtl None.010
|
||||||
|
s 1
|
||||||
|
f 1/1/1 2/2/1 3/3/1 4/4/1
|
||||||
|
f 2/5/2 5/6/2 6/7/2 3/8/2
|
||||||
|
f 5/9/3 7/10/3 8/11/3 6/12/3
|
||||||
|
f 7/13/4 1/14/4 4/15/4 8/16/4
|
||||||
|
f 4/17/5 3/18/5 6/19/5 8/20/5
|
||||||
|
f 7/21/6 5/22/6 2/23/6 1/24/6
|
Before Width: | Height: | Size: 95 B |
|
@ -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"}},
|
||||||
|
|
||||||
|
|
|
@ -89,8 +89,9 @@ 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")
|
||||||
|
elseif itemdef.tool_capabilities then
|
||||||
for n = 1, amount do
|
for n = 1, amount do
|
||||||
local wear = rand:next(0.20 * 65535, 0.75 * 65535) -- 20% to 75% wear
|
local wear = rand:next(0.20 * 65535, 0.75 * 65535) -- 20% to 75% wear
|
||||||
table.insert(items, ItemStack({name = loot.name, wear = wear}))
|
table.insert(items, ItemStack({name = loot.name, wear = wear}))
|
||||||
|
@ -105,7 +106,6 @@ local function populate_chest(pos, rand, dungeontype)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
-- place items at random places in chest
|
-- place items at random places in chest
|
||||||
local inv = minetest.get_meta(pos):get_inventory()
|
local inv = minetest.get_meta(pos):get_inventory()
|
||||||
|
|
16
mods/dye/locale/dye.id.tr
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
# textdomain: dye
|
||||||
|
White Dye=Pewarna Putih
|
||||||
|
Grey Dye=Pewarna Abu
|
||||||
|
Dark Grey Dye=Pewarna Abu Tua
|
||||||
|
Black Dye=Pewarna Hitam
|
||||||
|
Violet Dye=Pewarna Ungu
|
||||||
|
Blue Dye=Pewarna Biru
|
||||||
|
Cyan Dye=Pewarna Sian
|
||||||
|
Dark Green Dye=Pewarna Hijau Tua
|
||||||
|
Green Dye=Pewarna Hijau
|
||||||
|
Yellow Dye=Pewarna Kuning
|
||||||
|
Brown Dye=Pewarna Cokelat
|
||||||
|
Orange Dye=Pewarna Oranye
|
||||||
|
Red Dye=Pewarna Merah
|
||||||
|
Magenta Dye=Pewarna Magenta
|
||||||
|
Pink Dye=Pewarna Jambon
|
|
@ -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=粉红染料
|
||||||
|
|
16
mods/dye/locale/dye.zh_TW.tr
Normal 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=粉紅染料
|
|
@ -11,3 +11,7 @@ Authors of media (sounds)
|
||||||
Yuval (CC0 1.0)
|
Yuval (CC0 1.0)
|
||||||
https://freesound.org/people/Yuval/sounds/197023/
|
https://freesound.org/people/Yuval/sounds/197023/
|
||||||
env_sounds_water.*.ogg
|
env_sounds_water.*.ogg
|
||||||
|
|
||||||
|
Halion (CC0 1.0)
|
||||||
|
https://freesound.org/people/Halion/sounds/17785/
|
||||||
|
env_sounds_lava.*.ogg
|
||||||
|
|
|
@ -1,11 +1,41 @@
|
||||||
-- Parameters
|
-- Parameters
|
||||||
|
|
||||||
local radius = 8 -- Water node search radius around player
|
-- Node search radius around player
|
||||||
|
local radius = 8
|
||||||
|
|
||||||
-- End of parameters
|
local allsounds = {
|
||||||
|
["env_sounds_water"] = {
|
||||||
|
trigger = {"default:water_flowing", "default:river_water_flowing"},
|
||||||
|
base_volume = 0.04,
|
||||||
|
max_volume = 0.4,
|
||||||
|
per_node = 0.004,
|
||||||
|
},
|
||||||
|
["env_sounds_lava"] = {
|
||||||
|
trigger = {"default:lava_source", "default:lava_flowing"},
|
||||||
|
base_volume = 0,
|
||||||
|
max_volume = 0.6,
|
||||||
|
per_node = {
|
||||||
|
["default:lava_source"] = 0.008,
|
||||||
|
["default:lava_flowing"] = 0.002,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
if minetest.settings:get_bool("river_source_sounds") then
|
||||||
|
table.insert(allsounds["env_sounds_water"].trigger,
|
||||||
|
"default:river_water_source")
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
local river_source_sounds = minetest.settings:get_bool("river_source_sounds")
|
-- Cache the union of all trigger nodes
|
||||||
|
|
||||||
|
local cache_triggers = {}
|
||||||
|
|
||||||
|
for sound, def in pairs(allsounds) do
|
||||||
|
for _, name in ipairs(def.trigger) do
|
||||||
|
table.insert(cache_triggers, name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
-- Update sound for player
|
-- Update sound for player
|
||||||
|
@ -13,39 +43,57 @@ local river_source_sounds = minetest.settings:get_bool("river_source_sounds")
|
||||||
local function update_sound(player)
|
local function update_sound(player)
|
||||||
local player_name = player:get_player_name()
|
local player_name = player:get_player_name()
|
||||||
local ppos = player:get_pos()
|
local ppos = player:get_pos()
|
||||||
|
ppos = vector.add(ppos, player:get_properties().eye_height)
|
||||||
local areamin = vector.subtract(ppos, radius)
|
local areamin = vector.subtract(ppos, radius)
|
||||||
local areamax = vector.add(ppos, radius)
|
local areamax = vector.add(ppos, radius)
|
||||||
local water_nodes = {"default:water_flowing", "default:river_water_flowing"}
|
|
||||||
if river_source_sounds then
|
local pos = minetest.find_nodes_in_area(areamin, areamax, cache_triggers, true)
|
||||||
table.insert(water_nodes, "default:river_water_source")
|
if next(pos) == nil then -- If table empty
|
||||||
end
|
|
||||||
local wpos, _ = minetest.find_nodes_in_area(areamin, areamax, water_nodes)
|
|
||||||
local waters = #wpos
|
|
||||||
if waters == 0 then
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
for sound, def in pairs(allsounds) do
|
||||||
-- Find average position of water positions
|
-- Find average position
|
||||||
local wposav = vector.new()
|
local posav = {0, 0, 0}
|
||||||
for _, pos in ipairs(wpos) do
|
local count = 0
|
||||||
wposav.x = wposav.x + pos.x
|
for _, name in ipairs(def.trigger) do
|
||||||
wposav.y = wposav.y + pos.y
|
if pos[name] then
|
||||||
wposav.z = wposav.z + pos.z
|
for _, p in ipairs(pos[name]) do
|
||||||
|
posav[1] = posav[1] + p.x
|
||||||
|
posav[2] = posav[2] + p.y
|
||||||
|
posav[3] = posav[3] + p.z
|
||||||
|
end
|
||||||
|
count = count + #pos[name]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
wposav = vector.divide(wposav, waters)
|
|
||||||
|
|
||||||
minetest.sound_play(
|
if count > 0 then
|
||||||
"env_sounds_water",
|
posav = vector.new(posav[1] / count, posav[2] / count,
|
||||||
{
|
posav[3] / count)
|
||||||
pos = wposav,
|
|
||||||
|
-- Calculate gain
|
||||||
|
local gain = def.base_volume
|
||||||
|
if type(def.per_node) == 'table' then
|
||||||
|
for name, multiplier in pairs(def.per_node) do
|
||||||
|
if pos[name] then
|
||||||
|
gain = gain + #pos[name] * multiplier
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
gain = gain + count * def.per_node
|
||||||
|
end
|
||||||
|
gain = math.min(gain, def.max_volume)
|
||||||
|
|
||||||
|
minetest.sound_play(sound, {
|
||||||
|
pos = posav,
|
||||||
to_player = player_name,
|
to_player = player_name,
|
||||||
gain = math.min(0.04 + waters * 0.004, 0.4),
|
gain = gain,
|
||||||
}
|
}, true)
|
||||||
)
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- Update sound 'on joinplayer'
|
-- Update sound when player joins
|
||||||
|
|
||||||
minetest.register_on_joinplayer(function(player)
|
minetest.register_on_joinplayer(function(player)
|
||||||
update_sound(player)
|
update_sound(player)
|
||||||
|
|
BIN
mods/env_sounds/sounds/env_sounds_lava.1.ogg
Normal file
BIN
mods/env_sounds/sounds/env_sounds_lava.2.ogg
Normal file
|
@ -38,3 +38,6 @@ Created by Gambit (CC BY 3.0):
|
||||||
|
|
||||||
Created by Napiophelios (CC BY-SA 3.0):
|
Created by Napiophelios (CC BY-SA 3.0):
|
||||||
farming_cotton.png
|
farming_cotton.png
|
||||||
|
|
||||||
|
Created by Extex101 (CC BY-SA 3.0):
|
||||||
|
farming_cotton_wild.png
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -16,7 +16,7 @@ dofile(farming.path .. "/nodes.lua")
|
||||||
dofile(farming.path .. "/hoes.lua")
|
dofile(farming.path .. "/hoes.lua")
|
||||||
|
|
||||||
|
|
||||||
-- WHEAT
|
-- Wheat
|
||||||
|
|
||||||
farming.register_plant("farming:wheat", {
|
farming.register_plant("farming:wheat", {
|
||||||
description = S("Wheat Seed"),
|
description = S("Wheat Seed"),
|
||||||
|
@ -71,6 +71,25 @@ farming.register_plant("farming:cotton", {
|
||||||
groups = {flammable = 4},
|
groups = {flammable = 4},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
minetest.register_decoration({
|
||||||
|
name = "farming:cotton_wild",
|
||||||
|
deco_type = "simple",
|
||||||
|
place_on = {"default:dry_dirt_with_dry_grass"},
|
||||||
|
sidelen = 16,
|
||||||
|
noise_params = {
|
||||||
|
offset = -0.1,
|
||||||
|
scale = 0.1,
|
||||||
|
spread = {x = 50, y = 50, z = 50},
|
||||||
|
seed = 4242,
|
||||||
|
octaves = 3,
|
||||||
|
persist = 0.7
|
||||||
|
},
|
||||||
|
biomes = {"savanna"},
|
||||||
|
y_max = 31000,
|
||||||
|
y_min = 1,
|
||||||
|
decoration = "farming:cotton_wild",
|
||||||
|
})
|
||||||
|
|
||||||
minetest.register_craftitem("farming:string", {
|
minetest.register_craftitem("farming:string", {
|
||||||
description = S("String"),
|
description = S("String"),
|
||||||
inventory_image = "farming_string.png",
|
inventory_image = "farming_string.png",
|
||||||
|
@ -115,12 +134,6 @@ minetest.register_craft({
|
||||||
|
|
||||||
-- Fuels
|
-- Fuels
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "fuel",
|
|
||||||
recipe = "farming:straw",
|
|
||||||
burntime = 3,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
type = "fuel",
|
type = "fuel",
|
||||||
recipe = "farming:wheat",
|
recipe = "farming:wheat",
|
||||||
|
@ -144,3 +157,15 @@ 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
|
||||||
|
|
|
@ -59,3 +59,37 @@ rights may limit how you use the material.
|
||||||
|
|
||||||
For more details:
|
For more details:
|
||||||
http://creativecommons.org/licenses/by/3.0/
|
http://creativecommons.org/licenses/by/3.0/
|
||||||
|
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
|
||||||
|
Copyright (C) 2017 Napiophelios
|
||||||
|
Copyright (C) 2020 Extex101
|
||||||
|
|
||||||
|
You are free to:
|
||||||
|
Share — copy and redistribute the material in any medium or format.
|
||||||
|
Adapt — remix, transform, and build upon the material for any purpose, even commercially.
|
||||||
|
The licensor cannot revoke these freedoms as long as you follow the license terms.
|
||||||
|
|
||||||
|
Under the following terms:
|
||||||
|
|
||||||
|
Attribution — You must give appropriate credit, provide a link to the license, and
|
||||||
|
indicate if changes were made. You may do so in any reasonable manner, but not in any way
|
||||||
|
that suggests the licensor endorses you or your use.
|
||||||
|
|
||||||
|
ShareAlike — If you remix, transform, or build upon the material, you must distribute
|
||||||
|
your contributions under the same license as the original.
|
||||||
|
|
||||||
|
No additional restrictions — You may not apply legal terms or technological measures that
|
||||||
|
legally restrict others from doing anything the license permits.
|
||||||
|
|
||||||
|
Notices:
|
||||||
|
|
||||||
|
You do not have to comply with the license for elements of the material in the public
|
||||||
|
domain or where your use is permitted by an applicable exception or limitation.
|
||||||
|
No warranties are given. The license may not give you all of the permissions necessary
|
||||||
|
for your intended use. For example, other rights such as publicity, privacy, or moral
|
||||||
|
rights may limit how you use the material.
|
||||||
|
|
||||||
|
For more details:
|
||||||
|
http://creativecommons.org/licenses/by-sa/3.0/
|
||||||
|
|
|
@ -12,9 +12,9 @@ Cotton Seed=Baumwollsamen
|
||||||
String=Faden
|
String=Faden
|
||||||
Soil=Ackerboden
|
Soil=Ackerboden
|
||||||
Wet Soil=Nasser Ackerboden
|
Wet Soil=Nasser Ackerboden
|
||||||
Dry Soil=Trockener Ackerboden
|
Savanna Soil=Savannenackerboden
|
||||||
Wet Dry Soil=Nasser trockener Ackerboden
|
Wet Savanna Soil=Nasser Savannenackerboden
|
||||||
Desert Sand Soil=Wüsensandackerboden
|
Desert Sand Soil=Wüstensandackerboden
|
||||||
Wet Desert Sand Soil=Nasser Wüstensandackerboden
|
Wet Desert Sand Soil=Nasser Wüstensandackerboden
|
||||||
Straw=Stroh
|
Straw=Stroh
|
||||||
Straw Stair=Strohtreppe
|
Straw Stair=Strohtreppe
|
||||||
|
@ -23,3 +23,6 @@ Inner Straw Stair=Innere Strohtreppe
|
||||||
Outer Straw Stair=Äußere Strohtreppe
|
Outer Straw Stair=Äußere Strohtreppe
|
||||||
Wheat=Weizen
|
Wheat=Weizen
|
||||||
Cotton=Baumwolle
|
Cotton=Baumwolle
|
||||||
|
Hoe=Hacke
|
||||||
|
Seed=Samen
|
||||||
|
Wild Cotton=Wilde Baumwolle
|
||||||
|
|
|
@ -23,3 +23,4 @@ Inner Straw Stair=Escalera de paja interior
|
||||||
Outer Straw Stair=Escalera de paja exterior
|
Outer Straw Stair=Escalera de paja exterior
|
||||||
Wheat=Trigo
|
Wheat=Trigo
|
||||||
Cotton=Algodón
|
Cotton=Algodón
|
||||||
|
Wild Cotton=Algodón silvestre
|
||||||
|
|
28
mods/farming/locale/farming.id.tr
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
# textdomain: farming
|
||||||
|
Soil=Tanah Tanam
|
||||||
|
Wet Soil=Tanah Tanam Basah
|
||||||
|
Savanna Soil=Tanah Tanam Sabana
|
||||||
|
Wet Savanna Soil=Tanah Tanam Sabana Basah
|
||||||
|
Desert Sand Soil=Pasir Tanam Gurun
|
||||||
|
Wet Desert Sand Soil=Pasir Tanam Gurun Basah
|
||||||
|
Straw=Jerami
|
||||||
|
Straw Stair=Tangga Jerami
|
||||||
|
Inner Straw Stair=Tangga Jerami Dalam
|
||||||
|
Outer Straw Stair=Tangga Jerami Luar
|
||||||
|
Straw Slab=Lempengan Jerami
|
||||||
|
Wild Cotton=Kapas Liar
|
||||||
|
Wheat Seed=Benih Gandum
|
||||||
|
Wheat=Gandum
|
||||||
|
Flour=Tepung
|
||||||
|
Bread=Roti
|
||||||
|
Cotton Seed=Benih Kapas
|
||||||
|
Cotton=Kapas
|
||||||
|
String=Benang
|
||||||
|
Wooden Hoe=Cangkul Kayu
|
||||||
|
Stone Hoe=Cangkul Batu
|
||||||
|
Steel Hoe=Cangkul Baja
|
||||||
|
Bronze Hoe=Cangkul Perunggu
|
||||||
|
Mese Hoe=Cangkul Mese
|
||||||
|
Diamond Hoe=Cangkul Berlian
|
||||||
|
Hoe=Cangkul
|
||||||
|
Seed=Benih
|
|
@ -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=面包
|
||||||
|
|
25
mods/farming/locale/farming.zh_TW.tr
Normal 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=棉
|
|
@ -1,19 +1,8 @@
|
||||||
# textdomain: farming
|
# textdomain: farming
|
||||||
Wooden Hoe=
|
|
||||||
Stone Hoe=
|
|
||||||
Steel Hoe=
|
|
||||||
Bronze Hoe=
|
|
||||||
Mese Hoe=
|
|
||||||
Diamond Hoe=
|
|
||||||
Wheat Seed=
|
|
||||||
Flour=
|
|
||||||
Bread=
|
|
||||||
Cotton Seed=
|
|
||||||
String=
|
|
||||||
Soil=
|
Soil=
|
||||||
Wet Soil=
|
Wet Soil=
|
||||||
Dry Soil=
|
Savanna Soil=
|
||||||
Wet Dry Soil=
|
Wet Savanna Soil=
|
||||||
Desert Sand Soil=
|
Desert Sand Soil=
|
||||||
Wet Desert Sand Soil=
|
Wet Desert Sand Soil=
|
||||||
Straw=
|
Straw=
|
||||||
|
@ -21,5 +10,19 @@ Straw Stair=
|
||||||
Inner Straw Stair=
|
Inner Straw Stair=
|
||||||
Outer Straw Stair=
|
Outer Straw Stair=
|
||||||
Straw Slab=
|
Straw Slab=
|
||||||
|
Wild Cotton=
|
||||||
|
Wheat Seed=
|
||||||
Wheat=
|
Wheat=
|
||||||
|
Flour=
|
||||||
|
Bread=
|
||||||
|
Cotton Seed=
|
||||||
Cotton=
|
Cotton=
|
||||||
|
String=
|
||||||
|
Wooden Hoe=
|
||||||
|
Stone Hoe=
|
||||||
|
Steel Hoe=
|
||||||
|
Bronze Hoe=
|
||||||
|
Mese Hoe=
|
||||||
|
Diamond Hoe=
|
||||||
|
Hoe=
|
||||||
|
Seed=
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -86,7 +86,7 @@ minetest.register_node("farming:soil_wet", {
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("farming:dry_soil", {
|
minetest.register_node("farming:dry_soil", {
|
||||||
description = S("Dry Soil"),
|
description = S("Savanna Soil"),
|
||||||
tiles = {"default_dry_dirt.png^farming_soil.png", "default_dry_dirt.png"},
|
tiles = {"default_dry_dirt.png^farming_soil.png", "default_dry_dirt.png"},
|
||||||
drop = "default:dry_dirt",
|
drop = "default:dry_dirt",
|
||||||
groups = {crumbly=3, not_in_creative_inventory=1, soil=2, grassland = 1, field = 1},
|
groups = {crumbly=3, not_in_creative_inventory=1, soil=2, grassland = 1, field = 1},
|
||||||
|
@ -99,7 +99,7 @@ minetest.register_node("farming:dry_soil", {
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("farming:dry_soil_wet", {
|
minetest.register_node("farming:dry_soil_wet", {
|
||||||
description = S("Wet Dry Soil"),
|
description = S("Wet Savanna Soil"),
|
||||||
tiles = {"default_dry_dirt.png^farming_soil_wet.png", "default_dry_dirt.png^farming_soil_wet_side.png"},
|
tiles = {"default_dry_dirt.png^farming_soil_wet.png", "default_dry_dirt.png^farming_soil_wet_side.png"},
|
||||||
drop = "default:dry_dirt",
|
drop = "default:dry_dirt",
|
||||||
groups = {crumbly=3, not_in_creative_inventory=1, soil=3, wet = 1, grassland = 1, field = 1},
|
groups = {crumbly=3, not_in_creative_inventory=1, soil=3, wet = 1, grassland = 1, field = 1},
|
||||||
|
@ -153,6 +153,13 @@ minetest.register_node("farming:straw", {
|
||||||
sounds = default.node_sound_leaves_defaults(),
|
sounds = default.node_sound_leaves_defaults(),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- Registered before the stairs so the stairs get fuel recipes.
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "fuel",
|
||||||
|
recipe = "farming:straw",
|
||||||
|
burntime = 3,
|
||||||
|
})
|
||||||
|
|
||||||
do
|
do
|
||||||
local recipe = "farming:straw"
|
local recipe = "farming:straw"
|
||||||
local groups = {snappy = 3, flammable = 4}
|
local groups = {snappy = 3, flammable = 4}
|
||||||
|
@ -223,6 +230,8 @@ minetest.register_abm({
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
-- Make default:grass_* occasionally drop wheat seed
|
||||||
|
|
||||||
for i = 1, 5 do
|
for i = 1, 5 do
|
||||||
minetest.override_item("default:grass_"..i, {drop = {
|
minetest.override_item("default:grass_"..i, {drop = {
|
||||||
max_items = 1,
|
max_items = 1,
|
||||||
|
@ -233,6 +242,14 @@ for i = 1, 5 do
|
||||||
}})
|
}})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- Make default:junglegrass occasionally drop cotton seed.
|
||||||
|
|
||||||
|
-- This is the old source of cotton seeds that makes no sense. It is a leftover
|
||||||
|
-- from Mapgen V6 where junglegrass was the only plant available to be a source.
|
||||||
|
-- This source is kept for now to avoid disruption but should probably be
|
||||||
|
-- removed in future as players get used to the new source.
|
||||||
|
|
||||||
minetest.override_item("default:junglegrass", {drop = {
|
minetest.override_item("default:junglegrass", {drop = {
|
||||||
max_items = 1,
|
max_items = 1,
|
||||||
items = {
|
items = {
|
||||||
|
@ -240,3 +257,26 @@ minetest.override_item("default:junglegrass", {drop = {
|
||||||
{items = {"default:junglegrass"}},
|
{items = {"default:junglegrass"}},
|
||||||
}
|
}
|
||||||
}})
|
}})
|
||||||
|
|
||||||
|
|
||||||
|
-- Wild cotton as a source of cotton seed
|
||||||
|
|
||||||
|
minetest.register_node("farming:cotton_wild", {
|
||||||
|
description = S("Wild Cotton"),
|
||||||
|
drawtype = "plantlike",
|
||||||
|
waving = 1,
|
||||||
|
tiles = {"farming_cotton_wild.png"},
|
||||||
|
inventory_image = "farming_cotton_wild.png",
|
||||||
|
wield_image = "farming_cotton_wild.png",
|
||||||
|
paramtype = "light",
|
||||||
|
sunlight_propagates = true,
|
||||||
|
walkable = false,
|
||||||
|
buildable_to = true,
|
||||||
|
groups = {snappy = 3, attached_node = 1, flammable = 4},
|
||||||
|
drop = "farming:seed_cotton",
|
||||||
|
sounds = default.node_sound_leaves_defaults(),
|
||||||
|
selection_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {-6 / 16, -8 / 16, -6 / 16, 6 / 16, 5 / 16, 6 / 16},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
BIN
mods/farming/textures/farming_cotton_wild.png
Normal file
After Width: | Height: | Size: 228 B |
|
@ -1,15 +1,12 @@
|
||||||
-- fire/init.lua
|
-- fire/init.lua
|
||||||
|
|
||||||
-- Global namespace for functions
|
-- Global namespace for functions
|
||||||
|
|
||||||
fire = {}
|
fire = {}
|
||||||
|
|
||||||
-- Load support for MT game translation.
|
-- Load support for MT game translation.
|
||||||
local S = minetest.get_translator("fire")
|
local S = minetest.get_translator("fire")
|
||||||
|
|
||||||
|
|
||||||
-- 'Enable fire' setting
|
-- 'Enable fire' setting
|
||||||
|
|
||||||
local fire_enabled = minetest.settings:get_bool("enable_fire")
|
local fire_enabled = minetest.settings:get_bool("enable_fire")
|
||||||
if fire_enabled == nil then
|
if fire_enabled == nil then
|
||||||
-- enable_fire setting not specified, check for disable_fire
|
-- enable_fire setting not specified, check for disable_fire
|
||||||
|
@ -27,33 +24,27 @@ end
|
||||||
--
|
--
|
||||||
|
|
||||||
-- Flood flame function
|
-- Flood flame function
|
||||||
|
local function flood_flame(pos, _, newnode)
|
||||||
local function flood_flame(pos, oldnode, newnode)
|
|
||||||
-- Play flame extinguish sound if liquid is not an 'igniter'
|
-- Play flame extinguish sound if liquid is not an 'igniter'
|
||||||
local nodedef = minetest.registered_items[newnode.name]
|
if minetest.get_item_group(newnode.name, "igniter") == 0 then
|
||||||
if not (nodedef and nodedef.groups and
|
|
||||||
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
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Flame nodes
|
-- Flame nodes
|
||||||
|
local fire_node = {
|
||||||
minetest.register_node("fire:basic_flame", {
|
|
||||||
drawtype = "firelike",
|
drawtype = "firelike",
|
||||||
tiles = {
|
tiles = {{
|
||||||
{
|
|
||||||
name = "fire_basic_flame_animated.png",
|
name = "fire_basic_flame_animated.png",
|
||||||
animation = {
|
animation = {
|
||||||
type = "vertical_frames",
|
type = "vertical_frames",
|
||||||
aspect_w = 16,
|
aspect_w = 16,
|
||||||
aspect_h = 16,
|
aspect_h = 16,
|
||||||
length = 1
|
length = 1
|
||||||
},
|
}}
|
||||||
},
|
|
||||||
},
|
},
|
||||||
inventory_image = "fire_basic_flame.png",
|
inventory_image = "fire_basic_flame.png",
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
|
@ -63,61 +54,36 @@ minetest.register_node("fire:basic_flame", {
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
floodable = true,
|
floodable = true,
|
||||||
damage_per_second = 4,
|
damage_per_second = 4,
|
||||||
groups = {igniter = 2, dig_immediate = 3, not_in_creative_inventory = 1},
|
groups = {igniter = 2, dig_immediate = 3, fire = 1},
|
||||||
drop = "",
|
drop = "",
|
||||||
|
on_flood = flood_flame
|
||||||
|
}
|
||||||
|
|
||||||
on_timer = function(pos)
|
-- Basic flame node
|
||||||
local f = minetest.find_node_near(pos, 1, {"group:flammable"})
|
local flame_fire_node = table.copy(fire_node)
|
||||||
if not fire_enabled or not f then
|
flame_fire_node.description = S("Fire")
|
||||||
|
flame_fire_node.groups.not_in_creative_inventory = 1
|
||||||
|
flame_fire_node.on_timer = function(pos)
|
||||||
|
if not minetest.find_node_near(pos, 1, {"group:flammable"}) then
|
||||||
minetest.remove_node(pos)
|
minetest.remove_node(pos)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
-- Restart timer
|
-- Restart timer
|
||||||
return true
|
return true
|
||||||
end,
|
end
|
||||||
|
flame_fire_node.on_construct = function(pos)
|
||||||
on_construct = function(pos)
|
|
||||||
if not fire_enabled then
|
|
||||||
minetest.remove_node(pos)
|
|
||||||
else
|
|
||||||
minetest.get_node_timer(pos):start(math.random(30, 60))
|
minetest.get_node_timer(pos):start(math.random(30, 60))
|
||||||
end
|
end
|
||||||
end,
|
|
||||||
|
|
||||||
on_flood = flood_flame,
|
minetest.register_node("fire:basic_flame", flame_fire_node)
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("fire:permanent_flame", {
|
-- Permanent flame node
|
||||||
description = S("Permanent Flame"),
|
local permanent_fire_node = table.copy(fire_node)
|
||||||
drawtype = "firelike",
|
permanent_fire_node.description = S("Permanent Fire")
|
||||||
tiles = {
|
|
||||||
{
|
|
||||||
name = "fire_basic_flame_animated.png",
|
|
||||||
animation = {
|
|
||||||
type = "vertical_frames",
|
|
||||||
aspect_w = 16,
|
|
||||||
aspect_h = 16,
|
|
||||||
length = 1
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
inventory_image = "fire_basic_flame.png",
|
|
||||||
paramtype = "light",
|
|
||||||
light_source = 13,
|
|
||||||
walkable = false,
|
|
||||||
buildable_to = true,
|
|
||||||
sunlight_propagates = true,
|
|
||||||
floodable = true,
|
|
||||||
damage_per_second = 4,
|
|
||||||
groups = {igniter = 2, dig_immediate = 3},
|
|
||||||
drop = "",
|
|
||||||
|
|
||||||
on_flood = flood_flame,
|
minetest.register_node("fire:permanent_flame", permanent_fire_node)
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
-- Flint and steel
|
|
||||||
|
|
||||||
|
-- Flint and Steel
|
||||||
minetest.register_tool("fire:flint_and_steel", {
|
minetest.register_tool("fire:flint_and_steel", {
|
||||||
description = S("Flint and Steel"),
|
description = S("Flint and Steel"),
|
||||||
inventory_image = "fire_flint_steel.png",
|
inventory_image = "fire_flint_steel.png",
|
||||||
|
@ -125,10 +91,8 @@ minetest.register_tool("fire:flint_and_steel", {
|
||||||
|
|
||||||
on_use = function(itemstack, user, pointed_thing)
|
on_use = function(itemstack, user, pointed_thing)
|
||||||
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}, true)
|
||||||
{pos = sound_pos, gain = 0.5, max_hear_distance = 8}
|
|
||||||
)
|
|
||||||
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
|
||||||
local node_under = minetest.get_node(pointed_thing.under).name
|
local node_under = minetest.get_node(pointed_thing.under).name
|
||||||
|
@ -152,9 +116,11 @@ minetest.register_tool("fire:flint_and_steel", {
|
||||||
-- Wear tool
|
-- Wear tool
|
||||||
local wdef = itemstack:get_definition()
|
local wdef = itemstack:get_definition()
|
||||||
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
|
||||||
|
@ -168,23 +134,21 @@ minetest.register_craft({
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
-- Override coalblock to enable permanent flame above
|
-- Override coalblock to enable permanent flame above
|
||||||
-- Coalblock is non-flammable to avoid unwanted basic_flame nodes
|
-- Coalblock is non-flammable to avoid unwanted basic_flame nodes
|
||||||
|
|
||||||
minetest.override_item("default:coalblock", {
|
minetest.override_item("default:coalblock", {
|
||||||
after_destruct = function(pos, oldnode)
|
after_destruct = function(pos)
|
||||||
pos.y = pos.y + 1
|
pos.y = pos.y + 1
|
||||||
if minetest.get_node(pos).name == "fire:permanent_flame" then
|
if minetest.get_node(pos).name == "fire:permanent_flame" then
|
||||||
minetest.remove_node(pos)
|
minetest.remove_node(pos)
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
on_ignite = function(pos, igniter)
|
on_ignite = function(pos)
|
||||||
local flame_pos = {x = pos.x, y = pos.y + 1, z = pos.z}
|
local flame_pos = {x = pos.x, y = pos.y + 1, z = pos.z}
|
||||||
if minetest.get_node(flame_pos).name == "air" then
|
if minetest.get_node(flame_pos).name == "air" then
|
||||||
minetest.set_node(flame_pos, {name = "fire:permanent_flame"})
|
minetest.set_node(flame_pos, {name = "fire:permanent_flame"})
|
||||||
end
|
end
|
||||||
end,
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
@ -192,24 +156,18 @@ minetest.override_item("default:coalblock", {
|
||||||
-- Sound
|
-- Sound
|
||||||
--
|
--
|
||||||
|
|
||||||
local flame_sound = minetest.settings:get_bool("flame_sound")
|
|
||||||
if flame_sound == nil then
|
|
||||||
-- Enable if no setting present
|
-- Enable if no setting present
|
||||||
flame_sound = true
|
local flame_sound = minetest.settings:get_bool("flame_sound", true)
|
||||||
end
|
|
||||||
|
|
||||||
if flame_sound then
|
if flame_sound then
|
||||||
|
|
||||||
local handles = {}
|
local handles = {}
|
||||||
local timer = 0
|
local timer = 0
|
||||||
|
|
||||||
-- Parameters
|
-- Parameters
|
||||||
|
|
||||||
local radius = 8 -- Flame node search radius around player
|
local radius = 8 -- Flame node search radius around player
|
||||||
local cycle = 3 -- Cycle time for sound updates
|
local cycle = 3 -- Cycle time for sound updates
|
||||||
|
|
||||||
-- Update sound for player
|
-- Update sound for player
|
||||||
|
|
||||||
function fire.update_player_sound(player)
|
function fire.update_player_sound(player)
|
||||||
local player_name = player:get_player_name()
|
local player_name = player:get_player_name()
|
||||||
-- Search for flame nodes in radius around player
|
-- Search for flame nodes in radius around player
|
||||||
|
@ -261,16 +219,13 @@ if flame_sound then
|
||||||
fposmid = vector.divide(vector.add(fposmin, fposmax), 2)
|
fposmid = vector.divide(vector.add(fposmin, fposmax), 2)
|
||||||
end
|
end
|
||||||
-- Play sound
|
-- Play sound
|
||||||
local handle = minetest.sound_play(
|
local handle = minetest.sound_play("fire_fire", {
|
||||||
"fire_fire",
|
|
||||||
{
|
|
||||||
pos = fposmid,
|
pos = fposmid,
|
||||||
to_player = player_name,
|
to_player = player_name,
|
||||||
gain = math.min(0.06 * (1 + flames * 0.125), 0.18),
|
gain = math.min(0.06 * (1 + flames * 0.125), 0.18),
|
||||||
max_hear_distance = 32,
|
max_hear_distance = 32,
|
||||||
loop = true, -- In case of lag
|
loop = true -- In case of lag
|
||||||
}
|
})
|
||||||
)
|
|
||||||
-- Store sound handle for this player
|
-- Store sound handle for this player
|
||||||
if handle then
|
if handle then
|
||||||
handles[player_name] = handle
|
handles[player_name] = handle
|
||||||
|
@ -279,7 +234,6 @@ if flame_sound then
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Cycle for updating players sounds
|
-- Cycle for updating players sounds
|
||||||
|
|
||||||
minetest.register_globalstep(function(dtime)
|
minetest.register_globalstep(function(dtime)
|
||||||
timer = timer + dtime
|
timer = timer + dtime
|
||||||
if timer < cycle then
|
if timer < cycle then
|
||||||
|
@ -294,7 +248,6 @@ if flame_sound then
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- Stop sound and clear handle on player leave
|
-- Stop sound and clear handle on player leave
|
||||||
|
|
||||||
minetest.register_on_leaveplayer(function(player)
|
minetest.register_on_leaveplayer(function(player)
|
||||||
local player_name = player:get_player_name()
|
local player_name = player:get_player_name()
|
||||||
if handles[player_name] then
|
if handles[player_name] then
|
||||||
|
@ -306,19 +259,14 @@ end
|
||||||
|
|
||||||
|
|
||||||
-- Deprecated function kept temporarily to avoid crashes if mod fire nodes call it
|
-- Deprecated function kept temporarily to avoid crashes if mod fire nodes call it
|
||||||
|
function fire.update_sounds_around() end
|
||||||
function fire.update_sounds_around(pos)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- ABMs
|
-- ABMs
|
||||||
--
|
--
|
||||||
|
|
||||||
if fire_enabled then
|
if fire_enabled then
|
||||||
|
|
||||||
-- Ignite neighboring nodes, add basic flames
|
-- Ignite neighboring nodes, add basic flames
|
||||||
|
|
||||||
minetest.register_abm({
|
minetest.register_abm({
|
||||||
label = "Ignite flame",
|
label = "Ignite flame",
|
||||||
nodenames = {"group:flammable"},
|
nodenames = {"group:flammable"},
|
||||||
|
@ -331,11 +279,10 @@ if fire_enabled then
|
||||||
if p then
|
if p then
|
||||||
minetest.set_node(p, {name = "fire:basic_flame"})
|
minetest.set_node(p, {name = "fire:basic_flame"})
|
||||||
end
|
end
|
||||||
end,
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Remove flammable nodes around basic flame
|
-- Remove flammable nodes around basic flame
|
||||||
|
|
||||||
minetest.register_abm({
|
minetest.register_abm({
|
||||||
label = "Remove flammable nodes",
|
label = "Remove flammable nodes",
|
||||||
nodenames = {"fire:basic_flame"},
|
nodenames = {"fire:basic_flame"},
|
||||||
|
@ -356,7 +303,6 @@ if fire_enabled then
|
||||||
minetest.remove_node(p)
|
minetest.remove_node(p)
|
||||||
minetest.check_for_falling(p)
|
minetest.check_for_falling(p)
|
||||||
end
|
end
|
||||||
end,
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
# textdomain: fire
|
# textdomain: fire
|
||||||
Permanent Flame=Permanente Flamme
|
Fire=Feuer
|
||||||
|
Permanent Fire=Permanentes Feuer
|
||||||
Flint and Steel=Feuerstein und Stahl
|
Flint and Steel=Feuerstein und Stahl
|
||||||
|
|
4
mods/fire/locale/fire.id.tr
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
# textdomain: fire
|
||||||
|
Fire=Api
|
||||||
|
Permanent Fire=Api Abadi
|
||||||
|
Flint and Steel=Pemantik
|