Fix many workbench and enchanting table bugs from MT-Eurythmia
* fix crash https://github.com/Mynetest/Mynetest-server/issues/105 * detect that hammer is present and detect if that mese list are mese * backported https://github.com/MT-Eurythmia/xdecor/commit/59a65c60611ebe8ef3ced2e406968f049> * backported https://github.com/MT-Eurythmia/xdecor/commit/28a24a805be109eb8ab32b8633b1dfef5>
This commit is contained in:
parent
7c7e763942
commit
7a7d33b3fa
@ -7,24 +7,24 @@ local ar_api = minetest.get_modpath("3d_armor")
|
|||||||
-- Intllib
|
-- Intllib
|
||||||
local S
|
local S
|
||||||
if minetest.get_translator ~= nil then
|
if minetest.get_translator ~= nil then
|
||||||
S = minetest.get_translator("xdecor") -- 5.x translation function
|
S = minetest.get_translator("xdecor") -- 5.x translation function
|
||||||
else
|
else
|
||||||
if minetest.get_modpath("intllib") then
|
if minetest.get_modpath("intllib") then
|
||||||
dofile(minetest.get_modpath("intllib") .. "/init.lua")
|
dofile(minetest.get_modpath("intllib") .. "/init.lua")
|
||||||
if intllib.make_gettext_pair then
|
if intllib.make_gettext_pair then
|
||||||
gettext, ngettext = intllib.make_gettext_pair() -- new gettext method
|
gettext, ngettext = intllib.make_gettext_pair() -- new gettext method
|
||||||
else
|
else
|
||||||
gettext = intllib.Getter() -- old text file method
|
gettext = intllib.Getter() -- old text file method
|
||||||
|
end
|
||||||
|
S = gettext
|
||||||
|
else -- boilerplate function
|
||||||
|
S = function(str, ...)
|
||||||
|
local args = {...}
|
||||||
|
return str:gsub("@%d+", function(match)
|
||||||
|
return args[tonumber(match:sub(2))]
|
||||||
|
end)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
S = gettext
|
|
||||||
else -- boilerplate function
|
|
||||||
S = function(str, ...)
|
|
||||||
local args = {...}
|
|
||||||
return str:gsub("@%d+", function(match)
|
|
||||||
return args[tonumber(match:sub(2))]
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
xdecor.S = S
|
xdecor.S = S
|
||||||
|
@ -112,6 +112,12 @@ function enchanting.fields(pos, _, fields, sender)
|
|||||||
local mod, name = tool:get_name():match("(.*):(.*)")
|
local mod, name = tool:get_name():match("(.*):(.*)")
|
||||||
local enchanted_tool = (mod or "") .. ":enchanted_" .. (name or "") .. "_" .. next(fields)
|
local enchanted_tool = (mod or "") .. ":enchanted_" .. (name or "") .. "_" .. next(fields)
|
||||||
|
|
||||||
|
-- Mynetest: check that the "mese" list actually contains mese.
|
||||||
|
if mese:get_name() ~= "default:mese_crystal" then
|
||||||
|
inv:set_stack("mese", 1, nil)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
if mese:get_count() >= mese_cost and reg_tools[enchanted_tool] then
|
if mese:get_count() >= mese_cost and reg_tools[enchanted_tool] then
|
||||||
minetest.sound_play("xdecor_enchanting", {
|
minetest.sound_play("xdecor_enchanting", {
|
||||||
to_player = sender:get_player_name(),
|
to_player = sender:get_player_name(),
|
||||||
|
@ -48,11 +48,11 @@ function workbench:repairable(stack)
|
|||||||
|
|
||||||
if ar_api then
|
if ar_api then
|
||||||
for _, t in ipairs({
|
for _, t in ipairs({
|
||||||
"armor_head",
|
"armor_head",
|
||||||
"armor_torso",
|
"armor_torso",
|
||||||
"armor_legs",
|
"armor_legs",
|
||||||
"armor_feet",
|
"armor_feet",
|
||||||
"armor_shield",
|
"armor_shield",
|
||||||
}) do
|
}) do
|
||||||
if minetest.get_item_group(stack, t) then return true end
|
if minetest.get_item_group(stack, t) then return true end
|
||||||
end
|
end
|
||||||
@ -134,6 +134,9 @@ local formspecs = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function workbench:set_formspec(meta, id)
|
function workbench:set_formspec(meta, id)
|
||||||
|
if not formspecs[id] then
|
||||||
|
return
|
||||||
|
end
|
||||||
meta:set_string("formspec",
|
meta:set_string("formspec",
|
||||||
"size[8,7;]list[current_player;main;0,3.25;8,4;]" ..
|
"size[8,7;]list[current_player;main;0,3.25;8,4;]" ..
|
||||||
formspecs[id] .. xbg .. default.get_hotbar_bg(0,3.25))
|
formspecs[id] .. xbg .. default.get_hotbar_bg(0,3.25))
|
||||||
@ -157,6 +160,16 @@ function workbench.fields(pos, _, fields)
|
|||||||
if fields.quit then return end
|
if fields.quit then return end
|
||||||
|
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
|
if fields.back and meta then
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
if inv:is_empty("input") then
|
||||||
|
inv:set_list("forms", {})
|
||||||
|
else
|
||||||
|
local input = inv:get_stack("input", 1)
|
||||||
|
workbench:get_output(inv, input, input:get_name())
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local id = fields.back and 1 or fields.craft and 2 or fields.storage and 3
|
local id = fields.back and 1 or fields.craft and 2 or fields.storage and 3
|
||||||
if not id then return end
|
if not id then return end
|
||||||
|
|
||||||
@ -175,6 +188,13 @@ function workbench.timer(pos)
|
|||||||
local tool = inv:get_stack("tool", 1)
|
local tool = inv:get_stack("tool", 1)
|
||||||
local hammer = inv:get_stack("hammer", 1)
|
local hammer = inv:get_stack("hammer", 1)
|
||||||
|
|
||||||
|
-- Mynetest: check that the item is a hammer. See https://github.com/Mynetest/Mynetest-server/issues/105
|
||||||
|
if hammer:get_name() ~= "xdecor:hammer" then
|
||||||
|
timer:stop()
|
||||||
|
inv:set_stack("hammer", 1, nil)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
if tool:is_empty() or hammer:is_empty() or tool:get_wear() == 0 then
|
if tool:is_empty() or hammer:is_empty() or tool:get_wear() == 0 then
|
||||||
timer:stop()
|
timer:stop()
|
||||||
return
|
return
|
||||||
|
Loading…
x
Reference in New Issue
Block a user