Class IndianDemandMission

  • All Implemented Interfaces:
    java.lang.Comparable<FreeColObject>, ObjectWithId

    public final class IndianDemandMission
    extends Mission
    Mission for demanding goods from a specified player.
    • Field Detail

      • logger

        private static final java.util.logging.Logger logger
      • GOODS_DEMAND_MIN

        private static final int GOODS_DEMAND_MIN
        The minimum amount of goods to demand.
        See Also:
        Constant Field Values
      • tag

        private static final java.lang.String tag
        The tag for this mission.
        See Also:
        Constant Field Values
      • selectPredicates

        private static final java.util.List<java.util.function.Predicate<GoodsType>> selectPredicates
        Predicates for demand goods selection.
      • colony

        private Colony colony
        The colony to demand from.
      • demanded

        private boolean demanded
        Whether the demand has been made or not.
      • succeeded

        private boolean succeeded
        Whether the demand succeeded.
    • Constructor Detail

      • IndianDemandMission

        public IndianDemandMission​(AIMain aiMain,
                                   AIUnit aiUnit,
                                   Colony target)
        Creates a mission for the given AIUnit.
        Parameters:
        aiMain - The main AI-object.
        aiUnit - The AIUnit this mission is created for.
        target - The Colony receiving the gift.
      • IndianDemandMission

        public IndianDemandMission​(AIMain aiMain,
                                   AIUnit aiUnit,
                                   FreeColXMLReader xr)
                            throws javax.xml.stream.XMLStreamException
        Creates a new IndianDemandMission from a reader.
        Parameters:
        aiMain - The main AI-object.
        aiUnit - The AIUnit this mission is created for.
        xr - The input stream containing the XML.
        Throws:
        javax.xml.stream.XMLStreamException - if a problem was encountered during parsing.
        See Also:
        FreeColObject.readFromXML(net.sf.freecol.common.io.FreeColXMLReader)
    • Method Detail

      • hasTribute

        private boolean hasTribute()
        Checks if the unit is carrying a tribute (goods).
        Returns:
        True if the unit is carrying goods.
      • hasMissionTribute

        private static boolean hasMissionTribute​(AIUnit aiUnit)
        Checks if a unit is carrying a tribute.
        Parameters:
        aiUnit - The AIUnit to check.
        Returns:
        True if the unit is carrying goods.
      • setSucceeded

        public void setSucceeded​(boolean result)
        Set the result of the demand.
        Parameters:
        result - The result of making the demand.
      • selectGoods

        private Goods selectGoods​(Colony target)
        Selects the most desirable goods from the colony.
        Parameters:
        target - The target Colony.
        Returns:
        The goods to demand.
      • capAmount

        private int capAmount​(int amount,
                              int difficulty)
      • invalidUnitReason

        private static java.lang.String invalidUnitReason​(AIUnit aiUnit)
        Why would this mission be invalid with the given unit?
        Parameters:
        aiUnit - The AIUnit to test.
        Returns:
        A reason why the mission would be invalid with the unit, or null if none found.
      • invalidColonyReason

        private static java.lang.String invalidColonyReason​(AIUnit aiUnit,
                                                            Colony colony)
        Why would an IndianDemandMission be invalid with the given unit and colony.
        Parameters:
        aiUnit - The AIUnit to test.
        colony - The Colony to test.
        Returns:
        A reason why the mission would be invalid with the unit and colony or null if none found.
      • invalidMissionReason

        public static java.lang.String invalidMissionReason​(AIUnit aiUnit)
        Why would this mission be invalid with the given AI unit?
        Parameters:
        aiUnit - The AIUnit to check.
        Returns:
        A reason for invalidity, or null if none found.
      • invalidMissionReason

        public static java.lang.String invalidMissionReason​(AIUnit aiUnit,
                                                            Location loc)
        Why would this mission be invalid with the given AI unit and location?
        Parameters:
        aiUnit - The AIUnit to check.
        loc - The Location to check.
        Returns:
        A reason for invalidity, or null if none found.
      • getTransportDestination

        public Location getTransportDestination()
        Gets the destination of a required transport. Override this in the child mission classes if there is a useful intermediate point to deliver the unit distinct from the target.
        Overrides:
        getTransportDestination in class Mission
        Returns:
        The mission target, or null if the mission is invalid, otherwise lacks a target (e.g. UnitWanderHostile), or the unit does not need transport.
      • getTarget

        public Location getTarget()
        Gets the target of this mission, if any.
        Specified by:
        getTarget in class Mission
        Returns:
        The target of this mission, or null if none.
      • setTarget

        public void setTarget​(Location target)
        Sets the target of this mission, if any. The actual target is handled in the missions that really have them, this is a helper to make sure the unit is updated.
        Specified by:
        setTarget in class Mission
        Parameters:
        target - The new target of this mission, or null if none.
      • findTarget

        public Location findTarget()
        Finds a new target for this mission.
        Specified by:
        findTarget in class Mission
        Returns:
        A new target for this mission.
      • invalidReason

        public java.lang.String invalidReason()
        Why is this mission invalid? Mission subclasses must implement this routine, which probably should start by checking invalidAIUnitReason. A mission can be invalid for a number of subclass-specific reasons. For example: a seek-and-destroy mission could be invalid because of a improved stance towards the targeted player.
        Specified by:
        invalidReason in class Mission
        Returns:
        A reason for mission invalidity, or null if none found.
      • doMission

        public Mission doMission​(LogBuilder lb)
        Performs the mission.
        Specified by:
        doMission in class Mission
        Parameters:
        lb - A LogBuilder to log to.
        Returns:
        The Mission to continue with, or null if the current mission has completed.
      • writeAttributes

        protected void writeAttributes​(FreeColXMLWriter xw)
                                throws javax.xml.stream.XMLStreamException
        Write the attributes of this object to a stream. To be overridden if required by any object that has attributes and uses the toXML(FreeColXMLWriter, String) call.
        Overrides:
        writeAttributes in class Mission
        Parameters:
        xw - The FreeColXMLWriter to write to.
        Throws:
        javax.xml.stream.XMLStreamException - if there are any problems writing to the stream.
      • readAttributes

        protected void readAttributes​(FreeColXMLReader xr)
                               throws javax.xml.stream.XMLStreamException
        Reads the attributes of this object from an XML stream.
        Overrides:
        readAttributes in class Mission
        Parameters:
        xr - The FreeColXMLReader to read from.
        Throws:
        javax.xml.stream.XMLStreamException - if there is a problem reading the stream.
      • getXMLTagName

        public java.lang.String getXMLTagName()
        Get the serialization tag for this object.
        Specified by:
        getXMLTagName in class FreeColObject
        Returns:
        The tag.