54 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| -- 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
 |