37 lines
1.0 KiB
Go
37 lines
1.0 KiB
Go
|
|
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
|
||
|
|
}
|