💥
This commit is contained in:
commit
68d6d124a6
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
## Generic ignorable patterns and files
|
||||||
|
*~
|
||||||
|
debug.txt
|
1
LICENSE.txt
Normal file
1
LICENSE.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
WTFPL
|
120
init.lua
Normal file
120
init.lua
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
local load_time_start = os.clock()
|
||||||
|
|
||||||
|
local player_items = {}
|
||||||
|
local function find_item(name, pname)
|
||||||
|
if minetest.registered_items[name] then
|
||||||
|
return name
|
||||||
|
end
|
||||||
|
|
||||||
|
-- find from alias
|
||||||
|
local aliased = minetest.registered_aliases[name]
|
||||||
|
if aliased then
|
||||||
|
while aliased
|
||||||
|
and aliased ~= "" do
|
||||||
|
name = aliased
|
||||||
|
aliased = minetest.registered_aliases[aliased]
|
||||||
|
end
|
||||||
|
return name
|
||||||
|
end
|
||||||
|
|
||||||
|
-- take an item from the last ones where more were found
|
||||||
|
local known_name = tonumber(name)
|
||||||
|
if known_name then
|
||||||
|
known_name = player_items[pname][known_name]
|
||||||
|
if known_name then
|
||||||
|
player_items[pname] = {}
|
||||||
|
return known_name
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- find possible items
|
||||||
|
local possible_names,n = {},1
|
||||||
|
for iname,def in pairs(minetest.registered_items) do
|
||||||
|
if string.find(iname, name)
|
||||||
|
or (def.description and string.find(string.lower(def.description), name)) then
|
||||||
|
possible_names[n] = iname
|
||||||
|
n = n+1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if n == 2 then
|
||||||
|
return possible_names[1]
|
||||||
|
end
|
||||||
|
if n == 1 then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
-- collect information about them and put it to priority
|
||||||
|
local maxwant = 0
|
||||||
|
local data = {}
|
||||||
|
for _,name in pairs(possible_names) do
|
||||||
|
local want = 0
|
||||||
|
if minetest.get_item_group(name, "not_in_creative_inventory") == 0
|
||||||
|
and minetest.registered_items[name].description then
|
||||||
|
want = want+4
|
||||||
|
end
|
||||||
|
if minetest.registered_nodes[name] then
|
||||||
|
want = want+2
|
||||||
|
if string.sub(name, 1,7) ~= "stairs:" then
|
||||||
|
want = want+1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
maxwant = math.max(maxwant, want)
|
||||||
|
if want == maxwant then
|
||||||
|
data[name] = want
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- collect possible ones
|
||||||
|
possible_names,n = {},1
|
||||||
|
for name,want in pairs(data) do
|
||||||
|
if want == maxwant then
|
||||||
|
possible_names[n] = name
|
||||||
|
n = n+1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if n == 2 then
|
||||||
|
return possible_names[1]
|
||||||
|
end
|
||||||
|
|
||||||
|
return possible_names
|
||||||
|
end
|
||||||
|
|
||||||
|
local oldfunc = minetest.chatcommands.giveme.func
|
||||||
|
function minetest.chatcommands.giveme.func(name, param)
|
||||||
|
local itemstring = string.match(param, "(.+)$")
|
||||||
|
if not itemstring then
|
||||||
|
return false, "ItemString required"
|
||||||
|
end
|
||||||
|
local rest, itemname = ""
|
||||||
|
local fspc = string.find(itemstring, " ")
|
||||||
|
if fspc then
|
||||||
|
itemname = string.sub(itemstring, 1, fspc-1)
|
||||||
|
rest = string.sub(itemstring, fspc)
|
||||||
|
else
|
||||||
|
itemname = itemstring
|
||||||
|
end
|
||||||
|
player_items[name] = player_items[name] or {}
|
||||||
|
local items = find_item(itemname, name)
|
||||||
|
if items == false then
|
||||||
|
return false, "No item found."
|
||||||
|
end
|
||||||
|
if type(items) == "table" then
|
||||||
|
player_items[name] = items
|
||||||
|
local cnt = #items
|
||||||
|
local txt = "More items found:\n"
|
||||||
|
for i = 1,cnt-1 do
|
||||||
|
txt = txt..i..": "..items[i]..", \t"
|
||||||
|
end
|
||||||
|
txt = txt..cnt..": "..items[cnt]
|
||||||
|
return false, txt
|
||||||
|
end
|
||||||
|
return oldfunc(name, items..rest)
|
||||||
|
end
|
||||||
|
|
||||||
|
local time = math.floor(tonumber(os.clock()-load_time_start)*100+0.5)/100
|
||||||
|
local msg = "[giveme_completion] loaded after ca. "..time
|
||||||
|
if time > 0.05 then
|
||||||
|
print(msg)
|
||||||
|
else
|
||||||
|
minetest.log("info", msg)
|
||||||
|
end
|
Loading…
x
Reference in New Issue
Block a user