Files
mc/server/player/playerdb/effect.go
T

51 lines
1.1 KiB
Go
Raw Normal View History

2026-07-09 08:33:57 +08:00
package playerdb
import "github.com/df-mc/dragonfly/server/entity/effect"
func effectsToData(effects []effect.Effect) []jsonEffect {
data := make([]jsonEffect, len(effects))
for key, eff := range effects {
id, ok := effect.ID(eff.Type())
if !ok {
continue
}
data[key] = jsonEffect{
ID: id,
Duration: eff.Duration(),
Level: eff.Level(),
Ambient: eff.Ambient(),
ParticlesHidden: eff.ParticlesHidden(),
Infinite: eff.Infinite(),
}
}
return data
}
func dataToEffects(data []jsonEffect) []effect.Effect {
effects := make([]effect.Effect, len(data))
for i, d := range data {
e, ok := effect.ByID(d.ID)
if !ok {
continue
}
switch eff := e.(type) {
case effect.LastingType:
switch {
case d.Ambient:
effects[i] = effect.NewAmbient(eff, d.Level, d.Duration)
case d.Infinite:
effects[i] = effect.NewInfinite(eff, d.Level)
default:
effects[i] = effect.New(eff, d.Level, d.Duration)
}
if d.ParticlesHidden {
effects[i] = effects[i].WithoutParticles()
}
default:
effects[i] = effect.NewInstant(eff, d.Level)
}
}
return effects
}