137 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			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
 |