Files
mc/server/item/firework_explosion.go
T
TarnaWijaya 26ed99fda6
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
up3
2026-07-09 08:33:57 +08:00

52 lines
1.6 KiB
Go

package item
// FireworkExplosion represents an explosion of a firework.
type FireworkExplosion struct {
// Shape represents the shape of the explosion.
Shape FireworkShape
// Colour is the colour of the explosion.
Colour Colour
// Fade is the colour the explosion should fade into. Fades must be set to true in order for this to function.
Fade Colour
// Fades is true if the explosion should fade into the fade colour.
Fades bool
// Twinkle is true if the explosion should twinkle on explode.
Twinkle bool
// Trail is true if the explosion should have a trail.
Trail bool
}
// EncodeNBT ...
func (f FireworkExplosion) EncodeNBT() map[string]any {
data := map[string]any{
"FireworkType": f.Shape.Uint8(),
"FireworkColor": [1]uint8{uint8(invertColour(f.Colour))},
"FireworkFade": [0]uint8{},
"FireworkFlicker": boolByte(f.Twinkle),
"FireworkTrail": boolByte(f.Trail),
}
if f.Fades {
data["FireworkFade"] = [1]uint8{uint8(invertColour(f.Fade))}
}
return data
}
// DecodeNBT ...
func (f FireworkExplosion) DecodeNBT(data map[string]any) any {
f.Shape = FireworkShapes()[data["FireworkType"].(uint8)]
f.Twinkle = data["FireworkFlicker"].(uint8) == 1
f.Trail = data["FireworkTrail"].(uint8) == 1
colours := data["FireworkColor"]
if diskColour, ok := colours.([1]uint8); ok {
f.Colour = invertColourID(int16(diskColour[0]))
} else if networkColours, ok := colours.([]any); ok {
f.Colour = invertColourID(int16(networkColours[0].(uint8)))
}
if fades, ok := data["FireworkFade"].([1]uint8); ok {
f.Fade, f.Fades = invertColourID(int16(fades[0])), true
}
return f
}