aboutsummaryrefslogtreecommitdiff
path: root/builtin/client/cheats/inventory.lua
diff options
context:
space:
mode:
Diffstat (limited to 'builtin/client/cheats/inventory.lua')
-rw-r--r--builtin/client/cheats/inventory.lua117
1 files changed, 117 insertions, 0 deletions
diff --git a/builtin/client/cheats/inventory.lua b/builtin/client/cheats/inventory.lua
new file mode 100644
index 000000000..d12052d7c
--- /dev/null
+++ b/builtin/client/cheats/inventory.lua
@@ -0,0 +1,117 @@
+local elapsed_time = 0
+local tick_time = 0.05
+
+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
+ local old_index = player:get_wield_index()
+ player:set_wield_index(index - 1)
+ core.drop_selected_item()
+ player:set_wield_index(old_index)
+ return
+ 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