2020-10-17 11:11:22 +02:00
|
|
|
local elapsed_time = 0
|
|
|
|
local tick_time = 0.05
|
2020-10-19 13:09:38 +02:00
|
|
|
local drop_action = InventoryAction("drop")
|
2020-10-17 11:11:22 +02:00
|
|
|
|
|
|
|
core.register_globalstep(function(dtime)
|
|
|
|
-- AutoEject
|
|
|
|
if core.settings:get_bool("autoeject") then
|
|
|
|
local player = core.localplayer
|
|
|
|
local list = (core.settings:get("eject_items") or ""):split(",")
|
|
|
|
local inventory = core.get_inventory("current_player")
|
|
|
|
for index, stack in pairs(inventory.main) do
|
|
|
|
if table.indexof(list, stack:get_name()) ~= -1 then
|
2020-10-19 13:09:38 +02:00
|
|
|
drop_action:from("current_player", "main", index - 1)
|
|
|
|
drop_action:apply()
|
2020-10-17 11:11:22 +02:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
-- NextItem
|
|
|
|
if core.settings:get_bool("next_item") then
|
|
|
|
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 then
|
|
|
|
local index = player:get_wield_index()
|
|
|
|
player:set_wield_index(index + 1)
|
|
|
|
end
|
|
|
|
elapsed_time = 0
|
|
|
|
end
|
|
|
|
end)
|
|
|
|
|
|
|
|
core.register_list_command("eject", "Configure AutoEject", "eject_items")
|
|
|
|
|
|
|
|
-- AutoTool
|
|
|
|
|
|
|
|
local function check_tool(stack, node_groups, old_best_time)
|
|
|
|
local toolcaps = stack: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 = node_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
|
|
|
|
|
|
|
|
core.register_on_punchnode(function(pos, node)
|
|
|
|
if not minetest.settings:get_bool("autotool") then return end
|
|
|
|
local player = minetest.localplayer
|
|
|
|
local inventory = minetest.get_inventory("current_player")
|
|
|
|
local node_groups = minetest.get_node_def(node.name).groups
|
|
|
|
local new_index = player:get_wield_index()
|
|
|
|
local is_better, best_time = false, math.huge
|
|
|
|
is_better, best_time = check_tool(player:get_wielded_item(), node_groups, best_time)
|
|
|
|
is_better, best_time = check_tool(inventory.hand[1], node_groups, best_time)
|
|
|
|
for index, stack in pairs(inventory.main) do
|
|
|
|
is_better, best_time = check_tool(stack, node_groups, best_time)
|
|
|
|
if is_better then
|
|
|
|
new_index = index - 1
|
|
|
|
end
|
|
|
|
end
|
|
|
|
player:set_wield_index(new_index)
|
|
|
|
end)
|
|
|
|
|
|
|
|
-- Enderchest
|
|
|
|
|
|
|
|
function get_itemslot_bg(x, y, w, h)
|
|
|
|
local out = ""
|
|
|
|
for i = 0, w - 1, 1 do
|
|
|
|
for j = 0, h - 1, 1 do
|
|
|
|
out = out .."image["..x+i..","..y+j..";1,1;mcl_formspec_itemslot.png]"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
return out
|
|
|
|
end
|
|
|
|
|
|
|
|
local enderchest_formspec = "size[9,8.75]"..
|
|
|
|
"label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", "Ender Chest")).."]"..
|
|
|
|
"list[current_player;enderchest;0,0.5;9,3;]"..
|
|
|
|
get_itemslot_bg(0,0.5,9,3)..
|
|
|
|
"label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", "Inventory")).."]"..
|
|
|
|
"list[current_player;main;0,4.5;9,3;9]"..
|
|
|
|
get_itemslot_bg(0,4.5,9,3)..
|
|
|
|
"list[current_player;main;0,7.74;9,1;]"..
|
|
|
|
get_itemslot_bg(0,7.74,9,1)..
|
|
|
|
"listring[current_player;enderchest]"..
|
|
|
|
"listring[current_player;main]"
|
|
|
|
|
|
|
|
function core.open_enderchest()
|
|
|
|
core.show_formspec("__builtin__:enderchest", enderchest_formspec)
|
|
|
|
end
|
|
|
|
|
|
|
|
-- HandSlot
|
|
|
|
|
|
|
|
local hand_formspec = "size[9,8.75]"..
|
|
|
|
"label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", "Hand")).."]"..
|
|
|
|
"list[current_player;hand;0,0.5;1,1;]"..
|
|
|
|
get_itemslot_bg(0,0.5,1,1)..
|
|
|
|
"label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", "Inventory")).."]"..
|
|
|
|
"list[current_player;main;0,4.5;9,3;9]"..
|
|
|
|
get_itemslot_bg(0,4.5,9,3)..
|
|
|
|
"list[current_player;main;0,7.74;9,1;]"..
|
|
|
|
get_itemslot_bg(0,7.74,9,1)..
|
|
|
|
"listring[current_player;hand]"..
|
|
|
|
"listring[current_player;main]"
|
|
|
|
|
|
|
|
function core.open_handslot()
|
|
|
|
minetest.show_formspec("__builtin__:hand", hand_formspec)
|
|
|
|
end
|