package tc.oc.pgm.core; import javax.inject.Inject; import org.bukkit.Material; 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.PropertyBuilderFactory; public class CoreParser implements FeatureDefinitionParser<CoreFactory> { private final PropertyBuilderFactory<Boolean, ?> booleanParser; private final PropertyBuilderFactory<Integer, ?> intParser; private final FeatureParser<TeamFactory> teamParser; private final RegionParser regionParser; @Inject private CoreParser(PropertyBuilderFactory<Boolean, ?> booleanParser, PropertyBuilderFactory<Integer, ?> intParser, FeatureParser<TeamFactory> teamParser, RegionParser regionParser) { this.booleanParser = booleanParser; this.intParser = intParser; this.teamParser = teamParser; this.regionParser = regionParser; } @Override public CoreFactory parseElement(Element el) throws InvalidXMLException { return new CoreFactoryImpl( el.getAttributeValue("name", "Core"), booleanParser.property(el, "required").optional(null), booleanParser.property(el, "show").optional(true), teamParser.property(el, "owner") .alias("team") .required(), ProximityMetric.parse(el, new ProximityMetric(ProximityMetric.Type.CLOSEST_PLAYER, false)), regionParser.property(el) .legacy() .validate(BlockBoundedValidation.INSTANCE) .union(), XMLUtils.parseBlockMaterialData(Node.fromAttr(el, "material"), Material.OBSIDIAN.getNewData((byte) 0)), intParser.property(el, "leak").optional(5), booleanParser.property(el, "mode-changes").optional(false) ); } }