/** * Recieve the event from the event bus and delegate it. * @param event shipyard order build */ @Subscribe public void handleOrderBuildEvent(ShipyardOrderBuild event) { orderShipBuilding(event.getShipyard(), event.getShipType(), event.getOwner()); }
@Override protected EventHandler<MouseEvent> getAction() { return mouseEvent -> { try { ICity city = getCity(); Optional<ITradingOffice> office = getPlayer().findTradingOffice(getCity()); Preconditions.checkArgument(office.isPresent(), "Trading office must be present"); for (EWare ware : MATERIALS) { int buyAmount = requirementsMap.get(ware).getBuyAmount().intValue(); city.move(ware, -buyAmount, getPlayer()); int needed = requirementsMap.get(ware).requiredProperty().get(); int fromWarhouse = needed - buyAmount; office.get().move(ware, -fromWarhouse, 0); } ShipyardOrderBuild event = new ShipyardOrderBuild(city.getCityState().getShipyardState(), getCurrentShipType(), getPlayer()); clientServerEventBus.post(event); getPlayer().getCompany().updateCash(-calculateTotalBuildCosts()); executeOnCloseButtonClicked(); } catch (RuntimeException e) { logger.error("Failed to order ship construction", e); } }; }
/** * Handle the reinitialisation after finishing a special mission. * @param event special mission is finished */ @Subscribe public void handleSpecialMissionFinished(SpecialMissionFinishedEvent event) { INavigableVessel vessel = event.getVessel(); IAIPlayer player = (IAIPlayer) vessel.getOwner(); ICity city = event.getCity(); logger.debug("Special mission for ship {} of {} {} ended in {}",vessel.getName(), player.getName(), player.getLastName(), city.getName()); ITradeMissionData missionData = event.getMissionData(); if (missionData instanceof CollectConstructionWaresMissionData) { IShipyard shipyard = city.getCityState().getShipyardState(); ShipyardOrderBuild shipConstructionOrder = new ShipyardOrderBuild(shipyard, ((CollectConstructionWaresMissionData) missionData).getShipType(), player); shipyardEngine.handleOrderBuildEvent(shipConstructionOrder); } initializeRandomTradeStrategy(vessel, player); initializeStrategyForVessel(player, vessel); // Execute IAITradeStrategy tradeStrategy = player.getTradeStrategyType(vessel).getStrategy(); tradeStrategy.executeTradeSteps(player, vessel); }