Files
mc/server/item/armour_trim.go
T

78 lines
2.0 KiB
Go
Raw Normal View History

2026-07-09 08:33:57 +08:00
package item
import "github.com/df-mc/dragonfly/server/world"
// ArmourTrim is a decorative addition to an armour piece. It consists of a
// template that specifies the pattern and a material that specifies the colour.
type ArmourTrim struct {
Template SmithingTemplateType
Material ArmourTrimMaterial
}
// Zero checks if an ArmourTrim is considered zero: Either its material is nil
// or its template TemplateNetheriteUpgrade.
func (trim ArmourTrim) Zero() bool {
return trim.Material == nil || trim.Template == TemplateNetheriteUpgrade()
}
// ArmourTrimMaterial is the material of an ArmourTrim, such as an IronIngot,
// that modifies the colour of an ArmourTrim.
type ArmourTrimMaterial interface {
// TrimMaterial returns the material name used for reading and writing trim data.
TrimMaterial() string
// MaterialColour returns the colour code used for internal text formatting.
MaterialColour() string
}
// trimMaterialFromString returns a TrimMaterial from a string.
func trimMaterialFromString(name string) (ArmourTrimMaterial, bool) {
switch name {
case "amethyst":
return AmethystShard{}, true
case "copper":
return CopperIngot{}, true
case "diamond":
return Diamond{}, true
case "emerald":
return Emerald{}, true
case "gold":
return GoldIngot{}, true
case "iron":
return IronIngot{}, true
case "lapis":
return LapisLazuli{}, true
case "netherite":
return NetheriteIngot{}, true
case "quartz":
return NetherQuartz{}, true
case "resin":
return ResinBrick{}, true
case "redstone":
return RedstoneWire{}, true
}
return nil, false
}
// ArmourTrimMaterials returns all the items that can be trim materials.
func ArmourTrimMaterials() []world.Item {
return []world.Item{
AmethystShard{},
CopperIngot{},
Diamond{},
Emerald{},
GoldIngot{},
IronIngot{},
LapisLazuli{},
NetheriteIngot{},
NetherQuartz{},
ResinBrick{},
RedstoneWire{},
}
}
// Trimmable represents an item, generally Armour, that can have an ArmourTrim
// applied to it in a smithing table.
type Trimmable interface {
WithTrim(trim ArmourTrim) world.Item
}