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 }