aboutsummaryrefslogtreecommitdiff
path: root/clientmods/inventory/init.lua
blob: 5050fbe8b8d34e04b1737e5afc38eeb9dc1130c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
local modname = minetest.get_current_modname()
local modpath = minetest.get_modpath(modname)

dofile(modpath .. "/invhack.lua") 
dofile(modpath .. "/enderchest.lua") 

local elapsed_time = 0
local tick_time = 0.05

minetest.register_globalstep(function(dtime)
	elapsed_time = elapsed_time + dtime
	if elapsed_time < tick_time then return end
	local player = minetest.localplayer
	if not player then return end
	local item = player:get_wielded_item()
	if item:get_count() == 0 and minetest.settings:get_bool("next_item") then
		local index = player:get_wield_index()
		player:set_wield_index(index + 1)
	end
	elapsed_time = 0
end)

local function check_tool(groups, old_best_time)
	local toolcaps = minetest.localplayer:get_wielded_item():get_tool_capabilities()
	if not toolcaps then return end
	local best_time = old_best_time
	for group, groupdef in pairs(toolcaps.groupcaps) do
		local level = groups[group]
		if level then
			local this_time = groupdef.times[level]
			if this_time < best_time then
				best_time = this_time
			end
		end
	end
	return best_time < old_best_time, best_time
end

minetest.register_on_punchnode(function(pos, node)
	if not minetest.settings:get_bool("autotool") then return end
	local player = minetest.localplayer
	local groups = minetest.get_node_def(node.name).groups
	local new_index = player:get_wield_index()
	local better, best = check_tool(groups, math.huge)
	for i = 0, 35 do
		player:set_wield_index(i)
		better, best = check_tool(groups, best)
		if better then
			new_index = i
		end
	end
	player:set_wield_index(new_index)
end)

minetest.register_cheat("NextItem", "Inventory", "next_item")
minetest.register_cheat("AutoTool", "Inventory", "autotool")