View difference between Paste ID: 1Eu8CfSX and ttGU4Yki
SHOW: | | - or go back to the newest paste.
1
--
2
-- Chicken Farm sorting machine
3
--
4
5
local delay = .5
6
local CHICKEN = "minecraft:cooked_chicken"
7
local FEATHER = "minecraft:feather"
8
local w,h = term.getSize()
9
local count = {
10
	[CHICKEN] = 0,
11
	[FEATHER] = 0
12
}
13
14
local function initFacing()
15
	local b, d = turtle.inspect()
16
	if not b then
17
		return
18
	elseif d.name == "minecraft:hopper" then
19
		turtle.turnLeft()
20
		turtle.turnLeft()
21
		return
22
	else
23
		turtle.turnLeft()
24
		initFacing()
25
		return
26
	end
27
end
28
29
local function selectSlot(n)
30
	if turtle.getSelectedSlot() ~= n then
31
		turtle.select(n)
32
	end
33
end
34
35
local function facingChest(name)
36
	initFacing()
37
	if name == CHICKEN then
38
		turtle.turnLeft()
39
	elseif name == FEATHER then
40
		turtle.turnRight()
41
	else
42
		return false
43
	end
44
	return true
45
end
46
47
-- Formate un nombre de secondes en dur?e lisible
48
local iniClock = os.clock()
49
local function timeStr()
50
	local sec = os.clock() - iniClock
51
    local d = math.floor(sec/86400) --24*60*60 sec
52
    local h = math.floor(sec/3600)%24 -- 60x60 sec
53
    local m = math.floor(sec/60)%60 -- 60sec
54
    local s = math.floor(sec%60) --Reste
55
    local str = ""
56
    if d>0 then str = d>1 and d.." days " or "1 day " end
57
    if h>0 then str = str..h.."h" end
58
    if m>0 then str = str..(m>9 and m or "0"..m) end
59
    if h==0 then str = m>0 and str..":"..(s>9 and s or "0"..s) or s.."s" end
60
    return str
61
end
62
63
local function store()
64
	for slot=1,16 do
65
		local d = turtle.getItemDetail(slot)
66
		if d and d.name then
67
			count[d.name] = count[d.name] and count[d.name] + d.count or d.count
68
			if facingChest(d.name) then
69
				selectSlot(slot)
70
				turtle.drop()
71
			end
72
			selectSlot(slot%16+1)
73
		end
74
	end
75
	initFacing()
76
end
77
78
local function output(str,line)
79
	local x,y = term.getCursorPos()
80
	term.setCursorPos(1,line)
81
	term.clearLine()
82
	term.write(tostring(str))
83
	term.setCursorPos(x,y)
84
end
85
86
local function display()
87
	term.clear()
88
	--Header
89
	term.setTextColor(colors.black)
90
	term.setBackgroundColor(colors.white)
91
	output(string.format("KFC Sorter | %s", timeStr()),1)
92
	term.setTextColor(colors.white)
93
	term.setBackgroundColor(colors.black)
94
	output(string.rep(string.char(131), w), 2)
95
	--Item count
96
	output(string.format("Chicken: %s", count[CHICKEN]), 3)
97
	output(string.format("Feather: %s", count[FEATHER]), 4)
98
	local line = 5
99
	for n, c in pairs(count) do
100
		if n ~= CHICKEN and n ~= FEATHER then
101
			output(string.format("%s %s", n, c), line)
102
			line = line+1
103
		end
104
		if line > h then
105
			break
106
		end
107
	end
108
end
109
110
local function main()
111
	local tick, e, p = os.startTimer(delay), 0
112
	while true do
113
		selectSlot(1)
114
		display()
115
		e, p = os.pullEvent()
116
		if e == "timer" and p == tick then
117
			tick = os.startTimer(delay)
118
			store()
119
		elseif e == "turtle_inventory" then
120
			os.cancelTimer(tick)
121
			store()
122
			tick = os.startTimer(delay)
123
		end
124
	end
125
end
126
127
main()