up3
Build and deploy / Build (push) Has been cancelled
Build and deploy / Update Contributors (push) Has been cancelled
Build and deploy / Deploy (push) Has been cancelled
Build and deploy / Build (push) Has been cancelled
Build and deploy / Update Contributors (push) Has been cancelled
Build and deploy / Deploy (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
package world
|
||||
|
||||
import (
|
||||
"github.com/df-mc/dragonfly/server/block/cube"
|
||||
"github.com/df-mc/dragonfly/server/player/chat"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
// Sleeper represents an entity that can sleep.
|
||||
type Sleeper interface {
|
||||
Entity
|
||||
|
||||
Name() string
|
||||
UUID() uuid.UUID
|
||||
|
||||
Messaget(t chat.Translation, a ...any)
|
||||
SendSleepingIndicator(sleeping, max int)
|
||||
|
||||
Sleep(pos cube.Pos)
|
||||
Sleeping() (cube.Pos, bool)
|
||||
Wake()
|
||||
}
|
||||
|
||||
// Time constants for sleep usage.
|
||||
const (
|
||||
TimeSleep = 12542
|
||||
TimeWake = 23459
|
||||
TimeSleepWithRain = 12010
|
||||
TimeWakeWithRain = 23991
|
||||
TimeFull = 24000
|
||||
)
|
||||
|
||||
// tryAdvanceDay attempts to advance the day of the world, by first ensuring that all sleepers are sleeping, and then
|
||||
// updating the time of day.
|
||||
func (ticker) tryAdvanceDay(tx *Tx, timeCycle bool) {
|
||||
sleepers := tx.Sleepers()
|
||||
time := tx.w.Time() % TimeFull
|
||||
|
||||
for s := range sleepers {
|
||||
if !tx.Thundering() {
|
||||
if !tx.Raining() && (time <= TimeSleep || time >= TimeWake) {
|
||||
return
|
||||
}
|
||||
if time <= TimeSleepWithRain || time >= TimeWakeWithRain {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if _, ok := s.Sleeping(); !ok {
|
||||
// We can't advance the time - not everyone is sleeping.
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
for s := range sleepers {
|
||||
s.Wake()
|
||||
}
|
||||
|
||||
totalTime := tx.w.Time()
|
||||
if timeCycle {
|
||||
tx.w.SetTime(totalTime + TimeFull - time)
|
||||
}
|
||||
tx.w.StopRaining()
|
||||
}
|
||||
Reference in New Issue
Block a user