Posted 31 October 2013 - 03:11 AM
I needed a chicken farm. I made one.
[ Building instructions ]
[media]http://www.youtube.com/watch?v=NOwS9oHSY9I[/media]
[ Requirements ]
Project: Red
ComputerCraft
Forge Microblocks (comes with PR)
Iron Chest (optional, not required)
control:
http://pastebin.com/SRQCF4S8
startup (For advanced turtle):
http://pastebin.com/WamC4Rwh
startup (For normal turtle):
http://pastebin.com/08avihKD
[ Changelog ]
Note: You need to build it exactly like that, or it won't work!
[ Building instructions ]
[media]http://www.youtube.com/watch?v=NOwS9oHSY9I[/media]
[ Requirements ]
Project: Red
ComputerCraft
Forge Microblocks (comes with PR)
Iron Chest (optional, not required)
ASelection:
[url="http://pastebin.com/GEs6TC0h"]http://pastebin.com/GEs6TC0h[/url]
[spoiler]
[code]
file = fs.open("fmode", "rb")
local mode = file.read()
file.close()
shell.run("clear")
print("Press mouse to select action....")
local getOut = false
function mouseclick()
os.pullEvent("mouse_click")
end
function kill()
while true do
turtle.attackDown()
for i = 1, 15 do
turtle.select(i)
turtle.dropDown()
end
end
end
function breed()
while true do
for i = 1, 15 do
turtle.select(i)
if turtle.compareTo(16) then
turtle.dropDown()
end
end
end
end
noExec = false
if mode == 1 then
print("Chicken Kill Mode")
parallel.waitForAny(mouseclick, kill)
elseif mode == 2 then
print("Chicken Breed Mode")
print("Place eggs in slot 1-15 (Leave slot 16)")
--turtle.up()
parallel.waitForAny(mouseclick, breed)
--turtle.down()
elseif mode == 3 then
noExec = true
end
fs.delete("fmode")
if noExec == false then os.reboot() end
shell.run("clear")
print("->Switching to text console admin mode. Please use reboot to reboot")
fs.delete("fmode")
control:
http://pastebin.com/SRQCF4S8
Spoiler
turtle.select(1)
local menu_options = { --This is our menu table. It contains basic data about the menu
[1] = {text="Kill Mob mode", color=colors.red},
[2] = {text="Breeding mode", color=colors.green},
[3] = {text="!!! ADMIN !!!", color=colors.cyan}
}
local termX, termY = term.getSize() --The x/y size of the terminal
local function menuDraw(selected) --Our main draw function
local yPos = termY/2 - #menu_options/2 --The initial y position
for index, data in pairs(menu_options) do
menu_options[index].bounds = { --Create a new table in each option with the boundary data
x1 = termX/2 - (#data.text+4)/2;
x2 = termX/2 + (#data.text+4)/2;
y = yPos;
}
term.setTextColor(data.color)
term.setCursorPos(data.bounds.x1, data.bounds.y)
local text =
index==selected and "[ "..data.text.." ]" or
" "..data.text.." " --Essentially an if statement, but in a contracted form
term.write(text)
yPos = yPos+1 --Increment the initial y pos so we can move on the next line
end
end
local function checkClick(x,y) --Check the mouse click to see if there's a menu option
for index, data in pairs(menu_options) do
if x>= data.bounds.x1 and x<= data.bounds.x2 and y==data.bounds.y then
return index --Returns the index of the clicked option
end
end
return false --If it went through the entire for loop without success, return false
end
term.clear()
local selector = 1 --Our selector
while true do --The main loop. I would generally put this inside of a function for a program.
menuDraw(selector) --Draw the menu first
local e = {os.pullEvent()} --Pull an event and put the returned values into a table
if e[1] == "key" then --If it's a key...
if e[2] == keys.down then -- ... and it's the down arrow
selector = selector < #menu_options and selector+1 or 1 --Increment the selector if the selector < #menu_options. Otherwise reset it to 1
elseif e[2] == keys.up then
selector = selector > 1 and selector-1 or #menu_options --Decrement the selector if the selector > 1. Otherwise, reset it to #menu_options
elseif e[2] == keys.enter then
break --Break out of the loop
end
elseif e[1] == "mouse_click" then
local value = checkClick(e[3], e[4]) --Check the mouse click
if value then --If checkClick returns a value and not false
selector = value --Set the selector to that value and break out of the loop
break
end
end
end
fs.delete("fmode")
file = fs.open("fmode", "wb")
if selector == 1 then
file.write(1)
elseif selector == 2 then
file.write(2)
elseif selector == 3 then
file.write(3)
end
file.close()
--shell.run("ASelection")
os.reboot()
startup (For advanced turtle):
http://pastebin.com/WamC4Rwh
Spoiler
if fs.exists("fmode") then
shell.run("ASelection")
else
shell.run("control")
end
startup (For normal turtle):
http://pastebin.com/08avihKD
Spoiler
while true do
for i = 1, 15 do
turtle.select(i)
if (turtle.compareTo(16)) then
turtle.dropUp()
else
turtle.drop()
end
end
sleep(15)
end
[ Changelog ]
1.0 Initial release
Note: You need to build it exactly like that, or it won't work!