Advertisement
BigBlow_

MobFarm-Spawner-Controller-6

Mar 11th, 2025 (edited)
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.89 KB | None | 0 0
  1. -- Configuration des spawners
  2. local spawners = {
  3. {id = 1, name = "Cave Creeper"},
  4. {id = 2, name = "Blaze"},
  5. {id = 3, name = "Ancient Knight"},
  6. {id = 4, name = "Enderman"},
  7. {id = 5, name = "Witch"},
  8. {id = 6, name = "Cave Enderman"},
  9. {id = 7, name = "Creeper"},
  10. {id = 8, name = "Wither Skeleton"},
  11. {id = 9, name = "Drowned"},
  12. {id = 10, name = "Deepling"},
  13. {id = 11, name = "Slime"},
  14. {id = 12, name = "Magma Slime"},
  15. {id = 13, name = "Skeleton"},
  16. {id = 14, name = "Evoker"}
  17. }
  18.  
  19. -- Liste des spawners qui doivent etre actives au demarrage {1, 3, 5}
  20. local activatedSpawners = {0}
  21.  
  22. -- Fonction pour obtenir l'horodatage
  23. local function getTimestamp()
  24. return os.date("%Y-%m-%d %H:%M:%S")
  25. end
  26.  
  27. local modem = peripheral.find("modem") -- Trouve le modem sans fil
  28. if not modem then
  29. error("Aucun modem sans fil detecte")
  30. end
  31.  
  32. modem.open(128) -- Ouvre le canal de communication
  33. local mon = peripheral.find("monitor")
  34. if not mon then
  35. error("Aucun ecran detecte")
  36. end
  37.  
  38. mon.setTextScale(1) -- Ajuste la taille du texte
  39. local state = {} -- Stocke l'etat de chaque spawner
  40.  
  41. -- Initialiser tous les spawners a "OFF"
  42. for i = 1, #spawners do
  43. state[spawners[i].id] = false
  44. end
  45.  
  46. -- Affiche l'ecran de demarrage avec compte a rebours
  47. local function startupScreen()
  48. mon.clear()
  49.  
  50. for i = 5, 0, -1 do
  51. mon.setCursorPos(5, 3)
  52. mon.setTextColor(colors.white)
  53. mon.write("Demarrage dans " .. i)
  54.  
  55. -- Afficher le bouton "Passer"
  56. mon.setCursorPos(5, 5)
  57. mon.setTextColor(colors.yellow)
  58. mon.write("[Passer]")
  59.  
  60. -- Attendre 1 seconde sauf si clic detecte
  61. local timer = os.startTimer(1)
  62. while true do
  63. local event, side, x, y = os.pullEvent()
  64. if event == "timer" and side == timer then
  65. break -- Timer expire, continuer le compte a rebours
  66. elseif event == "monitor_touch" and x >= 5 and x <= 11 and y == 5 then
  67. return -- Clic sur "Passer", sauter l'attente
  68. end
  69. end
  70. end
  71. end
  72.  
  73. -- Desactive tous les spawners au demarrage sauf ceux dans activatedSpawners
  74. local function deactivateAllExceptActivated()
  75. for _, spawner in ipairs(spawners) do
  76. local isActivated = false
  77.  
  78. -- Verifier si ce spawner est dans la liste activatedSpawners
  79. for _, activeID in ipairs(activatedSpawners) do
  80. if spawner.id == activeID then
  81. isActivated = true
  82. break
  83. end
  84. end
  85.  
  86. -- Si le spawner n'est pas dans la liste, on l'eteint
  87. if not isActivated then
  88. modem.transmit(128, 128, {id = spawner.id, state = false})
  89. print(getTimestamp() .. " - ID " .. spawner.id .. " OFF")
  90. os.sleep(0.1) -- Pause pour eviter les pertes de signal
  91. end
  92. end
  93. end
  94.  
  95. -- Active les spawners definis dans activatedSpawners
  96. local function activateSpawnersOnStart()
  97. for _, id in ipairs(activatedSpawners) do
  98. modem.transmit(128, 128, {id = id, state = true})
  99. print(getTimestamp() .. " - ID " .. id .. " ON")
  100. os.sleep(0.1)
  101. state[id] = true
  102. end
  103. end
  104.  
  105. -- Affiche l'interface utilisateur
  106. local function drawUI()
  107. mon.clear()
  108.  
  109. -- Affichage du titre en haut a gauche, en blanc
  110. mon.setTextColor(colors.white)
  111. mon.setCursorPos(1, 1)
  112. mon.write("Spawners Control Panel :")
  113.  
  114. -- Affichage des etats des spawners dans un tableau
  115. for i, spawner in ipairs(spawners) do
  116. -- Colonne de gauche pour le nom du spawner (toujours en blanc)
  117. mon.setCursorPos(1, i + 2)
  118. mon.setTextColor(colors.white)
  119. mon.write(spawner.name)
  120.  
  121. -- Colonne de droite pour l'etat (ON/OFF) avec couleur
  122. mon.setCursorPos(20, i + 2)
  123.  
  124. -- ON en vert ou OFF en rouge
  125. if state[spawner.id] then
  126. mon.setTextColor(colors.green) -- ON en vert
  127. mon.write("ON")
  128. else
  129. mon.setTextColor(colors.red) -- OFF en rouge
  130. mon.write("OFF")
  131. end
  132. end
  133. end
  134.  
  135. -- Envoie l'ordre a un spawner
  136. local function sendCommand(spawnerID, newState)
  137. modem.transmit(128, 128, {id = spawnerID, state = newState})
  138. print(getTimestamp() .. " - ID " .. spawnerID .. " " .. (newState and "ON" or "OFF"))
  139. os.sleep(0.1)
  140. end
  141.  
  142. -- Gere les clics sur l'ecran
  143. local function handleClick(x, y)
  144. local index = y - 2
  145. if spawners[index] then
  146. local spawner = spawners[index]
  147. -- Inverse l'etat actuel
  148. state[spawner.id] = not state[spawner.id]
  149.  
  150. -- Envoie de l'etat a l'autre ordinateur
  151. sendCommand(spawner.id, state[spawner.id])
  152. drawUI() -- Mise a jour de l'interface
  153. end
  154. end
  155.  
  156. -- Fonction d'ecoute des messages entrants
  157. local function listenForMessages()
  158. while true do
  159. -- Ecoute des messages des autres ordinateurs Master
  160. local _, _, _, _, message = os.pullEvent("modem_message")
  161. if message and message.id and message.state ~= nil then
  162. -- Met a jour l'etat du spawner sur cet ordinateur
  163. state[message.id] = message.state
  164. print(getTimestamp() .. " - Recu <- ID " .. message.id .. " " .. (message.state and "ON" or "OFF"))
  165. drawUI() -- Mise a jour de l'interface
  166. end
  167. end
  168. end
  169.  
  170. -- Demarrage du programme
  171. startupScreen() -- Affiche l'ecran de demarrage
  172. deactivateAllExceptActivated() -- Desactive tous les spawners sauf ceux actives au demarrage
  173. activateSpawnersOnStart() -- Active les spawners definis
  174. drawUI() -- Affiche l'interface de controle
  175.  
  176. -- Demarrer l'ecoute des messages en parallele avec la gestion des clics
  177. parallel.waitForAny(listenForMessages, function()
  178. while true do
  179. local event, side, x, y = os.pullEvent("monitor_touch")
  180. handleClick(x, y)
  181. end
  182. end)
  183.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement