Add time tracking and display functionality

This commit is contained in:
ZareMate 2025-01-07 07:21:27 +01:00
parent 7e0e96d1f9
commit 39677499a9
Signed by: zaremate
GPG Key ID: 369A0E45E03A81C3

53
main/time.lua Normal file
View File

@ -0,0 +1,53 @@
-- Define constants
local tick_per_second = 20
local tick_per_minute = tick_per_second * 60
local tick_per_hour = tick_per_minute * 60
-- Initialize objectives and constants
commands.exec("scoreboard objectives add time_t custom:play_time")
commands.exec("scoreboard objectives add time_h dummy")
commands.exec("scoreboard objectives add time_m dummy")
commands.exec("scoreboard objectives add time_s dummy")
commands.exec("scoreboard objectives add time_formatted dummy")
commands.exec("scoreboard objectives add time_display dummy")
-- Display on the sidebar
commands.exec("scoreboard objectives setdisplay sidebar time_display")
-- Main loop to update the time continuously
while true do
-- Calculate seconds
commands.exec("execute as @a run scoreboard players operation @s time_s = @s time_t")
commands.exec("execute as @a run scoreboard players operation @s time_s %= " .. tick_per_minute .. " const")
commands.exec("execute as @a run scoreboard players operation @s time_s /= " .. tick_per_second .. " const")
-- Calculate minutes
commands.exec("execute as @a run scoreboard players operation @s time_m = @s time_t")
commands.exec("execute as @a run scoreboard players operation @s time_m /= " .. tick_per_minute .. " const")
commands.exec("execute as @a run scoreboard players operation @s time_m %= 60 const")
-- Calculate hours
commands.exec("execute as @a run scoreboard players operation @s time_h = @s time_t")
commands.exec("execute as @a run scoreboard players operation @s time_h /= " .. tick_per_hour .. " const")
-- Combine into HHMMSS format
commands.exec("execute as @a run scoreboard players set @s time_formatted 0")
commands.exec("execute as @a run scoreboard players operation @s time_formatted += @s time_h")
commands.exec("execute as @a run scoreboard players operation @s time_formatted *= 100 const")
commands.exec("execute as @a run scoreboard players operation @s time_formatted += @s time_m")
commands.exec("execute as @a run scoreboard players operation @s time_formatted *= 100 const")
commands.exec("execute as @a run scoreboard players operation @s time_formatted += @s time_s")
-- Play a sound if the hour has changed
commands.exec('execute as @a unless score @s time_h = @s prev_time_h run playsound minecraft:entity.experience_orb.pickup master @s ~ ~ ~')
commands.exec('execute as @a unless score @s time_h = @s prev_time_h run scoreboard players operation @s prev_time_h = @s time_h')
-- Copy the formatted time to the display objective
commands.exec("execute as @a run scoreboard players operation @s time_display = @s time_formatted")
-- Display on the actionbar
commands.exec('execute as @a run title @s actionbar [{"text":"Time: "},{"score":{"name":"@s","objective":"time_h"},"color":"gold"},{"text":":"},{"score":{"name":"@s","objective":"time_m"},"color":"yellow"},{"text":":"},{"score":{"name":"@s","objective":"time_s"},"color":"green"}]')
-- Delay to prevent excessive updates
os.sleep(0.1)
end