Mods update

master
daretmavi 2021-04-25 17:59:28 +02:00
parent 6edafb7165
commit ba28e54422
51 changed files with 966 additions and 137 deletions

View File

@ -1,6 +1,6 @@
origin https://github.com/minetest/minetest_game.git (fetch)
* master 42baede [origin/master] Add specific groups to different types of grass (#2852)
* master c6171a8 [origin/master] Add Esperanto translation (#2739)
Mod: minetest_game/mods/beds
Mod: minetest_game/mods/binoculars
Mod: minetest_game/mods/boats
@ -73,11 +73,11 @@ origin https://github.com/minetest-mods/dynamic_liquid (fetch)
Mod: environment/dynamic_liquid
origin https://notabug.org/tenplus1/farming (fetch)
* master f1d52b4 [origin/master] reduce shapeless crafts
* master 4b033fe [origin/master] add new melon textures (thanks 7eventy7)
Mod: flora/farming
origin https://github.com/minetest-mods/i3.git (fetch)
* main f85b0f7 [origin/main] Tweaking
* main 859feb4 [origin/main] Minor cleaning
Mod: gui/i3
origin https://repo.or.cz/minetest_hbarmor.git (fetch)
@ -89,7 +89,7 @@ origin https://repo.or.cz/minetest_hudbars.git (fetch)
Mod: gui/minetest_hudbars
origin git://repo.or.cz/minetest_show_wielded_item.git (fetch)
* master 83f1997 [origin/master] Add z_index to HUD definition
* master 6f40e88 [origin/master] Version 1.2.0
Mod: gui/minetest_show_wielded_item
origin https://repo.or.cz/minetest_tt_base.git (fetch)
@ -113,11 +113,11 @@ origin https://github.com/TheTermos/mobkit (fetch)
Mod: lib_api/mobkit
origin https://notabug.org/tenplus1/mobs_redo (fetch)
* master c023ecc [origin/master] reduce shapeless crafts
* master 70c68f6 [origin/master] change so only players can push mobs
Mod: lib_api/mobs_redo
origin https://github.com/appgurueu/modlib (fetch)
* master fc683ce [origin/master] Bump version
* master 68f6573 [origin/master] Bump version
Mod: lib_api/modlib
origin git@github.com:runsy/rcbows.git (fetch)
@ -161,11 +161,11 @@ origin https://github.com/runsy/petz (fetch)
Mod: mobs/mobs_mobkit/petz
origin https://github.com/berengma/water_life (fetch)
* master caf92f0 [origin/master] add more nil checks
* master 1919e32 [origin/master] Merge pull request #75 from berengma/test
Mod: mobs/mobs_mobkit/water_life
origin https://github.com/minetest-mods/3d_armor (fetch)
* master e75af55 [origin/master] Fix translation nonsense in minetest.log
* master f07f050 [origin/master] Silence warnings when ui is not enabled
Mod: player/3d_armor
origin https://github.com/appgurueu/character_anim (fetch)

View File

@ -74,14 +74,19 @@ minetest.register_node("farming:melon_7", table.copy(def))
-- stage 8 (final)
def.drawtype = "nodebox"
def.description = S("Melon")
def.tiles = {"farming_melon_top.png", "farming_melon_top.png", "farming_melon_side.png"}
def.tiles = {
"farming_melon_top.png", "farming_melon_bottom.png", "farming_melon_side.png"
}
def.selection_box = {-.5, -.5, -.5, .5, .5, .5}
def.walkable = true
def.buildable_to = false
def.paramtype2 = "facedir"
def.groups = {
food_melon = 1, snappy = 2, oddly_breakable_by_hand = 1,
flammable = 2, plant = 1
}
def.drop = "farming:melon_8"
def.on_place = minetest.rotate_node
minetest.register_node("farming:melon_8", table.copy(def))
-- add to registered_plants

View File

@ -63,6 +63,11 @@ Created by VanessaE (License: CC BY 3.0):
farming_cotton_7.png
farming_cotton_8.png
Created by 7eventy7 (https://www.planetminecraft.com/member/7eventy7/)
farming_melon_top.png
farming_melon_side.png
farming_melon_bottom.png
Created by Doc (License: CC BY 3.0):
farming_cucumber.png
farming_cucumber_1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 270 B

After

Width:  |  Height:  |  Size: 179 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 272 B

After

Width:  |  Height:  |  Size: 193 B

View File

@ -46,6 +46,6 @@ Report any bug on the [**Bug Tracker**](https://github.com/minetest-mods/i3/issu
Love this mod? Donations are appreciated: https://www.paypal.me/jpg84240
Demo video: https://www.youtube.com/watch?v=25nCAaqeacU
Demo video (outdated): https://www.youtube.com/watch?v=25nCAaqeacU
![Preview](https://user-images.githubusercontent.com/7883281/109045805-4f450600-76d4-11eb-90f7-b99ab939246a.png)
![Preview](https://user-images.githubusercontent.com/7883281/115294125-7827cb80-a158-11eb-89f1-1f533621a9fe.png)

View File

@ -1162,19 +1162,20 @@ local function spawn_item(player, stack)
core.add_item(look_at, stack)
end
local function get_stack(player, pname, stack, message)
local function get_stack(player, stack, str)
local inv = player:get_inventory()
local name = player:get_player_name()
if inv:room_for_item("main", stack) then
inv:add_item("main", stack)
msg(pname, S("@1 added in your inventory", message))
msg(name, S("@1 added in your inventory", str))
else
spawn_item(player, stack)
msg(pname, S("@1 spawned", message))
msg(name, S("@1 spawned", str))
end
end
local function craft_stack(player, pname, data, craft_rcp)
local function craft_stack(player, data, craft_rcp)
local inv = player:get_inventory()
local rcp_usg = craft_rcp and "recipe" or "usage"
local output = craft_rcp and data.recipes[data.rnum].output or data.usages[data.unum].output
@ -1216,16 +1217,16 @@ local function craft_stack(player, pname, data, craft_rcp)
for _ = 1, iter do
local c = min(stackmax, leftover)
local message
local str
if c > 1 then
message = clr("#ff0", fmt("%s x %s", c, desc))
str = clr("#ff0", fmt("%s x %s", c, desc))
else
message = clr("#ff0", fmt("%s", desc))
str = clr("#ff0", fmt("%s", desc))
end
local stack = ItemStack(fmt("%s %s", stackname, c))
get_stack(player, pname, stack, message)
get_stack(player, stack, str)
leftover = leftover - stackmax
end
end
@ -1257,7 +1258,7 @@ local function select_item(player, name, data, _f)
local stack = ItemStack(item)
local stackmax = stack:get_stack_max()
stack = fmt("%s %s", item, stackmax)
return get_stack(player, name, stack, clr("#ff0", fmt("%u x %s", stackmax, get_desc(item))))
return get_stack(player, stack, clr("#ff0", fmt("%u x %s", stackmax, get_desc(item))))
end
if item == data.query_item then return end
@ -1279,14 +1280,6 @@ local function repairable(tool)
return toolrepair and def and def.groups and def.groups.disable_repair ~= 1
end
local function get_waypoint(data, id)
for i, v in ipairs(data.waypoints) do
if id == v.id then
return v, i
end
end
end
local function is_fav(favs, query_item)
local fav, i
for j = 1, #favs do
@ -1838,21 +1831,24 @@ local function get_panels(player, data, fs)
end
end
local function add_subtitle(fs, name, y, ctn_len, font_size, label)
local function add_subtitle(fs, name, y, ctn_len, font_size, sep, label)
fs(fmt("style[%s;font=bold;font_size=%u]", name, font_size))
fs("button", 0, y, ctn_len, 0.5, name, ESC(label))
fs("image", 0, y + 0.55, ctn_len, 0.035, PNG.bar)
if sep then
fs("image", 0, y + 0.55, ctn_len, 0.035, PNG.bar)
end
end
local function get_award_list(data, fs, ctn_len, yextra, award_list, awards_unlocked, award_list_nb)
local percent = fmt("%.1f%%", (awards_unlocked * 100) / award_list_nb):gsub(".0", "")
add_subtitle(fs, "awards", yextra, ctn_len, 18,
add_subtitle(fs, "awards", yextra, ctn_len, 18, false,
ES("Achievements: @1 of @2 (@3)", awards_unlocked, award_list_nb, percent))
for i = 1, award_list_nb do
local award = award_list[i]
local y = yextra - 0.5 + i + (i * 0.3)
local y = yextra - 0.6 + i + (i * 0.3)
local def, progress = award.def, award.progress
local title, desc = def.title, def.description
@ -1920,10 +1916,9 @@ local function get_waypoint_fs(fs, data, name, yextra, ctn_len)
fs(fmt("tooltip[waypoint_add;%s]", ES"Add waypoint"))
if #data.waypoints == 0 then return end
fs("image", 0, yextra + 2, ctn_len, 0.035, PNG.bar)
for i, v in ipairs(data.waypoints) do
local y = yextra + 1.65 + (i - (i * 0.3))
local y = yextra + 1.35 + (i - (i * 0.3))
local icon_size, yi = 0.35, y + 0.12
fs("style_type[box;colors=#bababa30,#bababa30,#bababa05,#bababa05]")
@ -1945,23 +1940,23 @@ local function get_waypoint_fs(fs, data, name, yextra, ctn_len)
fs("label", 0.15, y + 0.33, clr(fmt("#%s", hex), waypoint_name))
local del = fmt("waypoint_%u_delete", v.id)
local del = fmt("waypoint_%u_delete", i)
fs(fmt("style[%s;fgimg=%s;fgimg_hovered=%s;content_offset=0]", del, PNG.trash, PNG.trash_hover))
fs("image_button", ctn_len - 0.5, yi, icon_size, icon_size, "", del, "")
fs(fmt("tooltip[%s;%s]", del, ES"Remove waypoint"))
local rfs = fmt("waypoint_%u_refresh", v.id)
local rfs = fmt("waypoint_%u_refresh", i)
fs(fmt("style[%s;fgimg=%s;fgimg_hovered=%s;content_offset=0]", rfs, PNG.refresh, PNG.refresh_hover))
fs("image_button", ctn_len - 1, yi, icon_size, icon_size, "", rfs, "")
fs(fmt("tooltip[%s;%s]", rfs, ES"Change color"))
local vsb = fmt("waypoint_%u_hide", v.id)
local vsb = fmt("waypoint_%u_hide", i)
fs(fmt("style[%s;fgimg=%s;content_offset=0]", vsb, v.hide and PNG.nonvisible or PNG.visible))
fs("image_button", ctn_len - 1.5, yi, icon_size, icon_size, "", vsb, "")
fs(fmt("tooltip[%s;%s]", vsb, v.hide and ES"Show waypoint" or ES"Hide waypoint"))
if core.is_creative_enabled(name) then
local tp = fmt("waypoint_%u_teleport", v.id)
local tp = fmt("waypoint_%u_teleport", i)
fs(fmt("style[%s;fgimg=%s;fgimg_hovered=%s;content_offset=0]",
tp, PNG.teleport, PNG.teleport_hover))
@ -1976,7 +1971,7 @@ end
local function get_ctn_content(fs, data, player, yoffset, ctn_len, award_list, awards_unlocked, award_list_nb)
local name = player:get_player_name()
add_subtitle(fs, "player_name", 0, ctn_len, 22, ESC(name))
add_subtitle(fs, "player_name", 0, ctn_len, 22, true, ESC(name))
local hp = damage_enabled and (data.hp or player:get_hp()) or 20
local half = ceil((hp / 2) % 1)
@ -2059,14 +2054,15 @@ local function get_ctn_content(fs, data, player, yoffset, ctn_len, award_list, a
sks = concat(sks, ","):gsub(";", "")
fs(fmt("dropdown[0,%f;4,0.6;skins;%s;%u;true]", yextra + 0.7, sks, data.skin_id or 1))
fs("label", 0, yextra + 0.85, fmt("%s:", ES"Select a skin"))
fs(fmt("dropdown[0,%f;4,0.6;skins;%s;%u;true]", yextra + 1.1, sks, data.skin_id or 1))
else
not_installed("skinsdb")
end
elseif data.subcat == 4 then
if __awards then
yextra = yextra + 0.8
yextra = yextra + 0.7
get_award_list(data, fs, ctn_len, yextra, award_list, awards_unlocked, award_list_nb)
else
not_installed("awards")
@ -2365,7 +2361,7 @@ local function panel_fields(player, data, fields)
data.scrbar_usg = sb_usg and tonum(match(sb_usg, "%d+"))
elseif fields.craft_rcp or fields.craft_usg then
craft_stack(player, name, data, fields.craft_rcp)
craft_stack(player, data, fields.craft_rcp)
else
select_item(player, name, data, fields)
end
@ -2416,12 +2412,18 @@ local function get_inventory_fs(player, data, fs)
if props.mesh ~= "" then
local anim = player:get_local_animation()
--fs("style[player_model;bgcolor=black]")
local armor_skin = __3darmor or __skinsdb
local t = {}
for _, v in ipairs(props.textures) do
t[#t + 1] = ESC(v):gsub(",", "!")
end
local textures = concat(t, ","):gsub("!", ",")
--fs("style[player_model;bgcolor=black]")
fs("model", 0.2, 0.2, armor_skin and 4 or 3.4, armor_skin and ctn_hgt or 5.8,
"player_model",
props.mesh, concat(props.textures, ","), "0,-150", "false", "false",
"player_model", props.mesh, textures, "0,-150", "false", "false",
fmt("%u,%u", anim.x, anim.y))
else
local size = 2.5
@ -2566,11 +2568,12 @@ i3.new_tab {
elseif find(field, "waypoint_%d+") then
local id, action = match(field, "_(%d+)_(%w+)$")
id = tonum(id)
local waypoint, _id = get_waypoint(data, id)
local waypoint = data.waypoints[id]
if not waypoint then return end
if action == "delete" then
player:hud_remove(waypoint.id)
remove(data.waypoints, _id)
remove(data.waypoints, id)
elseif action == "teleport" then
local pos = waypoint.pos
@ -2582,7 +2585,7 @@ i3.new_tab {
elseif action == "refresh" then
local color = random(0xffffff)
waypoint.color = color
player:hud_change(id, "number", color)
player:hud_change(waypoint.id, "number", color)
elseif action == "hide" then
if waypoint.hide then
@ -2948,30 +2951,32 @@ end)
local function init_backpack(player)
local name = player:get_player_name()
local data = pdata[name]
local inv = player:get_inventory()
local player_inv = player:get_inventory()
player_inv:set_size("main", INV_SIZE)
inv:set_size("main", INV_SIZE)
data.bag = create_inventory(fmt("%s_backpack", name), {
allow_put = function(inv, listname, _, stack)
local empty = inv:get_stack(listname, 1):is_empty()
allow_put = function(_inv, listname, _, stack)
local empty = _inv:get_stack(listname, 1):is_empty()
if empty and sub(stack:get_name(), 1, 7) == "i3:bag_" then
return 1
end
msg(name, ES"This is not a backpack")
return 0
end,
on_put = function(_, _, _, stack)
data.bag_size = match(stack:get_name(), "_(%w+)$")
player_inv:set_size("main", BAG_SIZES[data.bag_size])
inv:set_size("main", BAG_SIZES[data.bag_size])
set_fs(player)
end,
on_take = function()
for i = INV_SIZE + 1, BAG_SIZES[data.bag_size] do
local stack = player_inv:get_stack("main", i)
local stack = inv:get_stack("main", i)
if not stack:is_empty() then
spawn_item(player, stack)
@ -2979,7 +2984,7 @@ local function init_backpack(player)
end
data.bag_size = nil
player_inv:set_size("main", INV_SIZE)
inv:set_size("main", INV_SIZE)
set_fs(player)
end,
@ -2989,7 +2994,7 @@ local function init_backpack(player)
if data.bag_size then
data.bag:set_stack("main", 1, fmt("i3:bag_%s", data.bag_size))
player_inv:set_size("main", BAG_SIZES[data.bag_size])
inv:set_size("main", BAG_SIZES[data.bag_size])
end
end

View File

@ -1279,14 +1279,6 @@ local function repairable(tool)
return toolrepair and def and def.groups and def.groups.disable_repair ~= 1
end
local function get_waypoint(data, id)
for i, v in ipairs(data.waypoints) do
if id == v.id then
return v, i
end
end
end
local function is_fav(favs, query_item)
local fav, i
for j = 1, #favs do
@ -1838,21 +1830,24 @@ local function get_panels(player, data, fs)
end
end
local function add_subtitle(fs, name, y, ctn_len, font_size, label)
local function add_subtitle(fs, name, y, ctn_len, font_size, sep, label)
fs(fmt("style[%s;font=bold;font_size=%u]", name, font_size))
fs("button", 0, y, ctn_len, 0.5, name, ESC(label))
fs("image", 0, y + 0.55, ctn_len, 0.035, PNG.bar)
if sep then
fs("image", 0, y + 0.55, ctn_len, 0.035, PNG.bar)
end
end
local function get_award_list(data, fs, ctn_len, yextra, award_list, awards_unlocked, award_list_nb)
local percent = fmt("%.1f%%", (awards_unlocked * 100) / award_list_nb):gsub(".0", "")
add_subtitle(fs, "awards", yextra, ctn_len, 18,
add_subtitle(fs, "awards", yextra, ctn_len, 18, false,
ES("Achievements: @1 of @2 (@3)", awards_unlocked, award_list_nb, percent))
for i = 1, award_list_nb do
local award = award_list[i]
local y = yextra - 0.5 + i + (i * 0.3)
local y = yextra - 0.6 + i + (i * 0.3)
local def, progress = award.def, award.progress
local title, desc = def.title, def.description
@ -1920,10 +1915,9 @@ local function get_waypoint_fs(fs, data, name, yextra, ctn_len)
fs(fmt("tooltip[waypoint_add;%s]", ES"Add waypoint"))
if #data.waypoints == 0 then return end
fs("image", 0, yextra + 2, ctn_len, 0.035, PNG.bar)
for i, v in ipairs(data.waypoints) do
local y = yextra + 1.65 + (i - (i * 0.3))
local y = yextra + 1.35 + (i - (i * 0.3))
local icon_size, yi = 0.35, y + 0.12
fs("style_type[box;colors=#bababa30,#bababa30,#bababa05,#bababa05]")
@ -1945,23 +1939,23 @@ local function get_waypoint_fs(fs, data, name, yextra, ctn_len)
fs("label", 0.15, y + 0.33, clr(fmt("#%s", hex), waypoint_name))
local del = fmt("waypoint_%u_delete", v.id)
local del = fmt("waypoint_%u_delete", i)
fs(fmt("style[%s;fgimg=%s;fgimg_hovered=%s;content_offset=0]", del, PNG.trash, PNG.trash_hover))
fs("image_button", ctn_len - 0.5, yi, icon_size, icon_size, "", del, "")
fs(fmt("tooltip[%s;%s]", del, ES"Remove waypoint"))
local rfs = fmt("waypoint_%u_refresh", v.id)
local rfs = fmt("waypoint_%u_refresh", i)
fs(fmt("style[%s;fgimg=%s;fgimg_hovered=%s;content_offset=0]", rfs, PNG.refresh, PNG.refresh_hover))
fs("image_button", ctn_len - 1, yi, icon_size, icon_size, "", rfs, "")
fs(fmt("tooltip[%s;%s]", rfs, ES"Change color"))
local vsb = fmt("waypoint_%u_hide", v.id)
local vsb = fmt("waypoint_%u_hide", i)
fs(fmt("style[%s;fgimg=%s;content_offset=0]", vsb, v.hide and PNG.nonvisible or PNG.visible))
fs("image_button", ctn_len - 1.5, yi, icon_size, icon_size, "", vsb, "")
fs(fmt("tooltip[%s;%s]", vsb, v.hide and ES"Show waypoint" or ES"Hide waypoint"))
if core.is_creative_enabled(name) then
local tp = fmt("waypoint_%u_teleport", v.id)
local tp = fmt("waypoint_%u_teleport", i)
fs(fmt("style[%s;fgimg=%s;fgimg_hovered=%s;content_offset=0]",
tp, PNG.teleport, PNG.teleport_hover))
@ -1976,7 +1970,7 @@ end
local function get_ctn_content(fs, data, player, yoffset, ctn_len, award_list, awards_unlocked, award_list_nb)
local name = player:get_player_name()
add_subtitle(fs, "player_name", 0, ctn_len, 22, ESC(name))
add_subtitle(fs, "player_name", 0, ctn_len, 22, true, ESC(name))
local hp = damage_enabled and (data.hp or player:get_hp()) or 20
local half = ceil((hp / 2) % 1)
@ -2055,14 +2049,15 @@ local function get_ctn_content(fs, data, player, yoffset, ctn_len, award_list, a
sks = concat(sks, ","):gsub(";", "")
fs(fmt("dropdown[0,%f;4,0.6;skins;%s;%u;true]", yextra + 0.7, sks, data.skin_id or 1))
fs("label", 0, yextra + 0.85, fmt("%s:", ES"Select a skin"))
fs(fmt("dropdown[0,%f;4,0.6;skins;%s;%u;true]", yextra + 1.1, sks, data.skin_id or 1))
else
not_installed("skinsdb")
end
elseif data.subcat == 4 then
if __awards then
yextra = yextra + 0.8
yextra = yextra + 0.7
get_award_list(data, fs, ctn_len, yextra, award_list, awards_unlocked, award_list_nb)
else
not_installed("awards")
@ -2412,12 +2407,18 @@ local function get_inventory_fs(player, data, fs)
if props.mesh ~= "" then
local anim = player:get_local_animation()
--fs("style[player_model;bgcolor=black]")
local armor_skin = __3darmor or __skinsdb
local t = {}
for _, v in ipairs(props.textures) do
t[#t + 1] = ESC(v):gsub(",", "!")
end
local textures = concat(t, ","):gsub("!", ",")
--fs("style[player_model;bgcolor=black]")
fs("model", 0.2, 0.2, armor_skin and 4 or 3.4, armor_skin and ctn_hgt or 5.8,
"player_model",
props.mesh, concat(props.textures, ","), "0,-150", "false", "false",
"player_model", props.mesh, textures, "0,-150", "false", "false",
fmt("%u,%u", anim.x, anim.y))
else
local size = 2.5
@ -2561,11 +2562,12 @@ i3.new_tab {
elseif find(field, "waypoint_%d+") then
local id, action = match(field, "_(%d+)_(%w+)$")
id = tonum(id)
local waypoint, _id = get_waypoint(data, id)
local waypoint = data.waypoints[id]
if not waypoint then return end
if action == "delete" then
player:hud_remove(waypoint.id)
remove(data.waypoints, _id)
remove(data.waypoints, id)
elseif action == "teleport" then
local pos = waypoint.pos
@ -2577,7 +2579,7 @@ i3.new_tab {
elseif action == "refresh" then
local color = random(0xffffff)
waypoint.color = color
player:hud_change(id, "number", color)
player:hud_change(waypoint.id, "number", color)
elseif action == "hide" then
if waypoint.hide then
@ -2943,30 +2945,32 @@ end)
local function init_backpack(player)
local name = player:get_player_name()
local data = pdata[name]
local inv = player:get_inventory()
local player_inv = player:get_inventory()
player_inv:set_size("main", INV_SIZE)
inv:set_size("main", INV_SIZE)
data.bag = create_inventory(fmt("%s_backpack", name), {
allow_put = function(inv, listname, _, stack)
local empty = inv:get_stack(listname, 1):is_empty()
allow_put = function(_inv, listname, _, stack)
local empty = _inv:get_stack(listname, 1):is_empty()
if empty and sub(stack:get_name(), 1, 7) == "i3:bag_" then
return 1
end
msg(name, ES"This is not a backpack")
return 0
end,
on_put = function(_, _, _, stack)
data.bag_size = match(stack:get_name(), "_(%w+)$")
player_inv:set_size("main", BAG_SIZES[data.bag_size])
inv:set_size("main", BAG_SIZES[data.bag_size])
set_fs(player)
end,
on_take = function()
for i = INV_SIZE + 1, BAG_SIZES[data.bag_size] do
local stack = player_inv:get_stack("main", i)
local stack = inv:get_stack("main", i)
if not stack:is_empty() then
spawn_item(player, stack)
@ -2974,7 +2978,7 @@ local function init_backpack(player)
end
data.bag_size = nil
player_inv:set_size("main", INV_SIZE)
inv:set_size("main", INV_SIZE)
set_fs(player)
end,
@ -2984,7 +2988,7 @@ local function init_backpack(player)
if data.bag_size then
data.bag:set_stack("main", 1, fmt("i3:bag_%s", data.bag_size))
player_inv:set_size("main", BAG_SIZES[data.bag_size])
inv:set_size("main", BAG_SIZES[data.bag_size])
end
end

View File

@ -5,7 +5,7 @@ statbars.
This mod is compatible with the HUD Bars [`hudbars`] mod.
Compability with other HUD-related mods is possible, but not guaranteed.
Version: 1.0.0
Version: 1.2.0
## Credits
Released by Wuzzy.

View File

@ -1 +0,0 @@
Displays the name of the wielded item.

View File

@ -42,7 +42,7 @@ local function set_hud(player)
alignment = {x=0, y=0},
number = 0xFFFFFF ,
text = "",
z_index = 10,
z_index = 100,
})
end
@ -60,6 +60,15 @@ minetest.register_on_leaveplayer(function(player)
wieldindex[name] = nil
end)
local function get_first_line(text)
-- Cut off text after first newline
local firstnewline = string.find(text, "\n")
if firstnewline then
text = string.sub(text, 1, firstnewline-1)
end
return text
end
minetest.register_globalstep(function(dtime)
for _, player in pairs(minetest.get_connected_players()) do
local player_name = player:get_player_name()
@ -82,26 +91,43 @@ minetest.register_globalstep(function(dtime)
if huds[player_name] then
-- Get description (various fallback checks for old Minetest versions)
local def = minetest.registered_items[wname]
local meta = wstack:get_meta()
--[[ Get description. Order of preference:
* description from metadata
* description from item definition
* itemstring ]]
local desc = meta:get_string("description")
if (desc == nil or desc == "") and def then
desc = def.description
local desc
if wstack.get_short_description then
-- get_short_description()
desc = wstack:get_short_description()
end
if desc == nil or desc == "" then
if (not desc or desc == "") and wstack.get_description then
-- get_description()
desc = wstack:get_description()
desc = get_first_line(desc)
end
if (not desc or desc == "") and not wstack.get_description then
-- Metadata (old versions only)
local meta = wstack:get_meta()
desc = meta:get_string("description")
desc = get_first_line(desc)
end
if not desc or desc == "" then
-- Item definition
desc = def.description
desc = get_first_line(desc)
end
if not desc or desc == "" then
-- Final fallback: itemstring
desc = wname
end
-- Cut off item description after first newline
local firstnewline = string.find(desc, "\n")
if firstnewline then
desc = string.sub(desc, 1, firstnewline-1)
-- Print description
if desc then
-- Optionally append the 'technical' itemname
local tech = minetest.settings:get_bool("show_wielded_item_itemname", false)
if tech and desc ~= "" then
desc = desc .. " ["..wname.."]"
end
player:hud_change(huds[player_name], 'text', desc)
end
player:hud_change(huds[player_name], 'text', desc)
end
end
end

View File

@ -1 +1,3 @@
name = show_wielded_item
description = Displays the name of the wielded item.
optional_depends = hudbars

View File

@ -1,3 +1,6 @@
#If true, also append the 'technical' itemname.
show_wielded_item_itemname (Show technical itemname) bool false
#Use this setting to manually set the vertical offset of the label which shows
#the name of the wielded item. The offset is in pixels from the bottom of the
#screen.

View File

@ -8,7 +8,7 @@ local use_cmi = minetest.global_exists("cmi")
mobs = {
mod = "redo",
version = "20210411",
version = "20210418",
intllib = S,
invis = minetest.global_exists("invisibility") and invisibility or {}
}
@ -224,10 +224,10 @@ function mob_class:collision()
for _,object in ipairs(minetest.get_objects_inside_radius(pos, width)) do
if object:is_player()
or (object:get_luaentity()
and object:get_luaentity()._cmi_is_mob == true
and object ~= self.object) then
if object:is_player() then
-- or (object:get_luaentity()
-- and object:get_luaentity()._cmi_is_mob == true
-- and object ~= self.object) then
local pos2 = object:get_pos()
local vec = {x = pos.x - pos2.x, z = pos.z - pos2.z}

View File

@ -10,6 +10,23 @@ No dependencies. Licensed under the MIT License. Written by Lars Mueller aka LMD
Mostly self-documenting code. Mod namespace is `modlib` or `_ml`, containing all variables & functions.
### Persistence
#### Lua Log Files
A data log file based on Lua statements. **Experimental.** High performance. Example from `test.lua`:
```lua
local logfile = persistence.lua_log_file.new(mod.get_resource"logfile.test.lua", {})
logfile:init()
logfile.root = {}
logfile:rewrite()
logfile:set_root({a = 1}, {b = 2, c = 3})
logfile:close()
logfile:init()
assert(table.equals(logfile.root, {[{a = 1}] = {b = 2, c = 3}}))
```
### Bluon
Binary Lua object notation. **Experimental.** Handling of subnormal numbers (very small floats) may be broken.
@ -205,7 +222,20 @@ This is best left explicit. First, you shouldn't be using numbered field keys if
4. [`json`](https://json.org)
* Not recommended
## Versions
## Release Notes
### `rolling-68`
* Replace changelog by release notes (see the commit log for changes)
### `rolling-67`
* Fixes various things, **most importantly objects indexing the global table**
* Concerns `kdtree`, `trie`, `ranked_set`, `vector`, `schema`
### `rolling-66`
* Adds `modlib.persistence.lua_log_file`
### `rolling-62`

View File

@ -1,4 +1,7 @@
local metatable = {__index = getfenv(1)}
local class = getfenv(1)
local metatable = {__index = function(_self, key)
return rawget(class, key)
end}
--! experimental
--+ Reads a single BB3D chunk from a stream
@ -195,12 +198,17 @@ function read(stream)
flags = flags
}
while content() do
table.insert(bone, {
frame = int(),
position = position and vector3() or nil,
scale = scale and vector3() or nil,
rotation = rotation and quaternion() or nil
})
local frame = {frame = int()}
if position then
frame.position = vector3()
end
if scale then
frame.scale = vector3()
end
if rotation then
frame.rotation = quaternion()
end
table.insert(bone, frame)
end
-- Ensure frames are sorted ascending
table.sort(bone, function(a, b) return a.frame < b.frame end)

View File

@ -1,3 +1,5 @@
local rawget, rawset = rawget, rawset
-- Lua version check
if _VERSION then
if _VERSION < "Lua 5" then
@ -50,7 +52,8 @@ for _, file in pairs{
"ranked_set",
"binary",
"b3d",
"bluon"
"bluon",
"persistence"
} do
modules[file] = file
end
@ -77,7 +80,7 @@ end
local load_module, get_resource, loadfile_exports
modlib = setmetatable({
-- TODO bump on release
version = 62,
version = 68,
modname = minetest and minetest.get_current_modname(),
dir_delim = rawget(_G, "DIR_DELIM") or "/",
_RG = setmetatable({}, {
@ -126,8 +129,11 @@ function loadfile_exports(filename)
return env
end
local init_path = arg and arg[0]
local parent_dir = init_path and init_path:match"^.[/\\]" or ""
local parent_dir
if not minetest then
local init_path = arg and arg[0]
parent_dir = init_path and init_path:match"^.[/\\]" or ""
end
function load_module(module_name)
local file = module_name .. ".lua"
return loadfile_exports(minetest and get_resource(modlib.modname, file) or (parent_dir .. file))
@ -148,6 +154,8 @@ end
_ml = modlib
modlib.mod.include"test.lua"
--modlib.mod.include"bench.lua"
--[[
--modlib.mod.include"test.lua"
]]

View File

@ -1,4 +1,7 @@
local metatable = {__index = getfenv(1)}
local class = getfenv(1)
local metatable = {__index = function(_self, key)
return rawget(class, key)
end}
distance = modlib.vector.distance

View File

@ -0,0 +1,153 @@
lua_log_file = {}
local files = {}
local metatable = {__index = lua_log_file}
function lua_log_file.new(file_path, root)
local self = setmetatable({file_path = assert(file_path), root = root}, metatable)
if minetest then
files[self] = true
end
return self
end
function lua_log_file:load()
-- Bytecode is blocked by the engine
local read = assert(loadfile(self.file_path))
-- math.huge is serialized to inf
local env = {inf = math.huge}
setfenv(read, env)
read()
env.R = env.R or {{}}
self.reference_count = #env.R
self.root = env.R[1]
self.references = modlib.table.flip(env.R)
end
function lua_log_file:open()
self.file = io.open(self.file_path, "a+")
end
function lua_log_file:init()
if modlib.file.exists(self.file_path) then
self:load()
self:_rewrite()
self:open()
return
end
self:open()
self.root = {}
self:_write()
end
function lua_log_file:log(statement)
self.file:write(statement)
self.file:write"\n"
end
function lua_log_file:flush()
self.file:flush()
end
function lua_log_file:close()
self.file:close()
self.file = nil
files[self] = nil
end
if minetest then
minetest.register_on_shutdown(function()
for self in pairs(files) do
self.file:close()
end
end)
end
function lua_log_file:_dump(value, is_key)
if value == nil then
return "nil"
end
if value == true then
return "true"
end
if value == false then
return "false"
end
if value ~= value then
-- nan
return "0/0"
end
local _type = type(value)
if _type == "number" then
return ("%.17g"):format(value)
end
if self.references[value] then
return "R[" .. self.references[value] .. "]"
end
self.reference_count = self.reference_count + 1
local reference = self.reference_count
local key = "R[" .. reference .."]"
self.references[value] = reference
local formatted
if _type == "string" then
if is_key and value:len() <= key:len() and value:match"[%a_][%a%d_]*" then
-- Short key
return value, true
end
formatted = ("%q"):format(value)
if formatted:len() <= key:len() then
-- Short string
return formatted
end
elseif _type == "table" then
local entries = {}
for _, value in ipairs(value) do
table.insert(entries, self:_dump(value))
end
for key, value in pairs(value) do
if type(key) ~= "number" or key % 1 ~= 0 or key < 1 or key > #value then
local dumped, short = self:_dump(key, true)
table.insert(entries, (short and dumped or ("[" .. dumped .. "]")) .. "=" .. self:_dump(value))
end
end
formatted = "{" .. table.concat(entries, ";") .. "}"
else
error("unsupported type: " .. _type)
end
self:log(key .. "=" .. formatted)
return key
end
function lua_log_file:set(table, key, value)
table[key] = value
if not self.references[table] then
error"orphan table"
end
table = self:_dump(table)
local key, short_key = self:_dump(key, true)
self:log(table .. (short_key and ("." .. key) or ("[" .. key .. "]")) .. "=" .. self:_dump(value))
end
function lua_log_file:set_root(key, value)
return self:set(self.root, key, value)
end
function lua_log_file:_write()
self.references = {}
self.reference_count = 0
self:log"R={}"
self:_dump(self.root)
end
function lua_log_file:_rewrite()
self.file = io.open(self.file_path, "w+")
self:_write()
self.file:close()
end
function lua_log_file:rewrite()
if self.file then
self.file:close()
end
self:_rewrite()
self:open()
end

View File

@ -1,5 +1,7 @@
local class = getfenv(1)
local metatable = {__index = class}
local metatable = {__index = function(_self, key)
return rawget(class, key)
end}
comparator = modlib.table.default_comparator

View File

@ -1,8 +1,11 @@
local schema = getfenv(1)
local class = getfenv(1)
local metatable = {__index = function(_self, key)
return rawget(class, key)
end}
function new(def)
-- TODO type inference, sanity checking etc.
return setmetatable(def, {__index = schema})
return setmetatable(def, metatable)
end
local function field_name_to_title(name)

View File

@ -192,6 +192,15 @@ test_from_string("#333", 0x333333FF)
test_from_string("#694269", 0x694269FF)
test_from_string("#11223344", 0x11223344)
local logfile = persistence.lua_log_file.new(mod.get_resource"logfile.test.lua", {})
logfile:init()
logfile.root = {}
logfile:rewrite()
logfile:set_root({a = 1}, {b = 2, c = 3, d = _G.math.huge, e = -_G.math.huge})
logfile:close()
logfile:init()
assert(table.equals(logfile.root, {[{a = 1}] = {b = 2, c = 3, d = _G.math.huge, e = -_G.math.huge}}))
-- in-game tests & b3d testing
local tests = {
-- depends on player_api

View File

@ -1,6 +1,9 @@
local trie = getfenv(1)
local class = getfenv(1)
local metatable = {__index = function(_self, key)
return rawget(class, key)
end}
function new(table) return setmetatable(table or {}, trie) end
function new(table) return setmetatable(table or {}, metatable) end
function insert(self, word, value, overwrite)
for i = 1, word:len() do

View File

@ -1,5 +1,5 @@
local mt_vector = vector
local vector = getfenv(1)
local class = getfenv(1)
index_aliases = {
x = 1,
@ -16,7 +16,7 @@ metatable = {
if index ~= nil then
return table[index]
end
return vector[key]
return rawget(class, key)
end,
__newindex = function(table, key, value)
local index = letters[key]

View File

@ -0,0 +1,8 @@
# textdomain: beds
Leave Bed=Ellitiĝu
Good morning.=Bonan matenon.
@1 of @2 players are in bed=@1 el @2 ludantoj estas en lito.
Force night skip=Devigu nokta salton
You can only sleep at night.=Vi povas nur dormi en la nokto.
Fancy Bed=Luksa Lito
Simple Bed=Simpla Lito

View File

@ -0,0 +1,3 @@
# textdomain: binoculars
Binoculars=Binokolo
Use with 'Zoom' key=Uzu per 'Zomo' klavo

View File

@ -0,0 +1,4 @@
# textdomain: boats
Boat cruise mode on=La kroza maniero de la boato estas ŝaltita.
Boat cruise mode off=La kroza maniero de la boato estas malŝaltita.
Boat=Boato

View File

@ -0,0 +1,8 @@
# textdomain: bones
Bones=Ostoj
@1's old bones=La malnova ostoj de @1
@1 died at @2.=@1 mortis ĉe @2
@1 died at @2, and dropped their inventory.=@1 mortis ĉe @2, kaj ri delasis riaj objektoj.
@1 died at @2, and bones were placed.=@1 mortis ĉe @2, kaj ostoj metis.
@1's fresh bones=La nova ostoj de @1
@1's bones=La ostoj de @1

View File

@ -0,0 +1,4 @@
# textdomain: butterflies
White Butterfly=Blanka Papilio
Red Butterfly=Ruĝa Papilio
Violet Butterfly=Viola Papilio

View File

@ -0,0 +1,6 @@
# textdomain: carts
Rail=Relo
Powered Rail=Elektra Relo
Brake Rail=Bremsa Relo
Cart=Ĉaro
(Sneak+Click to pick up)=(Ŝteliru+Alklaku por reprini)

View File

@ -0,0 +1,10 @@
# textdomain: creative
Search=Serĉu
Reset=Rekomencigu
Previous page=Pasinta paĝo
Next page=Sekvinta paĝo
All=Ĉio
Nodes=Nodoj
Tools=Iloj
Items=Objektoj
Allow player to use creative inventory=Permesu la ludanto uzi la krea stoko

View File

@ -0,0 +1,211 @@
# textdomain: default
Stone=Ŝtono
Cobblestone=Pavimŝtono
Stone Brick=Ŝtona Briko
Stone Block=Ŝtona Ŝtipo
Mossy Cobblestone=Muska Pavimŝtono
Desert Stone=Dezerta Ŝtono
Desert Cobblestone=Dezerta Pavimŝtono
Desert Stone Brick=Dezerta Ŝtona Briko
Desert Stone Block=Dezerta Ŝtona Ŝtipo
Sandstone=Sablaŝtono
Sandstone Brick=Sablaŝtono Briko
Sandstone Block=Sablaŝtono Ŝtipo
Desert Sandstone=Dezerta Sablaŝtono
Desert Sandstone Brick=Dezerta Sablaŝtono Briko
Desert Sandstone Block=Dezerta Sablaŝtono Ŝtipo
Silver Sandstone=Arĝenta Sablaŝtono
Silver Sandstone Brick=Arĝenta Sablaŝtono Briko
Silver Sandstone Block=Arĝenta Sablaŝtono Ŝtipo
Obsidian=Obsidiano
Obsidian Brick=Obsidiana Briko
Obsidian Block=Obsidiana Ŝtipo
Dirt=Tero
Dirt with Grass=Tero kun Herbo
Dirt with Grass and Footsteps=Tero kun Herbo kaj Piedpaŝoj
Dirt with Savanna Grass=Tero kun Savana Herbo
Dirt with Snow=Tero kun Neĝo
Dirt with Rainforest Litter=Tero kun Pluvarbara Folioj
Dirt with Coniferous Litter=Tero kun Konifera Folioj
Savanna Dirt=Savana Tero
Savanna Dirt with Savanna Grass=Savana Tero kun Savana Herbo
Permafrost=Ĉiamfrosto
Permafrost with Stones=Ĉiamfrosto kun Ŝtonoj
Permafrost with Moss=Ĉiamfrosto kun Musko
Sand=Sablo
Desert Sand=Dezerta Sablo
Silver Sand=Arĝenta Sablo
Gravel=Gruzo
Clay=Argilo
Snow=Neĝo
Snow Block=Neĝa Ŝtipo
Ice=Glacio
Cave Ice=Kaverna Glacio
Apple Tree=Poma Arbo
Apple Wood Planks=Poma Ligna Tabuloj
Apple Tree Sapling=Poma Arba Arbido
Apple Tree Leaves=Poma Arba Folioj
Apple=Pomo
Apple Marker=Poma Marko
Jungle Tree=Ĝangala Arbo
Jungle Wood Planks=Ĝangala Ligna Tabuloj
Jungle Tree Leaves=Ĝangala Arba Folioj
Jungle Tree Sapling=Ĝangala Arba Arbido
Emergent Jungle Tree Sapling=Nova Ĝangala Arba Arbido
Pine Tree=Pina Arbo
Pine Wood Planks=Pina Ligna Tabuloj
Pine Needles=Pinpingloj
Pine Tree Sapling=Pina Arba Arbido
Acacia Tree=Akacia Arbo
Acacia Wood Planks=Akacia Ligna Tabuloj
Acacia Tree Leaves=Akacia Arba Folioj
Acacia Tree Sapling=Akacia Arba Arbido
Aspen Tree=Tremola Arba
Aspen Wood Planks=Tremola Ligna Tabuloj
Aspen Tree Leaves=Tremola Arbo Folioj
Aspen Tree Sapling=Tremola Arba Arbido
Coal Ore=Karba Minaĵo
Coal Block=Karba Ŝtipo
Iron Ore=Fera Minaĵo
Steel Block=Ŝtala Ŝtipo
Copper Ore=Kupra Minaĵo
Copper Block=Kupra Ŝtipo
Tin Ore=Stana Minaĵo
Tin Block=Stana Ŝtipo
Bronze Block=Bronza Ŝtipo
Mese Ore=Mesea Minaĵo
Mese Block=Mesea Ŝtipo
Gold Ore=Ora Minaĵo
Gold Block=Ora Ŝtipo
Diamond Ore=Diamanta Minaĵo
Diamond Block=Diamanta Ŝtipo
Cactus=Kakto
Large Cactus Seedling=Granda Kakta Kreskaĵo
Papyrus=Papiruso
Dry Shrub=Seka Arbetaĵo
Jungle Grass=Ĝangala Herbo
Grass=Herbo
Savanna Grass=Savana Herbo
Fern=Filiko
Marram Grass=Amofilo
Bush Stem=Arbateĵa Tubo
Bush Leaves=Arbateĵa Folioj
Bush Sapling=Arbateĵa Arbido
Blueberry Bush Leaves with Berries=Mirtela Arbateĵa Folioj kaj Beroj
Blueberry Bush Leaves=Mirtela Arbateĵa Folioj
Blueberry Bush Sapling=Mirtela Arbateĵa Arbido
Acacia Bush Stem=Akacia Arbateĵa Tubo
Acacia Bush Leaves=Akacia Arbateĵa Folioj
Acacia Bush Sapling=Akacia Arbateĵa Arbido
Pine Bush Stem=Pina Arbateĵa Tubo
Pine Bush Needles=Pina Arbateĵa Pingloj
Pine Bush Sapling=Pina Arbateĵa Arbido
Kelp=Fuko
Green Coral=Verda Koralo
Pink Coral=Rozkolora Koralo
Cyan Coral=Bluverda Koralo
Brown Coral=Bruna Koralo
Orange Coral=Oranĝa Koralo
Coral Skeleton=Korala Framo
Water Source=Akva Fonto
Flowing Water=Flua Akvo
River Water Source=Rivera Akva Fonto
Flowing River Water=Flua Rivera Akvo
Lava Source=Lafa Fonto
Flowing Lava=Flua Lafa
Empty Bookshelf=Malplena Librobreto
Bookshelf (@1 written, @2 empty books)=Librobreto (@1 skriba, @2 malplena libroj)
Bookshelf=Librobreto
Text too long=Teksto estas ekscesa longo
Wooden Sign=Ligna Signo
Steel Sign=Ŝtala Signo
Wooden Ladder=Ligna Ŝtupetaro
Steel Ladder=Ŝtala Ŝtupetaro
Apple Wood Fence=Poma Ligna Barilo
Acacia Wood Fence=Akacia Ligna Barilo
Jungle Wood Fence=Ĝangala Ligna Barilo
Pine Wood Fence=Pina Ligna Barilo
Aspen Wood Fence=Tremola Ligna Barilo
Apple Wood Fence Rail=Poma Ligna Barila Relo
Acacia Wood Fence Rail=Akacia Ligna Barila Relo
Jungle Wood Fence Rail=Ĝangala Ligna Barila Relo
Pine Wood Fence Rail=Pina Ligna Barila Relo
Aspen Wood Fence Rail=Tremola Ligna Barila Relo
Glass=Vitro
Obsidian Glass=Obsidiana Vitro
Brick Block=Brika Ŝtipo
Mese Lamp=Mesea Lampo
Mese Post Light=Mesea Fosta Lampo
Cloud=Nubo
@1 will intersect protection on growth.=@1 sekcos protekto ĉe vegeto.
Torch=Torĉo
Wooden Pickaxe=Ligna Pioĉo
Stone Pickaxe=Ŝtona Pioĉo
Bronze Pickaxe=Bronza Pioĉo
Steel Pickaxe=Ŝtala Pioĉo
Mese Pickaxe=Mesea Pioĉo
Diamond Pickaxe=Diamanta Pioĉo
Wooden Shovel=Ligna Fosilo
Stone Shovel=Ŝtona Fosilo
Bronze Shovel=Bronza Fosilo
Steel Shovel=Ŝtala Fosilo
Mese Shovel=Mesea Fosilo
Diamond Shovel=Diamanta Fosilo
Wooden Axe=Ligna Hakilo
Stone Axe=Ŝtona Hakilo
Bronze Axe=Bronza Hakilo
Steel Axe=Ŝtala Hakilo
Mese Axe=Mesea Hakilo
Diamond Axe=Diamanta Hakilo
Wooden Sword=Ligna Glavo
Stone Sword=Ŝtona Glavo
Bronze Sword=Bronza Glavo
Steel Sword=Ŝtala Glavo
Mese Sword=Mesea Glavo
Diamond Sword=Diamanta Glavo
Key=Ŝlosilo
Furnace is empty=Forno estas malplena
100% (output full)=100% (eligo estas plena)
@1%=@1%
Not cookable=Ne povas kuiri
Empty=Malplena
Furnace active=Forno laboras
Furnace inactive=Forno ne laboras
(Item: @1; Fuel: @2)=(Objekto: @1; Brulaĵo: @2)
Furnace=Forno
Title:=Titolo
Contents:=Entenaĵo
Save=Konservu
by @1=per @1
Page @1 of @2=Paĝo @1 el @2
"@1"="@1"
"@1" by @2="@1" per @2
Skeleton Key=Skeleta Ŝlosilo
Key to @1's @2=Ŝlosilo por la @2 de @1
Blueberries=Mirteloj
Book=Libro
Book with Text=Libro kun Teksto
Bronze Ingot=Bronza Ingoto
Clay Brick=Argila Briko
Clay Lump=Argila Bulo
Coal Lump=Karba Bulo
Copper Ingot=Kupra Ingoto
Copper Lump=Kupra Bulo
Diamond=Diamanto
Flint=Siliko
Gold Ingot=Ora Ingoto
Gold Lump=Ora Bulo
Iron Lump=Fera Bulo
Mese Crystal=Mesea Kristalo
Mese Crystal Fragment=Mesea Kristala Ero
Obsidian Shard=Obsidiana Peceto
Paper=Papero
Steel Ingot=Ŝtala Ingoto
Stick=Bastono
Tin Ingot=Stana Ingoto
Tin Lump=Stana Bulo
Locked Chest=Ŝlosita Kesto
Locked Chest (owned by @1)=Ŝlosita Kesto (de @1)
You do not own this chest.=Vi ne posedas ĉi tiu keston.
a locked chest=ŝlosita kesto
Chest=Kesto

View File

@ -0,0 +1,16 @@
# textdomain: dye
White Dye=Blanka Tinkturo
Grey Dye=Griza Tinkturo
Dark Grey Dye=Malhela Griza Tinkturo
Black Dye=Nigra Tinkturo
Violet Dye=Viola Tinkturo
Blue Dye=Blua Tinkturo
Cyan Dye=Bluverda Tinkturo
Dark Green Dye=Malhela Verda Tinkturo
Green Dye=Verda Tinkturo
Yellow Dye=Flava Tinkturo
Brown Dye=Bruna Tinkturo
Orange Dye=Oranĝa Tinkturo
Red Dye=Ruĝa Tinkturo
Magenta Dye=Fiksina Tinkturo
Pink Dye=Roza Tinkturo

View File

@ -0,0 +1,4 @@
# textdomain: fire
Fire=Fajro
Permanent Fire=Ĉiama Fajro
Flint and Steel=Siliko kaj Ŝtalo

View File

@ -0,0 +1,5 @@
# textdomain: fireflies
Firefly=Fulgoro
Hidden Firefly=Kaŝita Fulgoro
Bug Net=Cima Reto
Firefly in a Bottle=Fulgoro en Botelo

View File

@ -0,0 +1,12 @@
# textdomain: flowers
Red Rose=Ruĝa Rozo
Orange Tulip=Oranĝa Tulipo
Yellow Dandelion=Flava Leontodo
Green Chrysanthemum=Verda Krizantemo
Blue Geranium=Blua Geranio
Viola=Violo
White Dandelion=Blanka Leontodo
Black Tulip=Nigra Tulipo
Red Mushroom=Ruĝa Fungo
Brown Mushroom=Bruna Fungo
Waterlily=Nimfeo

View File

@ -0,0 +1,4 @@
# textdomain: game_commands
Kill yourself to respawn=Ĉesigu vi mem por renaski
No static_spawnpoint defined=Ne estas difina static_spawnpoint
You need to be online to be killed!=Vi devas esti onlina por ĉesigi!

View File

@ -0,0 +1,3 @@
# textdomain: map
Mapping Kit=Mapa Ilaro
Use with 'Minimap' key=Uzu per 'malgrandmapo' ŝlosilo

View File

@ -0,0 +1,57 @@
# textdomain: mtg_craftguide
### init.lua ###
Any black dye=Ajna nigra tinkturo
Any black flower=Ajna nigra floro
Any blue dye=Ajna blua tinkturo
Any blue flower=Ajna blua floro
Any brown dye=Ajna bruna tinkturo
Any coal=Ajna karbo
Any cyan dye=Ajna bluverda tinkturo
Any dark green dye=Ajna malhela verda tinkturo
Any dark grey dye=Ajna malhela graja tinkturo
Any green dye=Ajna verda tinkturo
Any green flower=Ajna verda floro
Any grey dye=Ajna graja tinkturo
Any item belonging to the group(s): @1=Ajna objekto de la aro(j)
Any kind of stone block=Ia ŝtona ŝtipo
Any magenta dye=Ajna fuksina tinkturo
Any orange dye=Ajna oranĝa tinkturo
Any orange flower=Ajna oranĝa floro
Any pink dye=Ajna rosa tinkturo
Any red dye=Ajna ruĝa tinkturo
Any red flower=Ajna ruĝa floro
Any sand=Ajna sablo
Any stick=Ajna bastono
Any vessel=Ajna vazo
Any violet dye=Ajna viola tinkturo
Any violet flower=Ajna viola floro
Any white dye=Ajna blanka tinkturo
Any white flower=Ajna blanka floro
Any wood planks=Ajna ligna tabulo
Any wool=Ajna lano
Any yellow dye=Ajna flava tinkturo
Any yellow flower=Ajna flava floro
Click again to show recipes.=Anklaku ankoraŭ por prezenti receptojn
Click again to show usages.=Anklaku ankoraŭ por prezenti utiloj
Cooking time: @1=Tempo por kuirado: @1
Fuel=Brulaĵo
# Label for group ingredients
G=A
Next page=Sekvinta paĝo
Next recipe=Sekvinta recepto
No items to show.=Ne estas objektoj por prezenti
No recipes.=Ne estas receptoj
No usages.=Ne estas utiloj
Previous page=Pasinta paĝo
Previous recipe=Pasinta recepto
Recipe @1 of @2=Recepto @1 el @2
Recipe is too big to be displayed.=La recepto estas tro granda por prezenti
Recipes=Receptoj
Reset=Rekomincigu
Search=Ŝerĉu
Shapeless=Senforma
Unknown Item=Obskura Objekto
Usage @1 of @2=Utilo @1 el @2

View File

@ -0,0 +1,3 @@
# textdomain: screwdriver
Screwdriver=Ŝraŭbturnilo
(left-click rotates face, right-click rotates axis)=(maldekstra-klako turnas supraĵo, dekstra-klako turnas akso)

View File

@ -0,0 +1,8 @@
# textdomain: sethome
Can use /sethome and /home=Povas uzi /sethome kaj /home
Teleport you to your home point=Teletransportu vi al via hejmo
Teleported to home!=Teletransportis al hejmo!
Set a home using /sethome=Fiksi hejmon per /sethome
Set your home point=Fiksi vian hejman punkto
Home set!=Hejmo fiksis!
Player not found!=Ludanto ne estas trovebla!

View File

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

View File

@ -0,0 +1,145 @@
# textdomain: stairs
Glass Stair=Vitra Ŝtupo
Glass Slab=Vitra Plato
Inner Glass Stair=Interna Vitra Ŝtupo
Outer Glass Stair=Ekstera Vitra Ŝtupo
Obsidian Glass Stair=Obsidiana Vitra Ŝtupo
Obsidian Glass Slab=Obsidiana Vitra Plato
Inner Obsidian Glass Stair=Interna Obsidiana Vitra Ŝtupo
Outer Obsidian Glass Stair=Ekstera Obsidiana Vitra Ŝtupo
Wooden Stair=Ligna Ŝtupo
Inner Wooden Stair=Interna Ligna Ŝtupo
Outer Wooden Stair=Ekstera Ligna Ŝtupo
Wooden Slab=Ligna Plato
Jungle Wood Stair=Ĝangala Ligna Ŝtupo
Inner Jungle Wood Stair=Interna Ĝangala Ligna Ŝtupo
Outer Jungle Wood Stair=Ekstera Ĝangala Ligna Ŝtupo
Jungle Wood Slab=Ĝangala Ligna Plato
Pine Wood Stair=Pina Ligna Ŝtupo
Inner Pine Wood Stair=Interna Pina Ligna Ŝtupo
Outer Pine Wood Stair=Ekstera Pina Ligna Ŝtupo
Pine Wood Slab=Pina Ligna Plato
Acacia Wood Stair=Akacia Ligna Ŝtupo
Inner Acacia Wood Stair=Interna Akacia Ligna Ŝtupo
Outer Acacia Wood Stair=Ekstera Akacia Ligna Ŝtupo
Acacia Wood Slab=Akacia Ligna Plato
Aspen Wood Stair=Tremola Ligna Ŝtupo
Inner Aspen Wood Stair=Interna Tremola Ligna Ŝtupo
Outer Aspen Wood Stair=Ekstera Tremola Ligna Ŝtupo
Aspen Wood Slab=Tremola Ligna Plato
Stone Stair=Ŝtona Ŝtupo
Inner Stone Stair=Interna Ŝtona Ŝtupo
Outer Stone Stair=Ekstera Ŝtona Ŝtupo
Stone Slab=Ŝtona Plato
Cobblestone Stair=Pavimŝtona Ŝtupo
Inner Cobblestone Stair=Interna Pavimŝtona Ŝtupo
Outer Cobblestone Stair=Ekstera Pavimŝtona Ŝtupo
Cobblestone Slab=Pavimŝtona Plato
Mossy Cobblestone Stair=Muska Pavimŝtona Ŝtupo
Inner Mossy Cobblestone Stair=Interna Muska Pavimŝtona Ŝtupo
Outer Mossy Cobblestone Stair=Ekstera Muska Pavimŝtona Ŝtupo
Mossy Cobblestone Slab=Muska Pavimŝtona Plato
Stone Brick Stair=Ŝtona Brika Ŝtupo
Inner Stone Brick Stair=Interna Ŝtona Brika Ŝtupo
Outer Stone Brick Stair=Ekstera Ŝtona Brika Ŝtupo
Stone Brick Slab=Ŝtona Brika Plato
Stone Block Stair=Ŝtona Ŝtipa Ŝtupo
Inner Stone Block Stair=Interna Ŝtona Ŝtipa Ŝtupo
Outer Stone Block Stair=Ekstera Ŝtona Ŝtipa Ŝtupo
Stone Block Slab=Ŝtona Ŝtipa Plato
Desert Stone Stair=Dezerta Ŝtona Ŝtupo
Inner Desert Stone Stair=Interna Dezerta Ŝtona Ŝtupo
Outer Desert Stone Stair=Ekstera Dezerta Ŝtona Ŝtupo
Desert Stone Slab=Dezerta Ŝtona Plato
Desert Cobblestone Stair=Dezerta Pavimŝtona Ŝtupo
Inner Desert Cobblestone Stair=Interna Dezerta Pavimŝtona Ŝtupo
Outer Desert Cobblestone Stair=Ekstera Dezerta Pavimŝtona Ŝtupo
Desert Cobblestone Slab=Dezerta Pavimŝtona Plato
Desert Stone Brick Stair=Dezerta Ŝtona Brika Ŝtupo
Inner Desert Stone Brick Stair=Interna Dezerta Ŝtona Brika Ŝtupo
Outer Desert Stone Brick Stair=Ekstera Dezerta Ŝtona Brika Ŝtupo
Desert Stone Brick Slab=Dezerta Ŝtona Brika Plato
Desert Stone Block Stair=Dezerta Ŝtona Ŝtipo Ŝtupo
Inner Desert Stone Block Stair=Interna Dezerta Ŝtona Ŝtipo Stupo
Outer Desert Stone Block Stair=Ekstera Dezerta Ŝtona Ŝtipo Ŝtupo
Desert Stone Block Slab=Dezerta Ŝtona Ŝtipo Plato
Sandstone Stair=Sablŝtona Ŝtupo
Inner Sandstone Stair=Interna Ŝablŝtona Ŝtupo
Outer Sandstone Stair=Ekstera Ŝablŝtona Ŝtupo
Sandstone Slab=Ŝablŝtona Plato
Sandstone Brick Stair=Ŝablŝtona Brika Ŝtupo
Inner Sandstone Brick Stair=Interna Ŝablŝtona Brika Ŝtupo
Outer Sandstone Brick Stair=Ekstera Ŝablŝtona Brika Ŝtupo
Sandstone Brick Slab=Ŝablŝtona Brika Plato
Sandstone Block Stair=Ŝablŝtona Ŝtipa Ŝtupo
Inner Sandstone Block Stair=Interna Ŝablŝtona Ŝtipa Ŝtupo
Outer Sandstone Block Stair=Ekstera Ŝablŝtona Ŝtipa Ŝtupo
Sandstone Block Slab=Ŝablŝtona Ŝtipa Plato
Desert Sandstone Stair=Dezerta Ŝablŝtona Ŝtupo
Inner Desert Sandstone Stair=Interna Dezerta Ŝablŝtona Ŝtupo
Outer Desert Sandstone Stair=Ekstera Dezerta Ŝablŝtona Ŝtupo
Desert Sandstone Slab=Dezerta Ŝablŝtona Plato
Desert Sandstone Brick Stair=Dezerta Ŝablŝtona Brika Ŝtupo
Inner Desert Sandstone Brick Stair=Interna Dezerta Ŝablŝtona Brika Ŝtupo
Outer Desert Sandstone Brick Stair=Ekstera Dezerta Ŝablŝtona Brika Ŝtupo
Desert Sandstone Brick Slab=Dezerta Ŝablŝtona Brika Plato
Desert Sandstone Block Stair=Dezerta Ŝablŝtona Ŝtipa Ŝtupo
Inner Desert Sandstone Block Stair=Interna Dezerta Ŝablŝtona Brika Ŝtupo
Outer Desert Sandstone Block Stair=Ekstera Dezerta Ŝablŝtona Brika Ŝtupo
Desert Sandstone Block Slab=Dezerta Ŝablŝtona Ŝtipa Plato
Silver Sandstone Stair=Arĝenta Ŝablŝtona Ŝtupo
Inner Silver Sandstone Stair=Interna Arĝenta Ŝablŝtona Ŝtupo
Outer Silver Sandstone Stair=Ekstera Arĝenta Ŝablŝtona Ŝtupo
Silver Sandstone Slab=Arĝenta Ŝablŝtona Plato
Silver Sandstone Brick Stair=Arĝenta Ŝablŝtona Brika Ŝtupo
Inner Silver Sandstone Brick Stair=Interna Arĝenta Ŝablŝtona Brika Ŝtupo
Outer Silver Sandstone Brick Stair=Ekstera Arĝenta Ŝablŝtona Brika Ŝtupo
Silver Sandstone Brick Slab=Arĝenta Ŝablŝtona Brika Plato
Silver Sandstone Block Stair=Arĝenta Ŝablŝtona Ŝtipa Ŝtupo
Inner Silver Sandstone Block Stair=Interna Arĝenta Ŝablŝtona Ŝtipa Ŝtupo
Outer Silver Sandstone Block Stair=Ekstera Arĝenta Ŝablŝtona Ŝtipa Ŝtupo
Silver Sandstone Block Slab=Arĝenta Ŝablŝtona Ŝtipa Plato
Obsidian Stair=Obsidiana Ŝtupo
Inner Obsidian Stair=Interna Obsidiana Ŝtupo
Outer Obsidian Stair=Ekstera Obsidiana Ŝtupo
Obsidian Slab=Obsidiana Plato
Obsidian Brick Stair=Obsidiana Brika Ŝtupo
Inner Obsidian Brick Stair=Interna Obsidiana Brika Ŝtupo
Outer Obsidian Brick Stair=Ekstera Obsidiana Brika Ŝtupo
Obsidian Brick Slab=Obsidiana Brika Plato
Obsidian Block Stair=Obsidiana Ŝtipa Ŝtupo
Inner Obsidian Block Stair=Interna Obsidiana Ŝtipa Ŝtupo
Outer Obsidian Block Stair=Ekstera Obsidiana Ŝtipa Ŝtupo
Obsidian Block Slab=Obsidiana Ŝtipa Plato
Brick Stair=Brika Ŝtupo
Inner Brick Stair=Interna Brika Ŝtupo
Outer Brick Stair=Ekstera Brika Ŝtupo
Brick Slab=Brika Plato
Steel Block Stair=Ŝtala Ŝtipa Ŝtupo
Inner Steel Block Stair=Interna Ŝtala Ŝtipa Ŝtupo
Outer Steel Block Stair=Ekstera Ŝtala Ŝtipa Ŝtupo
Steel Block Slab=Ŝtala Ŝtipa Plato
Tin Block Stair=Stana Ŝtipa Ŝtupo
Inner Tin Block Stair=Interna Stana Ŝtipa Ŝtupo
Outer Tin Block Stair=Ekstera Stana Ŝtipa Ŝtupo
Tin Block Slab=Stana Ŝtipa Plato
Copper Block Stair=Kupra Ŝtipa Ŝtupo
Inner Copper Block Stair=Interna Kupra Ŝtipa Ŝtupo
Outer Copper Block Stair=Ekstera Kupra Ŝtipa Ŝtupo
Copper Block Slab=Kupra Ŝtipa Plato
Bronze Block Stair=Bronza Ŝtipa Ŝtupo
Inner Bronze Block Stair=Interna Bronza Ŝtipa Ŝtupo
Outer Bronze Block Stair=Ekstera Bronza Ŝtipa Ŝtupo
Bronze Block Slab=Bronza Ŝtipa Plato
Gold Block Stair=Ora Ŝtipa Ŝtupo
Inner Gold Block Stair=Interna Ora Ŝtipa Ŝtupo
Outer Gold Block Stair=Ekstera Ora Ŝtipa Ŝtupo
Gold Block Slab=Ora Ŝtipa Plato
Ice Stair=Glacia Ŝtupo
Inner Ice Stair=Interna Glacia Ŝtupo
Outer Ice Stair=Ekstera Glacia Ŝtupo
Ice Slab=Glacia Plato
Snow Block Stair=Neĝa Ŝtipa Ŝtupo
Inner Snow Block Stair=Interna Neĝa Ŝtipa Ŝtupo
Outer Snow Block Stair=Ekstera Neĝa Ŝtipa Ŝtupo
Snow Block Slab=Neĝa Ŝtipa Plato

View File

@ -0,0 +1,4 @@
# textdomain: tnt
Gun Powder=Pulvo
TNT Stick=Dinamita Bastono
TNT=Dinamito

View File

@ -0,0 +1,8 @@
# textdomain: vessels
Empty Vessels Shelf=Malplena Vaza Plataĵo
Vessels Shelf (@1 items)=Vaza Plataĵo (@1 objektoj)
Vessels Shelf=Vaza Plataĵo
Empty Glass Bottle=Malplena Vitra Botelo
Empty Drinking Glass=Malplena Glaso por Trinkado
Empty Heavy Steel Bottle=Malplena Peza Ŝtala Botelo
Glass Fragments=Vitra Eroj

View File

@ -0,0 +1,4 @@
# textdomain: walls
Cobblestone Wall=Pavimŝtona Muro
Mossy Cobblestone Wall=Muska Pavimŝtona Muro
Desert Cobblestone Wall=Dezerta Pavimŝtona Muro

View File

@ -0,0 +1,16 @@
# textdomain: wool
White Wool=Blanka Lano
Grey Wool=Griza Lano
Dark Grey Wool=Malhela Griza Lano
Black Wool=Nigra Lano
Violet Wool=Viola Lano
Blue Wool=Blua Lano
Cyan Wool=Bluverda Lano
Dark Green Wool=Malhela Verda Lano
Green Wool=Verda Lano
Yellow Wool=Flava Lano
Brown Wool=Bruna Lano
Orange Wool=Oranĝa Lano
Red Wool=Ruĝa Lano
Magenta Wool=Fuksina Lano
Pink Wool=Roza Lano

View File

@ -0,0 +1,6 @@
# textdomain: xpanes
Glass Pane=Vitra Vitraĵo
Obsidian Glass Pane=Obsidiana Vitra Vitraĵo
Steel Bars=Ŝtala Baraĵoj
Steel Bar Door=Ŝtala Baraĵa Pordo
Steel Bar Trapdoor=Ŝtala Baraĵa Plankpordo

View File

@ -498,13 +498,15 @@ function water_life.hq_attack(self,prty,tgtobj)
local meta = nil
local poison = 0
local pos = mobkit.get_stand_pos(self)
-- local tpos = tgtobj:get_pos()
local tpos = mobkit.get_stand_pos(tgtobj)
local dist = vector.distance(pos,tpos)
if tgtobj:is_player() then
meta = tgtobj:get_meta()
poison = meta:get_int("snakepoison")
noob = meta:get_int("bitten")
poison = meta:get_int("snakepoison") or 1
noob = meta:get_int("bitten") or 1
else
poison = 1
noob = 1
end
if dist > 3 or poison > 0 or noob > 0 then

View File

@ -254,3 +254,11 @@ Mod: LessDirt/default
origin https://github.com/Treer/LessDirt.git (fetch)
* master 59d4434 [origin/master] Update forum link in README.md
Mod: LessDirt/default
origin https://github.com/Treer/LessDirt.git (fetch)
* master 59d4434 [origin/master] Update forum link in README.md
Mod: LessDirt/default
origin https://github.com/Treer/LessDirt.git (fetch)
* master 59d4434 [origin/master] Update forum link in README.md
Mod: LessDirt/default