/** * Attempts to fulfill Contract by removing Crop Resources. Fails if not e * * @param contract */ private void fulfilContract(Contract contract) { World world = WorldManager.getInstance().getWorld(); contract.decrementRepeatCount(); if (contract.getRepeatCount() > 0) { // attempt to remove inventory if (world.getStorageManager().getCrops().getQuantity(contract.getResourceType()) < contract.getAmount()) { // failed to supply crops - penalize and break contract. LOGGER.info("Contract Failed"); notifyUser("Contract Failed"); world.getMoneyHandler().subtractAmount(contract.getPenalty()); removeContract(contract); } else { // maybe give small payment? LOGGER.info("contract delivered"); notifyUser("Contract Delivered"); world.getMoneyHandler().addAmount(150); world .getStorageManager() .getCrops() .takeItem(contract.getResourceType(), contract.getAmount()); } } else { // the contract has been completed // add the reward to bank and remove contract. LOGGER.info("contract completed"); notifyUser("Contract Completed"); world.getMoneyHandler().addAmount(contract.getReward()); currentContracts.remove(contract); } }
/** * Get the date of delivery of one contract. * * @return the integer of date of delivery * @param contract: the contract that need to get delivery date. */ public int getDeliveryDate(Contract contract) { World world = WorldManager.getInstance().getWorld(); int currentDay = world.getTimeManager().getDays(); int startDay = currentContracts.get(contract); int interval = contract.getInterval(); return (startDay + interval) - currentDay; }