Advertisement
BigBlow_

MobFarm-Spawner-Controller-6

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