@Subscribe public void handleShipBreaksBlockade(ShipNearingPortEvent event) { ICity city = event.getCity(); for (Entry<ICity, IBlockade> entry : blockadeState.entrySet()) { if (entry.getKey().equals(city)) { IConvoy blocadingConvoy = entry.getValue().getBlockadeConvoy(); INavigableVessel blockadeBreaker = event.getShip(); BlockadeSeafightContext context = new BlockadeSeafightContext(entry.getValue()); IPlayer owner = (IPlayer) blockadeBreaker.getOwner(); owner.updateCrimialDrive(1); seafightService.calculateOutcome(blocadingConvoy, blockadeBreaker, context); entry.getValue().getShipsToAuction().addAll(context.getCapturedShips()); } } } @Subscribe
@Subscribe public void handleShipNearingPort(ShipNearingPortEvent event) { ICity city = event.getCity(); INavigableVessel ship = event.getShip(); if (ship.getPirateFlag()) { Optional<ICityHall> optCityHall = cityHalls.findCityHall(city); if (optCityHall.isPresent()) { Optional<IOutriggerContract> optContract = optCityHall.get().getOutriggerContract(); //noinspection OptionalIsPresent if (optContract.isPresent()) { IShip outrigger = optContract.get().getOutrigger(); SeaFightContext context = new SeaFightContext(ESeaFightType.OUTRIGGER); IPlayer owner = (IPlayer) ship.getOwner(); owner.updateCrimialDrive(1); seaFightService.calculateOutcome(outrigger, ship, context); } } else { logger.warn("No CityHall found for city "+city.getName()); } } }
seaFightService.calculateOutcome(vessel, visibleVessel, new SeaFightContext(ESeaFightType.STANDARD)); if (vissibleOwner instanceof IPlayer) {