Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local me = peripheral.find("me_bridge")
- local trashPeripheral = "minecraft:chest_0"
- local check_interval = 20
- local running = true
- print(textutils.formatTime(os.time())..": Spell management system started. Checking every " .. check_interval .. " seconds.")
- local function trim(string)
- return string:gsub("^%s*(.-)%s*$", "%1")
- end
- local function formatScrollName(name, level)
- name = trim(name:gsub("%[", ""):gsub("Scroll]", ""))
- return string.format("%s (Level %s)", name, level)
- end
- -- Function to clean up spells in the ME system
- local function cleanSpells()
- local spells = {}
- local items = me.getItems()
- local itemsToTrash = {}
- -- Scan all items and track highest level per spell ID
- for _, item in ipairs(items) do
- if item.name == "irons_spellbooks:scroll" then
- local nbt = item.components["irons_spellbooks:spell_container"].data
- -- Since there's only one spell per scroll, take the first (and only) entry
- local data = nbt[1]
- if data then
- local id = data.id
- local level = data.level
- if not spells[id] or spells[id].highest < level then
- spells[id] = {highest = level}
- end
- -- Mark for potential trashing if not the highest
- table.insert(itemsToTrash, {item = item, id = id, level = level})
- end
- end
- end
- -- Now, trash items that are not the highest level for their spell ID
- for _, trashData in ipairs(itemsToTrash) do
- local spell = spells[trashData.id]
- if trashData.level < spell.highest then
- print(textutils.formatTime(os.time())..": Removing spell: " .. formatScrollName(trashData.item.displayName, trashData.level .. "/" .. spell.highest))
- me.exportItem(trashData.item, trashPeripheral)
- end
- end
- end
- -- Function to handle termination
- local function handleTermination()
- running = false
- print(textutils.formatTime(os.time())..": Shutting down spell management system...")
- end
- -- Check for ME bridge
- if not me then
- error("ME Bridge peripheral not found!")
- end
- -- Initial cleanup
- print(textutils.formatTime(os.time())..": Performing initial spell cleanup...")
- local success, err = pcall(cleanSpells)
- if not success then
- print(textutils.formatTime(os.time())..": Initial error in cleanSpells: " .. tostring(err))
- end
- -- The main loop: wait for timer or termination
- while running do
- local timer = os.startTimer(check_interval)
- local event = os.pullEvent()
- if event == "timer" then
- local success, err = pcall(cleanSpells)
- if not success then
- print(textutils.formatTime(os.time())..": Error in cleanSpells: " .. tostring(err))
- end
- elseif event == "terminate" then
- handleTermination()
- break
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment