package tc.oc.pgm.wool; import javax.inject.Inject; import org.bukkit.DyeColor; import org.bukkit.util.ImVector; import org.bukkit.util.Vector; import org.jdom2.Element; import tc.oc.api.docs.SemanticVersion; import tc.oc.pgm.features.FeatureDefinitionParser; import tc.oc.pgm.features.FeatureParser; import tc.oc.pgm.goals.ProximityMetric; import tc.oc.pgm.map.MapProto; import tc.oc.pgm.map.ProtoVersions; import tc.oc.pgm.regions.RegionParser; import tc.oc.pgm.teams.TeamFactory; import tc.oc.pgm.xml.InvalidXMLException; import tc.oc.pgm.xml.property.PropertyBuilderFactory; public class WoolParser implements FeatureDefinitionParser<MonumentWoolFactory> { @Inject private @MapProto SemanticVersion proto; @Inject private FeatureParser<TeamFactory> teamParser; @Inject private RegionParser regionParser; @Inject private PropertyBuilderFactory<Boolean, ?> booleans; @Inject private PropertyBuilderFactory<ImVector, ?> vectors; @Inject private PropertyBuilderFactory<DyeColor, ?> dyeColors; @Inject private WoolParser() {} @Override public MonumentWoolFactory parseElement(Element el) throws InvalidXMLException { // The default location is at infinity, so players/blocks are always an infinite distance from it final Vector location = proto.isOlderThan(ProtoVersions.WOOL_LOCATIONS) ? new Vector(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY) : vectors.property(el, "location").required(); return new MonumentWoolFactoryImpl( booleans.property(el, "required").optional(null), booleans.property(el, "show").optional(true), teamParser.property(el, "owner") .alias("team") .required(), ProximityMetric.parse(el, "wool", new ProximityMetric(ProximityMetric.Type.CLOSEST_KILL, false)), ProximityMetric.parse(el, "monument", new ProximityMetric(ProximityMetric.Type.CLOSEST_BLOCK, false)), dyeColors.property(el, "color").required(), location, regionParser.property(el, "monument") .legacy() .union(), booleans.property(el, "craftable").optional(true) ); } }