summaryrefslogtreecommitdiff
path: root/technic/technic/tools/vacuum.lua
diff options
context:
space:
mode:
Diffstat (limited to 'technic/technic/tools/vacuum.lua')
-rw-r--r--technic/technic/tools/vacuum.lua61
1 files changed, 61 insertions, 0 deletions
diff --git a/technic/technic/tools/vacuum.lua b/technic/technic/tools/vacuum.lua
new file mode 100644
index 0000000..f5fac9a
--- /dev/null
+++ b/technic/technic/tools/vacuum.lua
@@ -0,0 +1,61 @@
+-- Configuration
+local vacuum_max_charge = 10000 -- 10000 - Maximum charge of the vacuum cleaner
+local vacuum_charge_per_object = 100 -- 100 - Capable of picking up 50 objects
+local vacuum_range = 8 -- 8 - Area in which to pick up objects
+
+local S = technic.getter
+
+technic.register_power_tool("technic:vacuum", vacuum_max_charge)
+
+minetest.register_tool("technic:vacuum", {
+ description = S("Vacuum Cleaner"),
+ inventory_image = "technic_vacuum.png",
+ stack_max = 1,
+ wear_represents = "technic_RE_charge",
+ on_refill = technic.refill_RE_charge,
+ on_use = function(itemstack, user, pointed_thing)
+ local meta = minetest.deserialize(itemstack:get_metadata())
+ if not meta or not meta.charge then
+ return
+ end
+ if meta.charge > vacuum_charge_per_object then
+ minetest.sound_play("vacuumcleaner", {
+ to_player = user:get_player_name(),
+ gain = 0.4,
+ })
+ end
+ local pos = user:getpos()
+ local inv = user:get_inventory()
+ for _, object in ipairs(minetest.env:get_objects_inside_radius(pos, vacuum_range)) do
+ local luaentity = object:get_luaentity()
+ if not object:is_player() and luaentity and luaentity.name == "__builtin:item" and luaentity.itemstring ~= "" then
+ if inv and inv:room_for_item("main", ItemStack(luaentity.itemstring)) then
+ meta.charge = meta.charge - vacuum_charge_per_object
+ if meta.charge < vacuum_charge_per_object then
+ return
+ end
+ inv:add_item("main", ItemStack(luaentity.itemstring))
+ minetest.sound_play("item_drop_pickup", {
+ to_player = user:get_player_name(),
+ gain = 0.4,
+ })
+ luaentity.itemstring = ""
+ object:remove()
+ end
+ end
+ end
+
+ technic.set_RE_wear(itemstack, meta.charge, vacuum_max_charge)
+ itemstack:set_metadata(minetest.serialize(meta))
+ return itemstack
+ end,
+})
+
+minetest.register_craft({
+ output = 'technic:vacuum',
+ recipe = {
+ {'pipeworks:tube_1', 'pipeworks:filter', 'technic:battery'},
+ {'pipeworks:tube_1', 'technic:motor', 'technic:battery'},
+ {'technic:stainless_steel_ingot', '', ''},
+ }
+})