Please make sure you are posting in the correct place. Server ads go here and modpack bugs go here
The FTB Forum is now read-only, and is here as an archive.
To participate in our community discussions, please join our Discord! https://ftb.team/discord
its working perfectly and very easy and compact. Its basicaly a chest with a crafting pipe setup to make a Mana Rune(I could set up a Chasis Mk5 pipe for the rest of the runes)
All materials plus the one living rock are beeing input to the chest by the crafting pipe.
From there they are exctracted by a Servo(which has a blacklist for all the runes so he wont export the finished rune at the end.)
From here on its simple.
Open crate drops all down its beeing crafted and rune falls of the altar.
The hopperHock is set to: "pickup only items not in a Frame", so it won´t pickup the living rock all the time.
Finished rune(s) gets into the chest and crafting pipe brings it to its destination.
Now were I need your help is to expend this for multi request. If I request more then one rune at the time he will alter the items beeing exported and not match any recipt for rune. How could I control this?
Only blocking the servo with redstone when the altar is crafting wont help, since the problem is before the first crafting starts.
Essentially your problem is that when you order more then one it has a chance to drop all of the things at once right?
I think translocators could help regulate but as the space for item types is very limited it would increase the footprint of your build significantly. Probably a translocator per recipe.
hmm but if I want to make more then one of the same recipe, it would still output wrong items. Since the chest will be filled by the crafting pipe.
Problem is that if I craft for example 2 Runes of mana the Crafting pipe will intput 2x5 Mana Steel + 2x1 Mana Pearl + 2x1 Living Stone.
This items will be output randomly. So I will end up with 10 ManaSteel on the altar.
Edit: actually this risk would also be there for the living Stone I think. Which I could solve with a satelite pipe to a other crate with redstone control. Thats the easy part...
I spent a bit of time playing with something very similar a while ago (only using AE rather than LP), and it's a hard problem. You can't just use something like translocators (or rationing pipes, resonant filters, golems...) to ensure only one of each item goes into the altar because there are a few recipes which need multiple of each item. The rune of mana is one, the four seasonal runes and the sin runes also require two or more of various items.
I came to the conclusion that the only way of fully automating bulk production of runes in any kind of compact way would be to use Computercraft and set up a somewhat complex program with a table of the runes and their recipe; identify a "key" item for each recipe (i.e. an item that appears only in that recipe) and use that to key the table. Then the program could pull precise amounts of the ingredients at a time. I never got round to writing that program, though...
Hmpf... thats sounds convincing enough to not try to get this solved
I will live then with the fact that I can only craft 1 rune at once.
At least for the use I have at the moment I dont think this will be a mayor problem anyway.
@Vazkii are there any planes to ajust the crafting mechanics or maybe use the crafting Crate to get this possibility? Or use the Itemframe mechanic? So altars only accept the same amount and type of items the matching rune recipe requeires?
There seems to be no problem for you to let people automize the rest of the mod so I would expect that runes would be automizable as well since they are a important crafting item for higher tier items.
I was able automate the table in AgSky2 using Hyper-Rationing pipes and a retriever.
Have to use multiple chests/strongboxes/jabba barrels for each ingredient but it worked.
For example Mana rune, I have five barrels with 1 mana steel per rune needed, one with 1 Mana pearls and one with 1 Living rock.
Put an ethos hopper timer on the retriever with, I think, 10 cobble.
I then had a 4x4 pool battery being filled by 6 gormalyis<sp> flowers being fed pit pies with another timer.
2 Dreamwood mana spreaders pointed at the alter.
Autonomous activator with my wand whacking the alter
Hopper hawk set to pick up the finished runes.
Worked great, was able to make as many as 50 iterations of a single rune at a time without error.
Oh gosh... I feel like I was asleep for years. I did not know retrievers nor Hyper-Rationing pipes at all!
This sounds do able after all with that info. I will check this out this afternoon because if I want to set it up for all runes there are, this could be a lot of barrles for each ingredient but if I can get it work I dont care about the space.
There are still a lot of open questions about it in my head but I need tinker around with it first.
Only thing I dont understand is what a "ethos hopper timer" is. Probabbly some Vanilla stuff I´m not aware of
Ok, I got progress. THe retriever was a very good idea
Still I think this will only solve the problem of bulk production of 1 type or rune.
I can now craft "n" Runes of Mana no problem.
But if I order more then one type at a time it will still mix up.
Here is were @desht comes in. You would need to trigger only the servos that you need depending on a recipe. To identify it you would need a key item.
This shouldnt be to bad for someone who knows how to code. (not my case)
Here what I ended up with at the end. It is set up for Fire and Mana rune.
Crafting pipe exports all items in chest.
Retriever on the barrels are set to only work with Redstone Signal
A timer gives out a signal every 15 seconds. In case there are items in the chest 1 of each will be exported. (Repeater set to 16ticks otherwise retriever wont pull out in time)
Under the barrels there are itemducts with a servo on each. This will extract to the opencrate over the Altar(missing in this screenshot)
Rune will be crafted.
To stop the timer and therewith the next extract I put a comparator on the altar that forward the signal via Wireless Redstone.
Hopperhock behind the upperChest will pick up finished runes.
Now, what I said before I think programming is requeired to make sure that only the items per recipt are exported I want. This in my opinion could be done by putting dedicated redstone signal to each retriever. (the timer is not needed then anymore)
So lets say our key Item for a Mana Rune is the Mana Pearl.
Computer has to check the content of the chest for Mana Pearl. If there is, activate the Retriever of all 5 ManaSteel barrels + Mana Pearl Barrel + Livingstone Barrel.
Then wait until the rune of mana is detected in the chest and then go search for the next key item.
To use a dedicated redstone signal for each retriever Wireless Redstone can be used. If I remember correctly a Computer with a WirelessRedstone Antena can send a signal to different frequencys.
Is there anyone willing to code this?
Maybe I'm insane, but could you not set up a "selector" system with redstone to request the items you want?
I envision a wall with item frames displaying the various ingredients for making any rune with buttons under them. Buttons connected to redstone to hoppers under barrels. Press button under item you want for that item to be let out of the hopper one at a time into some pipes to a "waiting" chest. Once all items are selected a final button press to release the items from the waiting chest into dropper system with a redstone delay for the final living stone drop and wand wacking device.
Yes, but wouldn't be automated. You would still have to walk up and punch in your order.
Unless you are limited on space for some reason why not replicate the working build for each rune you want to build-on-demand?
Personally I just made sure I have 16-64 of each rune on the chest off the hopper hawk. If one was low I filled the barrels with the needed bits and refilled.
I acctually will replicate it in my real world for now I think.
Anyway I will get into the coding thing tomorow with a good friend and lets see if we manage to do this just for the sake of getting it done
Will update you
Yes, but wouldn't be automated. You would still have to walk up and punch in your order.
Unless you are limited on space for some reason why not replicate the working build for each rune you want to build-on-demand?
Personally I just made sure I have 16-64 of each rune on the chest off the hopper hawk. If one was low I filled the barrels with the needed bits and refilled.
With our red stone options, could the ingredients be a single press? Same idea as above but one step up where you press a button for a mana rune and via pulses and comparator/repeater setups get what you want?
I ask because Vaskii put in the book everything in Botania can be automated with Botania and Vanilla mechanics.. Just wondering how
The alter can certainly be automated with AE, I'm not as sure about logistic pipes.
My AE2 based automated alter:
This was from a couple of worlds ago, so I can't say much more than how I described it in the Derp thread:
The ME interface is set to only push items when the target inventory (the chest on the right) is empty. The enderIO conduit is set to only pull items when the alter has no redstone signal and has living rock blacklisted. It outputs to an aa (I'm using 2, one for the wand, and one for items, but 1 would probably work). The ExtraUtilities node has a hyper filter and 64 living rock in it's buffer, and is set to only pull living rock when the alter signal is 1 (xor'd with the 2 signal so it's only on when the alter is powering up). The conduit on the left chest (the one holding the living rock) moves the living rock to the open crate when the alter signal is 2.
I don't think logistics pipes have an only when inventory is empty setting, so I doubt this setup would work.
Haven't tried it, but thinking about it, if I was to try I'd probably use emerald pipes. One emerald pipe per recipe, and make sure the pipes start with an item unique to that rune. You could use a redstone setup similar to the one I used in my AE2 setup to make sure living rock is delayed until the alter is ready so the emerald pipe wont restart it's list till the alter is ready.
As I said I did sitdown with a friend and started coding. After I got the basics done I pritty much went on my own. So keep in Mind that what you will see now is not a profesional work
Once I got everything done I will most likly do a small guide for setting all up from scratch anyway.
Heres what I have for the moment and some explainations on how I assume this will work.
Code:
--descartados
--local method = chest.listMethods()
--local method2 = chest.getAdvancedMethodsData()
-- print(slot.name.." is in slot " ..i)
--print(size)
--print(method)
--print(method2)
--ItemList: List of ComputerRednetID per item
local ManaSteel_1 =?
local ManaSteel_1 =?
local ManaSteel_3 =?
local ManaSteel_4 =?
local ManaSteel_5 =?
local feather = ?
local nextItem = ?
local nextItem = ?
local nextItem = ?
local nextItem = ?
local nextItem = ?
local nextItem = ?
local nextItem = ?
local nextItem = ?
local nextItem = ?
local nextItem = ?
local nextItem = ?
local nextItem = ?
local nextItem = ?
local nextItem = ?
--KeyItems:
local KeyItemFire = "???"
local KeyItemWater ="???"
local KeyItemEarth ="???"
local KeyItemAir = "feather"
local KeyItemMana = "???"
local KeyItemSummer = "???"
local KeyItemWinter = "???"
local KeyItemAutum = "???"
local KeyItemSpring = "???"
--Peripherals:
chest =peripheral.wrap("left") --Defines the Chest "left" to the Computer as inventory we are going to check for items
--Functions: These functions send a rednet signal to the defined ComputerID´s which then activate the retriever. (listen programm on resieving Computers can be found here:???)
RuneOfFire= function()
rednet.open("top")
rednet.send(ManaSteel_1) --Next item
rednet.send(ManaSteel_2) --Next item
rednet.send(ManaSteel_3) --Next item
--rednet.send(nextItem) -- Next Item
end
RuneOfWater= function()
rednet.open(top")
--rednet.send(?) --Next item
--rednet.send(?) --Next item
--rednet.send(?) --Next item
--rednet.send(?) --Next item
--rednet.send(?) --Next item
end
RuneOfEarth= function()
rednet.open("top")
--rednet.send(?) --Next item
--rednet.send(?) --Next item
--rednet.send(?) --Next item
--rednet.send(?) --Next item
--rednet.send(?) --Next item
end
RuneOfAir= function()
rednet.open("top")
--rednet.send(?) --Next item
--rednet.send(?) --Next item
--rednet.send(?) --Next item
--rednet.send(?) --Next item
--rednet.send(?) --Next item
end
RuneOfMana= function()
rednet.open("top")
--rednet.send(?) --Next item
--rednet.send(?) --Next item
--rednet.send(?) --Next item
--rednet.send(?) --Next item
--rednet.send(?) --Next item
end
RuneOfSummer= function()
rednet.open("top")
--rednet.send(?) --Next item
--rednet.send(?) --Next item
--rednet.send(?) --Next item
--rednet.send(?) --Next item
--rednet.send(?) --Next item
end
RuneOfWinter= function()
rednet.open("top")
--rednet.send(?) --Next item
--rednet.send(?) --Next item
--rednet.send(?) --Next item
--rednet.send(?) --Next item
--rednet.send(?) --Next item
end
RuneOfAutum= function()
rednet.open("top")
--rednet.send(?) --Next item
--rednet.send(?) --Next item
--rednet.send(?) --Next item
--rednet.send(?) --Next item
--rednet.send(?) --Next item
end
RuneOfSpring= function()
rednet.open("top")
--rednet.send(?) --Next item
--rednet.send(?) --Next item
--rednet.send(?) --Next item
--rednet.send(?) --Next item
--rednet.send(?) --Next item
end
for i=1,27 do --27=slot Size of Vanilla Chest
local slot = chest.getStackInSlot(i) --Getting information about the item
if slot ~= nil then --if slot is empty go on else he goes in here
if slot.name == KeyItemFire then --Check for KeyItem for "Rune of Fire"
RuneOfFire() --Jump into the RuneofFire function
else
if slot.name== KeyItemWater then --Check for KeyItem for "Rune of Water"
RuneOfWater() --Jump into the RuneofWater function
else
if slot.name== KeyItemEarth then --Check for KeyItem for "Rune of Earth"
RuneOfEarth --Jump into the RuneofEarth function
else
if slot.name== KeyItemAir then --Check for KeyItem for "Rune of Air"
RuneOfAir --Jump into the RuneofAir function
else
if slot.name== KeyItemMana then --Check for KeyItem for "Rune of Mana"
RuneOfMana --Jump into the RuneofMana function
else
if slot.name==KeyItemSummer then --Check for KeyItem for "Rune of Summer"
RuneOfSummer --Jump into the RuneofSummer function
else
if slot.name==KeyItemWinter then --Check for KeyItem for "Rune of Winter"
RuneOfWinter --Jump into the RuneofWinter function
else
if slot.name==KeyItemAutum then --Check for KeyItem for "Rune of Autum"
RuneOfAutum --Jump into the RuneofAutum function
else
if slot.nsame==KeyItemSpring then --Check for KeyItem for "Rune of Spring"
RuneOfSpring --Jump into the RuneofSring function
sleep(10) - time it waits until rune is finished and starts searching for the next Keyitem
end
end
end
sleep(5) -Only for testing to see the results
We use open.peripherals to define the Chest as inventory. Then we can search in it for a Key Item for each rune.
I still have to finish up this part. For example the rune of Air has a feather in its recipt. There is no other rune requeireing a feather. So if we detect a feather in the chest we can assume that the rest of the materials is there as well since the crafting pipe will provide all items per recipt.
Since the feather can be in anyslot of the chest we check all 27 inventory slots. (I have to add the function that reads the inventory slots so we can change the chest to whatever we want.)
If a feather or a other key Item is found in the chest he will jump into the function for the matching rune.
This funcion will then send a rednet signal to all the Computers that are defined inside this funcion.
(There will be one Computer next to each retriever to activate them)
This Computers will send a redstone signal to the retriever as soon as they get a rednet signal from our main computer.
(I can´t see a way to not use once computer per item)
With the example of the rune of Air, it will find a feather and then send a rednet signal to the Computer next to the retriever of 1 feather,1 carpet, 1 Wool,...
This signal will last 15 ticks so the retriever has time to request the item.
Now the main programm waits for 10 seconds so there is time to craft the rune. ( this time depends on how much mana you give the rune altar and how long the items travel inside the itemducts.
Looking at it now, its simple Still have to set it up and test it but it should work.
Cons:
Possibly a very big build since I will have to setup a barrel for each item.
GetStackInSlot seems to return "manaResource" as for all Botania items(ManaPearl,ManaDiamond,ManaSteel,...) I will have to use a satelite pipe to send only the key items to a chest were the computer checks the items and the rest goes to the normal chest.This is not a mayor problem but makes it more complex than it needs to.
Tier3 Runes can´t be crafted. There is no unique item for this runes. They are all done by a combination fo Tier2 Runes(Winter,Summer,Spring,Autum) and 3 ManaSteel. Since GetStackInSlot only tells me that the name is"Rune" I cant define the cominations
Hope you like it anyway
(And yes. This could be easier if I just expand the build 9 times for each rune, but that would be booring and so I learn a bit of coding )
I think this is not a option.
I finished the list of all items and there are 45 Barrels requiered to have all of the Tier1+2 Runes covered.
As far as I´m aware bundled cables can transport 16 different signals, but how would you tell it to activate the manasteel retrievers (there are 3 of them) for each Tier 1 rune.
I could expend the barrel array and put once barrel per item per recipt, then I could do one coulor for each recipt.
Which in fact makes it bigger but spared tons of Computers+code+ Server Load I guess.
--ItemList: List of ComputerRednetID per item
local LivingStone =54
local ManaSteel_1 =12
local ManaSteel_2 =13
local ManaSteel_3 =14
local FireShard =20
local WaterShard =21
local AirShard = 19
local EarthShard = 18
local BalancedShard = 17
local NetherWart = 16
local BlazeLamp = 15
local NetherBrick = 10
local BoneMeal = 22
local Mushroom = 23
local Stone = 24
local BlockOfCoal = 25
local SugarCanes = 26
local FishingRod = 27
local String = 28
local Feather = 29
local Carpet = 30
local ManaQuartz = 31
local ManaPearl = 32
local ManaDiamond = 33
local Melon = 34
local Slimeball = 35
local Sand_1 = 36
local Sand_2 = 37
local Snow_1 = 38
local Snow_2 = 39
local Cake = 40
local Wool = 41
local Leaves_1 = 42
local Leaves_2 = 43
local Leaves_3 = 44
local SpiderEye = 45
local Wheat = 46
local RowanSapling= 47
local AlderSapling =48
local HawthornSapling = 49
local ImbuedSlate = 50
local RuneofEarth = 11
local RuneofAir = 51
local RuneofWater = 52
local RuneofFire = 53
--KeyItems:
local KeyItemFire = "nether_wart"
local KeyItemWater ="reeds"
local KeyItemEarth ="stone"
local KeyItemAir = "string"
local KeyItemMana = "manaResource"
local KeyItemSummer = "melon"
local KeyItemWinter = "wool"
local KeyItemAutumn = "spider_eye"
local KeyItemSpring = "wheat"
--Peripherals:
chest =peripheral.wrap("right") --Defines the Chest "right" to the Computer as inventory we are going to check for items
--Functions: These functions send a rednet signal to the defined ComputerID�82�B4s which then activate the retriever. (listen programm on resieving Computers can be found here:???)
RuneOfFire= function()
rednet.open("top")
rednet.send(ManaSteel_1) --ManaSteel_1
rednet.send(ManaSteel_2) --ManaSteel_2
rednet.send(ManaSteel_3) --ManaSteel_3
rednet.send(FireShard) --FireShard
rednet.send(NetherWart) --NetherWart
rednet.send(BlazeLamp) --BlazeLamp
rednet.send(NetherBrick) --NetherBrick
rednet.send(LivingStone) --LivingStone
end
RuneOfWater= function()
rednet.open("top")
rednet.send(ManaSteel_1) --ManaSteel_1
rednet.send(ManaSteel_2) --ManaSteel_2
rednet.send(ManaSteel_3) --ManaSteel_3
rednet.send(BoneMeal) --BoneMeal
rednet.send(SugarCanes) --SugarCanes
rednet.send(WaterShard) --WaterShard
rednet.send(FishingRod) --FishingRod
rednet.send(LivingStone) --LivingStone
end
RuneOfEarth= function()
rednet.open("top")
rednet.send(ManaSteel_1) --ManaSteel_1
rednet.send(ManaSteel_2) --ManaSteel_2
rednet.send(ManaSteel_3) --ManaSteel_3
rednet.send(EarthShard) --EarthShard
rednet.send(Mushroom) --Mushroom
rednet.send(Stone) --Stone
rednet.send(BlockOfCoal) --BlockOfCoal
rednet.send(LivingStone) --LivingStone
end
FuRuneOfAir= function()
rednet.open("top")
rednet.send(ManaSteel_1) --ManaSteel_1
rednet.send(ManaSteel_2) --ManaSteel_2
rednet.send(ManaSteel_3) --ManaSteel_3
rednet.send(AirShard) --AirShard
rednet.send(String) --String
rednet.send(Feather) --Feather
rednet.send(Carpet) --Carpet
rednet.send(LivingStone) --LivingStone
end
FuRuneOfMana= function()
rednet.open("top")
rednet.send(ManaSteel_1) --ManaSteel_1
rednet.send(ManaSteel_2) --ManaSteel_2
rednet.send(ManaSteel_3) --ManaSteel_3
rednet.send(BalancedShard) --BalancedShard
rednet.send(ManaQuartz) --ManaQuartz
rednet.send(ManaPearl) --ManaPearl
rednet.send(ManaDiamond) --ManaDiamond
rednet.send(LivingStone) --LivingStone
end
FuRuneOfSummer= function()
rednet.open("top")
rednet.send(RuneOfEarth) --RuneOfEarth
rednet.send(RuneofAir) --RuneOfAir
rednet.send(ImbuedSlate) --ImbuedSlate
rednet.send(Melon) --Melon
rednet.send(Slimeball) --Slimeball
rednet.send(Sand_1) --Sand_1
rednet.send(Sand_2) --Sand_2
rednet.send(LivingStone) --LivingStone
end
FuRuneOfWinter= function()
rednet.open("top")
rednet.send(RuneOfWater) --RuneOfWater
rednet.send(RuneOfEarth) --RuneOfEarth
rednet.send(Snow_1) --Snow_1
rednet.send(Snow_2) --Snow_2
rednet.send(Cake) --Cake
rednet.send(ImbuedSlate) --ImbuedSlate
rednet.send(Wool) --Wool
rednet.send(LivingStone) --LivingStone
end
FuRuneOfAutumn= function()
rednet.open("top")
rednet.send(RuneOfFire) --RuneOfFire
rednet.send(RuneofAir) --RuneOfAir
rednet.send(Leaves_1) --Leaves_1
rednet.send(Leaves_2) --Leaves_2
rednet.send(Leaves_3) --Leaves_3
rednet.send(SpiderEye) --SpiderEye
rednet.send(ImbuedSlate) --ImbuedSlate
rednet.send(LivingStone) --LivingStone
end
FuRuneOfSpring= function()
rednet.open("top")
rednet.send(RuneOfWater) --RuneofWater
rednet.send(RuneOfFire) --RuneOfFire
rednet.send(RowanSapling) --RowanSapling
rednet.send(AlderSapling) --AlderSapling
rednet.send(HawthornSapling) --HawthornSapling
rednet.send(Wheat) --Wheat
rednet.send(ImbuedSlate) --ImbuedSlate
rednet.send(LivingStone) --LivingStone
end
while true do
for i=1,27 do --27=slot Size of Vanilla Chest
sleep(.1) --Program will not work without this. Runs into some kind of timeout.
local slot = chest.getStackInSlot(i) --Getting information about the item
if slot ~= nil then --if slot is empty go on else he goes in here
sleep(11) --Wait until Craft is finished. This can vary based on your build. I need to add a proper function for this so it wont go on until Rune is detected in the Outbound chest.
if slot.name == KeyItemFire then --Check for KeyItem for "Rune of Fire"
RuneOfFire() --Jump into the RuneofFire function
else if slot.name== KeyItemWater then --Check for KeyItem for "Rune of Water"
RuneOfWater() --Jump into the RuneofWater function
else if slot.name== KeyItemEarth then --Check for KeyItem for "Rune of Earth"
RuneOfEarth() --Jump into the RuneofEarth function
else if slot.name== KeyItemAir then --Check for KeyItem for "Rune of Air"
RuneOfAir() --Jump into the RuneofAir function
else if slot.name== KeyItemMana then --Check for KeyItem for "Rune of Mana"
RuneOfMana() --Jump into the RuneofMana function
else if slot.name==KeyItemSummer then --Check for KeyItem for "Rune of Summer"
RuneOfSummer() --Jump into the RuneofSummer function
else if slot.name==KeyItemWinter then --Check for KeyItem for "Rune of Winter"
RuneOfWinter() --Jump into the RuneofWinter function
else if slot.name==KeyItemAutumn then --Check for KeyItem for "Rune of Autum"
RuneOfAutumn() --Jump into the RuneofAutum function
else if slot.name==KeyItemSpring then --Check for KeyItem for "Rune of Spring"
RuneOfSpring() --Jump into the RuneofSring function
-- I know so many "End" but I just rage added them until it works... Still have to learn about if´s and End´s
end
end
end
end
end
end
end
end
end
end
end
end
--sleep(5) -Only for testing to see the results
I will look into the bundles cables but for the moment it has to wait still I will be on business trip for 3 days.
Also I let you a Screenshot how the current setup I´m using in the Testworld, but I still have to optimize it.