148 lines
4.6 KiB
Lua
148 lines
4.6 KiB
Lua
local elapsed_time = 0
|
|
local tick_time = 0.05
|
|
local drop_action = InventoryAction("drop")
|
|
|
|
local strip_move_act = InventoryAction("move")
|
|
strip_move_act:to("current_player", "craft", 1)
|
|
local strip_craft_act = InventoryAction("craft")
|
|
strip_craft_act:craft("current_player")
|
|
local strip_move_back_act = InventoryAction("move")
|
|
strip_move_back_act:from("current_player", "craftresult", 1)
|
|
|
|
core.register_globalstep(function(dtime)
|
|
local player = core.localplayer
|
|
if not player then return end
|
|
local item = player:get_wielded_item()
|
|
local itemdef = core.get_item_def(item:get_name())
|
|
local wieldindex = player:get_wield_index()
|
|
-- AutoRefill
|
|
if core.settings:get_bool("autorefill") and itemdef then
|
|
local space = item:get_free_space()
|
|
local i = core.find_item(item:get_name(), wieldindex + 1)
|
|
if i and space > 0 then
|
|
local move_act = InventoryAction("move")
|
|
move_act:to("current_player", "main", wieldindex)
|
|
move_act:from("current_player", "main", i)
|
|
move_act:set_count(space)
|
|
move_act:apply()
|
|
end
|
|
end
|
|
-- Strip
|
|
if core.settings:get_bool("strip") then
|
|
if itemdef and itemdef.groups.tree and player:get_control().RMB then
|
|
strip_move_act:from("current_player", "main", wieldindex)
|
|
strip_move_back_act:to("current_player", "main", wieldindex)
|
|
strip_move_act:apply()
|
|
strip_craft_act:apply()
|
|
strip_move_back_act:apply()
|
|
end
|
|
end
|
|
-- AutoEject
|
|
if core.settings:get_bool("autoeject") then
|
|
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
|
|
drop_action:from("current_player", "main", index)
|
|
drop_action:apply()
|
|
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
|
|
if item:get_count() == 0 then
|
|
player:set_wield_index(wieldindex + 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
|
|
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
|
|
|
|
|
|
|