Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- meSide="west"
- me=peripheral.wrap("front")
- tm=peripheral.wrap("bottom")
- recipes={}
- nullFP={id="",dmg=0}
- turtleSlot={1,2,3,5,6,7,9,10,11}
- itemsToCraft={}
- debug=false
- function log(str)
- if debug then
- print(str)
- end
- end
- function string.slice(str,char)
- tiles={}
- local i=1
- while string.find(str,char) do
- tiles[i]=string.sub(str,1,string.find(str,char)-1)
- str=string.sub(str,string.find(str,char)+1)
- i=i+1
- end
- return(tiles)
- end
- function initializeRecipes()
- fp=fs.open("recipes","w")
- fp.writeLine("{}")
- fp.close()
- end
- function saveRecipes()
- fp=fs.open("recipes","w")
- fp.writeLine(textutils.serialize(recipes))
- fp.close()
- end
- function getRecipes()
- fp=fs.open("recipes","r")
- recipes=textutils.unserialize(fp.readAll())
- fp.close()
- end
- function scanItems()
- if me~=nil then
- items=me.getAvailableItems()
- itemById={}
- for i=1,#items do
- itemById[items[i].fingerprint.id..'/'..items[i].fingerprint.dmg]=items[i]
- end
- end
- end
- function scanRecipe()
- if tm.getStackInSlot(10)~=nil then
- tmRecipe={}
- meRecipe={}
- for i=1,9 do
- tmRecipe[i]=tm.getStackInSlot(i)
- if tmRecipe[i]~=nil then
- meRecipe[i]={id=tmRecipe[i].id,dmg=tmRecipe[i].dmg}
- else
- meRecipe[i]={id="",dmg=0}
- end
- end
- meRecipe[10]={id=tm.getStackInSlot(10).id,dmg=tm.getStackInSlot(10).dmg}
- recipes[meRecipe[10].id.."/"..meRecipe[10].dmg]=meRecipe
- saveRecipes()
- return(meRecipe)
- end
- end
- getRecipes()
- function compareFP(fingerprint1,fingerprint2)
- return(fingerprint1.id==fingerprint2.id and fingerprint1.dmg==fingerprint2.dmg)
- end
- function FPEmpty(fingerprint)
- return(compareFP(fingerprint,nullFP))
- end
- function countInRecipe(fingerprint,recipe)
- count=0
- for i=1,9 do
- if compareFP(fingerprint,recipe[i]) then
- count=count+1
- end
- end
- return(count)
- end
- function uniqeInRecipe(recipe)
- recipeItems={}
- n=1
- for i=1,9 do
- used=false
- for i2=1,#recipeItems do
- if compareFP(recipeItems[i2],recipe[i]) then
- used=true
- end
- end
- if used==false then
- recipeItems[n]=recipe[i]
- n=n+1
- end
- end
- return(recipeItems)
- end
- function FPToIndex(fingerprint)
- return(fingerprint.id.."/"..fingerprint.dmg)
- end
- function indexToFP(FPIndex)
- return({id=string.sub(FPIndex,1,string.find(FPIndex,'/')-1),dmg=tonumber(string.sub(FPIndex,string.find(FPIndex,'/')+1))})
- end
- function checkRecipe(fingerprint)
- local itemsMissing={}
- craftPossible=true
- if recipes[FPToIndex(fingerprint)]~=nil then --pråBCft ob Rezept vorhanden ist
- local recipe=recipes[FPToIndex(fingerprint)]
- if #itemsToCraft==1 then
- scanItems()
- end
- recipeItems=uniqeInRecipe(recipe)
- for i=1,#recipeItems do
- if compareFP(recipeItems[i],nullFP)==false then
- if itemById[FPToIndex(recipeItems[i])]~=nil then
- if countInRecipe(recipeItems[i],recipe)<=itemById[FPToIndex(recipeItems[i])].size then
- else
- log(countInRecipe(recipeItems[i],recipe)-itemById[FPToIndex(recipeItems[i])].size.." "..recipeItems[i].id.." fehlt")
- craftPossible=false
- for i2=1,countInRecipe(recipeItems[i],recipe)-itemById[FPToIndex(recipeItems[i])].size do
- itemsMissing[#itemsMissing]=recipeItems[i]
- end
- end
- else
- log(countInRecipe(recipeItems[i],recipe).." "..recipeItems[i].id.." fehlt")
- craftPossible=false
- for i2=1,countInRecipe(recipeItems[i],recipe) do
- itemsMissing[#itemsMissing]=recipeItems[i]
- end
- end
- end
- end
- else
- log("kein Rezept fåBCr "..FPToIndex(fingerprint).." gefunden.")
- craftPossible=false
- end
- return craftPossible, itemsMissing
- end
- function craft(fingerprint)
- log("crafte: "..fingerprint.id)
- itemsToCraft[#itemsToCraft+1]=FPToIndex(fingerprint)
- if checkRecipe(fingerprint) then
- local recipe=recipes[FPToIndex(fingerprint)]
- for i=1,9 do
- if FPEmpty(recipe[i])==false then
- me.exportItem(recipe[i],meSide,1,turtleSlot[i])
- end
- end
- turtle.craft()
- me.pullItem(meSide,1)
- itemsToCraft[#itemsToCraft]=nil
- else
- local itemsMissing
- craftPossible, itemsMissing = checkRecipe(fingerprint)
- if itemsMissing[0]~=nil then
- log("fehlende items fåBCr "..fingerprint.id..": "..textutils.serialize(itemsMissing))
- for i=0,#itemsMissing do
- log(itemsMissing[i].id.." nachcraften")
- craft(itemsMissing[i])
- end
- if checkRecipe(fingerprint) then
- craft(fingerprint)
- end
- end
- end
- end
- function crafte(fingerprint)
- local i = 0
- while checkRecipe(fingerprint)==false and i<100 do
- itemsToCraft={}
- craft(fingerprint)
- i=i+1
- end
- itemsToCraft={}
- craft(fingerprint)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement