MrFoxit

StorageCounterAutomatique - Clients

Mar 12th, 2025 (edited)
22
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.84 KB | None | 0 0
  1. local DEBUG = true  -- Active/Désactive le mode debug
  2. local redstoneSide = "right"  -- Change ça si ta lampe est branchée ailleurs
  3.  
  4. local modem = peripheral.find("modem") or error("Pas de modem détecté", 0)
  5. rednet.open(peripheral.getName(modem))
  6.  
  7. local container = peripheral.find("inventory") or error("Pas de conteneur détecté", 0)
  8.  
  9.  
  10. -- Fonction pour formater le nom de l'item
  11. local function formatItemName(itemName)
  12.     if not itemName then return nil end
  13.         itemName = itemName:gsub("minecraft:", "")
  14.         itemName = itemName:gsub("_", " ")
  15.         itemName = itemName:gsub("(%a)(%w*)", function(first, rest)
  16.         return first:upper() .. rest:lower()
  17.     end)
  18.  
  19.     return itemName
  20. end
  21.  
  22. -- Fonction pour récupérer le nom du premier item trouvé
  23. local function getFirstItemName()
  24.     local items = container.list()
  25.     for slot, item in pairs(items) do
  26.         return formatItemName(item.name)
  27.     end
  28.     return nil  -- Retourne nil si aucun item n'est présent
  29. end
  30.  
  31. while true do
  32.     -- Détecte le premier item présent
  33.     local itemName = getFirstItemName()
  34.     local containerName = itemName or os.getComputerLabel() or "Inconnu"
  35.  
  36.     -- Détecte le nombre total de slots disponibles dans le conteneur
  37.     local totalSlots = 0
  38.     while true do
  39.         local success, size = pcall(function() return container.size() end)
  40.         if success then
  41.             totalSlots = size
  42.             break
  43.         else
  44.             print("Erreur : Impossible de détecter la taille du conteneur. Retrying...")
  45.             sleep(1)
  46.         end
  47.     end
  48.  
  49.     local totalItems = 0
  50.     local maxCapacity = totalSlots * 64  -- Chaque slot peut contenir 64 items par défaut
  51.  
  52.     -- Scan du contenu du coffre
  53.     for slot, item in pairs(container.list()) do
  54.         totalItems = totalItems + item.count
  55.     end
  56.  
  57.     -- Calcul du pourcentage de remplissage
  58.     local percentFull = (totalItems / maxCapacity) * 100
  59.  
  60.     -- Création du message à envoyer
  61.     local message = {
  62.         name = containerName,  -- Maintenant, c'est le nom formaté de l'item
  63.         current = totalItems,
  64.         max = maxCapacity,
  65.         percent = percentFull
  66.     }
  67.  
  68.     -- Envoi des données au serveur
  69.     rednet.broadcast(message, "storage_monitor")
  70.  
  71.     -- Mode debug : afficher les données envoyées et allumer la lampe
  72.     if DEBUG then
  73.         print("Envoyé : " .. containerName)
  74.         print("Total Slots : " .. totalSlots)
  75.         print("Stock actuel : " .. totalItems .. "/" .. maxCapacity)
  76.         print("Remplissage : " .. string.format("%.2f", percentFull) .. "%")
  77.         print("----")
  78.        
  79.         -- Allumer la lampe Redstone
  80.         redstone.setOutput(redstoneSide, true)
  81.         sleep(1)  -- Rester allumé 1s
  82.         redstone.setOutput(redstoneSide, false)
  83.     end
  84.  
  85.     sleep(5)  -- Mise à jour toutes les 5 secondes
  86. end
  87.  
Add Comment
Please, Sign In to add comment