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)



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!