package tc.oc.pgm.destroyable; import javax.inject.Inject; import org.jdom2.Element; import tc.oc.pgm.features.FeatureDefinitionParser; import tc.oc.pgm.features.FeatureParser; import tc.oc.pgm.goals.ProximityMetric; import tc.oc.pgm.regions.BlockBoundedValidation; import tc.oc.pgm.regions.RegionParser; import tc.oc.pgm.teams.TeamFactory; import tc.oc.pgm.utils.XMLUtils; import tc.oc.pgm.xml.InvalidXMLException; import tc.oc.pgm.xml.Node; import tc.oc.pgm.xml.property.PercentagePropertyFactory; import tc.oc.pgm.xml.property.PropertyBuilderFactory; public class DestroyableParser implements FeatureDefinitionParser<DestroyableFactory> { private final PropertyBuilderFactory<Boolean, ?> booleanParser; private final PercentagePropertyFactory percentages; private final FeatureParser<TeamFactory> teamParser; private final RegionParser regionParser; @Inject private DestroyableParser(PropertyBuilderFactory<Boolean, ?> booleanParser, FeatureParser<TeamFactory> teamParser, RegionParser regionParser, PercentagePropertyFactory percentages) { this.booleanParser = booleanParser; this.teamParser = teamParser; this.regionParser = regionParser; this.percentages = percentages; } @Override public DestroyableFactory parseElement(Element el) throws InvalidXMLException { return new DestroyableFactoryImpl( XMLUtils.getRequiredAttribute(el, "name").getValue(), booleanParser.property(el, "required").optional(null), booleanParser.property(el, "show").optional(true), teamParser.property(el, "owner").required(), ProximityMetric.parse(el, new ProximityMetric(ProximityMetric.Type.CLOSEST_PLAYER, false)), regionParser.property(el) .legacy() .validate(BlockBoundedValidation.INSTANCE) .union(), XMLUtils.parseMaterialPatternSet(Node.fromRequiredAttr(el, "material", "materials")), percentages.property(el, "completion").optional(1D), booleanParser.property(el, "mode-changes").optional(false), booleanParser.property(el, "show-progress").optional(false), booleanParser.property(el, "sparks").optional(false), booleanParser.property(el, "repairable").optional(false) ); } }