ErrorNoWatcher/lib/automation.lua

137 lines
2.9 KiB
Lua

FishingBobber = nil
FishingTicks = 0
FishLastCaught = 0
LastEaten = 0
function auto_fish()
stop_auto_fish()
FishingTicks = 0
function hold_fishing_rod()
if client.held_item.kind == "minecraft:fishing_rod" or hold_items({ "minecraft:fishing_rod" }) then
return true
end
warn("no fishing rod found!")
end
if not hold_fishing_rod() then
return
end
add_listener("add_entity", function(entity)
if entity.kind == "minecraft:fishing_bobber" and entity.data == client.id then
FishingBobber = entity
end
end, "auto-fish_watch-bobber")
add_listener("remove_entities", function(entity_ids)
if table.contains(entity_ids, FishingBobber.id) then
if os.time() - LastEaten < 3 then
sleep(3000)
end
hold_fishing_rod()
client:use_item()
end
end, "auto-fish_watch-bobber")
add_listener("level_particles", function(particle)
if particle.kind == 30 and particle.count == 6 then
local current_bobber = client:find_entities(function(e)
return e.id == FishingBobber.id
end)[1]
if distance(current_bobber.position, particle.position) <= 0.75 then
FishLastCaught = os.time()
client:use_item()
end
end
end, "auto-fish")
add_listener("tick", function()
FishingTicks = FishingTicks + 1
if FishingTicks % 600 ~= 0 then
return
end
if os.time() - FishLastCaught >= 60 then
hold_fishing_rod()
client:use_item()
end
end, "auto-fish_watchdog")
client:use_item()
end
function stop_auto_fish()
remove_listeners("add_entity", "auto-fish_watch-bobber")
remove_listeners("remove_entities", "auto-fish_watch-bobber")
remove_listeners("level_particles", "auto-fish")
remove_listeners("tick", "auto-fish_watchdog")
if FishingBobber and client:find_entities(function(e)
return e.id == FishingBobber.id
end)[1] then
FishingBobber = nil
client:use_item()
end
end
function attack_entities(target_kind, minimum)
if not minimum then
minimum = 0
end
function hold_sword()
if client.held_item.kind == "minecraft:iron_sword" or hold_items({ "minecraft:iron_sword" }) then
return true
end
warn("no sword found!")
end
while true do
local self_pos = client.position
local entities = client:find_entities(function(e)
return e.kind == target_kind and distance(e.position, self_pos) < 5
end)
if #entities > minimum then
local e = entities[1]
local pos = e.position
pos.y = pos.y + 1.5
hold_sword()
client:look_at(pos)
client:attack(e.id)
while client.has_attack_cooldown do
sleep(100)
end
else
sleep(1000)
end
end
end
function check_food(hunger)
if not hunger then
hunger = client.hunger
end
if hunger.food >= 20 then
return
end
local current_time = os.time()
if current_time - LastEaten >= 3 then
LastEaten = current_time
while not hold_items({
"minecraft:golden_carrot",
"minecraft:cooked_beef",
"minecraft:bread",
}) do
sleep(1000)
LastEaten = current_time
end
client:use_item()
end
end