SHOW:
|
|
- or go back to the newest paste.
1 | -- Set the vault and monitor peripherals | |
2 | - | function vaultSearch() |
2 | + | function monitorSearch() |
3 | - | local names = peripheral.getNames() |
3 | + | |
4 | - | local i, name |
4 | + | |
5 | - | for i, name in pairs(names) do |
5 | + | |
6 | - | if peripheral.getType(name) == "create:item_vault" then |
6 | + | if peripheral.getType(name) == "monitor" then |
7 | - | return peripheral.wrap(name) |
7 | + | return peripheral.wrap(name) |
8 | - | else |
8 | + | |
9 | - | --return null |
9 | + | --return null |
10 | - | end |
10 | + | |
11 | - | end |
11 | + | |
12 | - | end |
12 | + | |
13 | - | |
13 | + | |
14 | - | function monitorSearch() |
14 | + | |
15 | - | local names = peripheral.getNames() |
15 | + | |
16 | - | local i, name |
16 | + | |
17 | - | for i, name in pairs(names) do |
17 | + | |
18 | - | if peripheral.getType(name) == "monitor" then |
18 | + | |
19 | - | return peripheral.wrap(name) |
19 | + | return peripheral.wrap(name) |
20 | - | else |
20 | + | |
21 | - | --return null |
21 | + | --return null |
22 | - | end |
22 | + | |
23 | - | end |
23 | + | |
24 | - | end |
24 | + | |
25 | - | |
25 | + | |
26 | ||
27 | ||
28 | -- Function to draw a colored border on the monitor | |
29 | function drawBorder() | |
30 | -- Define simpler border characters | |
31 | - | if peripheral.call(name,"isWireless") == true then |
31 | + | local horizontalBorder = "-" |
32 | - | print("Wireless Modem Found") |
32 | + | local verticalBorder = "|" |
33 | - | return peripheral.wrap(name) |
33 | + | local topLeftCorner = "+" |
34 | - | else |
34 | + | local topRightCorner = "+" |
35 | - | print("Wired Modem Found") |
35 | + | local bottomLeftCorner = "+" |
36 | - | end |
36 | + | local bottomRightCorner = "+" |
37 | ||
38 | - | --return nil |
38 | + | -- Set the color for the border (e.g., colors.red) |
39 | monitor.setTextColor(colors.red) | |
40 | ||
41 | -- Draw top border | |
42 | monitor.setCursorPos(1, 1) | |
43 | monitor.write(topLeftCorner .. string.rep(horizontalBorder, width - 2) .. topRightCorner) | |
44 | - | function establishConnection() |
44 | + | |
45 | - | local RX = math.random(3,200) |
45 | + | -- Draw bottom border |
46 | - | modem.open(RX) |
46 | + | monitor.setCursorPos(1, height) |
47 | - | modem.transmit(1,RX,"Hello") |
47 | + | monitor.write(bottomLeftCorner .. string.rep(horizontalBorder, width - 2) .. bottomRightCorner) |
48 | - | local event, side, channel, replyChannel, message, distance |
48 | + | |
49 | - | event, side, channel, replyChannel, message, distance = os.pullEvent("modem_message") |
49 | + | -- Draw left and right borders |
50 | - | if((replyChannel == 1) and (message == "Confirmed")) then |
50 | + | for y = 2, height - 1 do |
51 | - | rx = RX |
51 | + | monitor.setCursorPos(1, y) |
52 | - | else |
52 | + | monitor.write(verticalBorder) |
53 | - | rx = nil |
53 | + | monitor.setCursorPos(width, y) |
54 | - | print("Channel error") |
54 | + | monitor.write(verticalBorder) |
55 | - | modem.closeAll() |
55 | + | |
56 | - | end |
56 | + | |
57 | -- Reset color to white for the rest of the text | |
58 | monitor.setTextColor(colors.white) | |
59 | - | function fixName(fullname) |
59 | + | |
60 | - | name = string.gsub(fullname, "minecraft:", "") |
60 | + | |
61 | - | name = string.gsub(name, "createoreexcavation:", "") |
61 | + | -- Function to add or update entries |
62 | - | name = string.gsub(name, "create:", "") |
62 | + | function addOrUpdateEntry(name, value, pc) |
63 | - | name = string.gsub(name, "([%(%)%.%%%_%%:%%+%-%*%?%[%^%$])", " ") |
63 | + | oreValues[pc] = {oreName = name, qty = value} |
64 | - | name = string.gsub(name, "(%a)([%w_']*)", titlecase) |
64 | + | |
65 | - | return name |
65 | + | |
66 | function receiveData() | |
67 | local event, side, channel, replyChannel, message, distance | |
68 | - | function transmit() |
68 | + | event, side, channel, replyChannel, message, distance = os.pullEvent("modem_message") |
69 | - | if(amount == 0) then |
69 | + | if((channel == 1) and (message == "Hello")) then |
70 | - | amount = 1 |
70 | + | if (type(oreValues[replyChannel]) ~= "table") then |
71 | - | end |
71 | + | print("New Device Found") |
72 | - | local data = amount .. ":" .. name |
72 | + | modem.transmit(replyChannel, 1, "Confirmed") |
73 | - | print("transmitting" .. data) |
73 | + | |
74 | - | local sent = false |
74 | + | print("Conflict Detected, Ignoring") |
75 | - | while (sent == false) do |
75 | + | |
76 | - | modem.open(rx) |
76 | + | elseif(channel == 2) then |
77 | - | modem.transmit(2,rx, data) |
77 | + | charPos = string.find(message,":") |
78 | - | local event, side, channel, replyChannel, message, distance |
78 | + | oreName = string.sub(message,(charPos+1)) |
79 | - | event, side, channel, replyChannel, message, distance = os.pullEvent("modem_message") |
79 | + | qty = string.sub(message,0,(charPos-1)) |
80 | - | if((replyChannel == 2)and (message == "Okay"))then |
80 | + | print(oreName.." "..qty) |
81 | - | sent = true |
81 | + | addOrUpdateEntry(oreName,qty,replyChannel) |
82 | - | print("Transmit success") |
82 | + | modem.transmit(replyChannel, 2, "Okay") |
83 | - | else |
83 | + | |
84 | - | print("Transmit error") |
84 | + | |
85 | - | end |
85 | + | |
86 | - | modem.closeAll() |
86 | + | function displayUpdate() |
87 | - | end |
87 | + | monitor.setTextScale(1) |
88 | width, height = monitor.getSize() | |
89 | monitor.clear() | |
90 | - | function connectionTimeout() |
90 | + | drawBorder() |
91 | - | os.sleep(5) |
91 | + | dispName = "Ore Collection Values" |
92 | - | print("Connection Timeout") |
92 | + | wPos = math.floor((width - string.len(dispName)) / 2) + 1 |
93 | hPos = 2 | |
94 | monitor.setCursorPos(wPos,hPos) | |
95 | - | -- Function to convert text to title case |
95 | + | monitor.write(dispName) |
96 | - | function titlecase(first, rest) |
96 | + | |
97 | - | return first:upper() .. rest:lower() |
97 | + | if next(oreValues) == nil then |
98 | hPos = hPos + 2 | |
99 | - | |
99 | + | dispName = "Empty" |
100 | wPos = math.floor((width - string.len(dispName)) / 2) + 1 | |
101 | monitor.setCursorPos(wPos,hPos) | |
102 | - | -- Define simpler border characters |
102 | + | monitor.write(dispName) |
103 | - | local horizontalBorder = "-" |
103 | + | return |
104 | - | local verticalBorder = "|" |
104 | + | |
105 | - | local topLeftCorner = "+" |
105 | + | |
106 | - | local topRightCorner = "+" |
106 | + | local totalOreValues = {} |
107 | - | local bottomLeftCorner = "+" |
107 | + | for pc, entry in pairs(oreValues) do |
108 | - | local bottomRightCorner = "+" |
108 | + | local oreName = entry.oreName |
109 | - | |
109 | + | local qty = tonumber(entry.qty) or 0 |
110 | - | -- Set the color for the border (e.g., colors.red) |
110 | + | if not totalOreValues[oreName] then |
111 | - | monitor.setTextColor(colors.red) |
111 | + | totalOreValues[oreName] = 0 |
112 | - | |
112 | + | |
113 | - | -- Draw top border |
113 | + | totalOreValues[oreName] = totalOreValues[oreName] + qty |
114 | - | monitor.setCursorPos(1, 1) |
114 | + | |
115 | - | monitor.write(topLeftCorner .. string.rep(horizontalBorder, width - 2) .. topRightCorner) |
115 | + | |
116 | - | |
116 | + | for oreName, totalQty in pairs(totalOreValues) do |
117 | - | -- Draw bottom border |
117 | + | hPos = hPos + 2 |
118 | - | monitor.setCursorPos(1, height) |
118 | + | dispName = oreName.. " = ".. totalQty |
119 | - | monitor.write(bottomLeftCorner .. string.rep(horizontalBorder, width - 2) .. bottomRightCorner) |
119 | + | wPos = math.floor((width - string.len(dispName)) / 2) + 1 |
120 | - | |
120 | + | monitor.setCursorPos(wPos,hPos) |
121 | - | -- Draw left and right borders |
121 | + | monitor.write(dispName) |
122 | - | for y = 2, height - 1 do |
122 | + | |
123 | - | monitor.setCursorPos(1, y) |
123 | + | |
124 | - | monitor.write(verticalBorder) |
124 | + | |
125 | - | monitor.setCursorPos(width, y) |
125 | + | -- Attach Peripherals |
126 | - | monitor.write(verticalBorder) |
126 | + | |
127 | - | end |
127 | + | |
128 | - | |
128 | + | |
129 | - | -- Reset color to white for the rest of the text |
129 | + | -- Open Modem Channels |
130 | - | monitor.setTextColor(colors.white) |
130 | + | modem.open(1) |
131 | modem.open(2) | |
132 | ||
133 | - | rx = nil |
133 | + | -- Create the table |
134 | - | wirelessSetup = false |
134 | + | oreValues = {} |
135 | -- Set text scale | |
136 | - | vault = vaultSearch() |
136 | + | |
137 | ||
138 | while true do | |
139 | - | monitor.setTextScale(0.5) |
139 | + | parallel.waitForAll(receiveData,displayUpdate) |
140 | - | print("Starting Up...") |
140 | + | |
141 | - | monitor.setCursorPos(1, 1) |
141 | + |