Guest/
Auto-eat based on SiSS RA
4.05 KiB
4
22 days ago
local foods = {
["minecraft:apple"] = {hunger = 4, satMod = 0.3, cost = 2},
["minecraft:baked_potato"] = {hunger = 5, satMod = 0.6, cost = 1},
["minecraft:beetroot_soup"] = {hunger = 6, satMod = 1.2, cost = 2},
["minecraft:bread"] = {hunger = 5, satMod = 0.6, cost = 1},
["minecraft:carrot"] = {hunger = 3, satMod = 0.6, cost = 1},
["minecraft:cooked_beef"] = {hunger = 8, satMod = 0.8, cost = 1},
["minecraft:cooked_porkchop"] = {hunger = 8, satMod = 0.8, cost = 1},
["minecraft:cooked_chicken"] = {hunger = 6, satMod = 0.6, cost = 1},
["minecraft:cooked_mutton"] = {hunger = 6, satMod = 0.8, cost = 1},
["minecraft:cooked_cod"] = {hunger = 5, satMod = 0.6, cost = 2},
["minecraft:cooked_salmon"] = {hunger = 6, satMod = 0.8, cost = 2},
["minecraft:cookie"] = {hunger = 2, satMod = 0.1, cost = 1},
["minecraft:dried_kelp"] = {hunger = 1, satMod = 0.3, cost = 1},
["minecraft:melon_slice"] = {hunger = 2, satMod = 0.3, cost = 1},
["minecraft:pumpkin_pie"] = {hunger = 8, satMod = 0.3, cost = 2},
["minecraft:rabbit_stew"] = {hunger = 10, satMod = 1.2, cost = 3},
["minecraft:mushroom_stew"] = {hunger = 6, satMod = 0.6, cost = 2},
["minecraft:sweet_berries"] = {hunger = 2, satMod = 0.1, cost = 1},
["minecraft:golden_carrot"] = {hunger = 6, satMod = 1.2, cost = 5},
["minecraft:golden_apple"] = {hunger = 4, satMod = 1.2, cost = 6},
["minecraft:honey_bottle"] = {hunger = 6, satMod = 0.1, cost = 4}
}
local function chooseFood(startHunger, startSat, inventory)
local MAX = 20
local bestName, bestCount
local bestScore = math.huge
for name, amount in pairs(inventory) do
local food = foods[name]
if food then
local hunger, sat = startHunger, startSat
local count = 0
local satGain = food.hunger * food.satMod * 2
while hunger < MAX or sat < hunger do
if hunger >= MAX or count >= amount then
count = math.huge
break
end
count = count + 1
hunger = math.min(MAX, hunger + food.hunger)
sat = math.min(hunger, sat + satGain)
end
if count ~= math.huge then
local score = count * 1000 + food.cost
if score < bestScore then
bestScore = score
bestName = name
bestCount = count
end
end
end
end
return bestName, bestCount
end
package.path = package.path .. ";/storage-solution/?.lua"
local ra = require("storage-solution/tiny_ra_library")
local modules = peripheral.wrap("back")
local yourManipulator = "manipulator_76"
ra.init(peripheral.find("modem"), 32000, "ratest123")
while true do
local meta = modules.getMetaOwner()
local amounts = ra.listItemAmounts(true)
local bestFood, bestCount = chooseFood(meta.food.hunger, meta.food.saturation, amounts)
if meta.health <= 10 and meta.food.saturation == 0 and (bestFood == nil or bestCount == ni) then
local bestItem = ""
local bestSatGain = 0
for name, amount in pairs(amounts) do
local food = foods[name]
if food then
local satGain = food.hunger * food.satMod * 2
if bestSatGain < satGain then
bestSatGain = satGain
bestItem = name
end
end
end
bestFood = bestItem
bestCount = 1
end
if bestFood == nil or bestCount == nil then
goto continue
end
ra.withdrawToManipulator(yourManipulator, bestFood, bestCount, true)
local inv = modules.getInventory()
for slot, item in pairs(inv.list()) do
if item then
if item.name == bestFood then
for i = 1, bestCount do
inv.consume(slot)
end
end
end
end
::continue::
end