Files

37 lines
1.0 KiB
Go
Raw Permalink Normal View History

2026-07-09 08:33:57 +08:00
package block
import (
"fmt"
"github.com/df-mc/dragonfly/server/internal/nbtconv"
"github.com/df-mc/dragonfly/server/item"
)
// BannerPatternLayer is a wrapper over BannerPatternType with a colour property.
type BannerPatternLayer struct {
// Type represents the type of banner pattern.
Type BannerPatternType
// Colour is the colour the pattern should be rendered in.
Colour item.Colour
}
// EncodeNBT encodes the given BannerPatternLayer into an NBT map.
func (b BannerPatternLayer) EncodeNBT() map[string]any {
return map[string]any{
"Pattern": bannerPatternID(b.Type),
"Color": int32(invertColour(b.Colour)),
}
}
// DecodeNBT decodes the given NBT map into a BannerPatternLayer and returns it.
func (b BannerPatternLayer) DecodeNBT(data map[string]any) any {
id := nbtconv.String(data, "Pattern")
pattern, exists := BannerPatternByID(id)
if !exists {
panic(fmt.Errorf("unknown banner pattern id %q", id))
}
b.Type = pattern
b.Colour = invertColourID(int16(nbtconv.Int32(data, "Color")))
return b
}