package in.twizmwaz.cardinal.module.modules.portal; import in.twizmwaz.cardinal.match.Match; import in.twizmwaz.cardinal.module.ModuleBuilder; import in.twizmwaz.cardinal.module.ModuleCollection; import in.twizmwaz.cardinal.module.modules.filter.FilterModule; import in.twizmwaz.cardinal.module.modules.filter.FilterModuleBuilder; import in.twizmwaz.cardinal.module.modules.regions.RegionModule; import in.twizmwaz.cardinal.module.modules.regions.RegionModuleBuilder; import in.twizmwaz.cardinal.util.NumUtils; import org.bukkit.util.Vector; import org.jdom2.Element; public class PortalBuilder implements ModuleBuilder { @Override public ModuleCollection load(Match match) { ModuleCollection<Portal> results = new ModuleCollection<>(); for (Element portals : match.getDocument().getRootElement().getChildren("portals")) { for (Element portal : portals.getChildren("portal")) { double x = 0; boolean xRelative = true; if (portal.getAttributeValue("x") != null) { x = NumUtils.parseDouble(portal.getAttributeValue("x").replaceAll("@", "")); xRelative = !portal.getAttributeValue("x").contains("@"); } else if (portals.getAttributeValue("x") != null) { x = NumUtils.parseDouble(portals.getAttributeValue("x").replaceAll("@", "")); xRelative = !portals.getAttributeValue("x").contains("@"); } double y = 0; boolean yRelative = true; if (portal.getAttributeValue("y") != null) { y = NumUtils.parseDouble(portal.getAttributeValue("y").replaceAll("@", "")); yRelative = !portal.getAttributeValue("y").contains("@"); } else if (portals.getAttributeValue("y") != null) { y = NumUtils.parseDouble(portals.getAttributeValue("y").replaceAll("@", "")); yRelative = !portals.getAttributeValue("y").contains("@"); } double z = 0; boolean zRelative = true; if (portal.getAttributeValue("z") != null) { z = NumUtils.parseDouble(portal.getAttributeValue("z").replaceAll("@", "")); zRelative = !portal.getAttributeValue("z").contains("@"); } else if (portals.getAttributeValue("z") != null) { z = NumUtils.parseDouble(portals.getAttributeValue("z").replaceAll("@", "")); zRelative = !portals.getAttributeValue("z").contains("@"); } RegionModule region = null; if (portal.getAttributeValue("region") != null) { region = RegionModuleBuilder.getRegion(portal); } else if (portals.getAttributeValue("region") != null) { region = RegionModuleBuilder.getRegion(portals); } else { for (Element child : portal.getChildren()) { if (!child.getName().equalsIgnoreCase("destination")) { region = RegionModuleBuilder.getRegion(child); } } if (region == null) { region = RegionModuleBuilder.getRegion(portal.getChild("region").getChildren().get(0)); } } FilterModule filter = null; if (portal.getAttributeValue("filter") != null) { filter = FilterModuleBuilder.getFilter(portal.getAttributeValue("filter")); } else if (portals.getAttributeValue("filter") != null) { filter = FilterModuleBuilder.getFilter(portals.getAttributeValue("filter")); } boolean sound = true; if (portal.getAttributeValue("sound") != null) { sound = !portal.getAttributeValue("sound").equalsIgnoreCase("false"); } else if (portals.getAttributeValue("sound") != null) { sound = !portals.getAttributeValue("sound").equalsIgnoreCase("false"); } boolean protect = false; if (portal.getAttributeValue("protect") != null) { protect = portal.getAttributeValue("protect").equalsIgnoreCase("true"); } else if (portals.getAttributeValue("protect") != null) { protect = portals.getAttributeValue("protect").equalsIgnoreCase("true"); } boolean bidirectional = false; if (portal.getAttributeValue("bidirectional") != null) { bidirectional = portal.getAttributeValue("bidirectional").equalsIgnoreCase("true"); } else if (portals.getAttributeValue("bidirectional") != null) { bidirectional = portals.getAttributeValue("bidirectional").equalsIgnoreCase("true"); } int yaw = 0; boolean yawRelative = true; if (portal.getAttributeValue("yaw") != null) { yaw = (int) NumUtils.parseDouble(portal.getAttributeValue("yaw").replaceAll("@", "")); yawRelative = !portal.getAttributeValue("yaw").contains("@"); } else if (portals.getAttributeValue("yaw") != null) { yaw = (int) NumUtils.parseDouble(portals.getAttributeValue("yaw").replaceAll("@", "")); yawRelative = !portals.getAttributeValue("yaw").contains("@"); } int pitch = 0; boolean pitchRelative = true; if (portal.getAttributeValue("pitch") != null) { pitch = (int) NumUtils.parseDouble(portal.getAttributeValue("pitch").replaceAll("@", "")); pitchRelative = !portal.getAttributeValue("pitch").contains("@"); } else if (portals.getAttributeValue("pitch") != null) { pitch = (int) NumUtils.parseDouble(portals.getAttributeValue("pitch").replaceAll("@", "")); pitchRelative = !portals.getAttributeValue("pitch").contains("@"); } RegionModule destination = null; if (portal.getChild("destination") != null) { destination = RegionModuleBuilder.getRegion(portal.getChild("destination").getChildren().get(0)); } results.add(new Portal(new Vector(x, y, z), xRelative, yRelative, zRelative, region, filter, sound, protect, bidirectional, yaw, yawRelative, pitch, pitchRelative, destination)); } } return results; } }