Add time tracking and display functionality
This commit is contained in:
parent
7e0e96d1f9
commit
39677499a9
53
main/time.lua
Normal file
53
main/time.lua
Normal 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
|
||||
Loading…
x
Reference in New Issue
Block a user