1package com.fs.starfarer.api.impl.campaign;
4import java.util.HashSet;
7import org.json.JSONObject;
9import com.fs.starfarer.api.Global;
10import com.fs.starfarer.api.PluginPick;
11import com.fs.starfarer.api.campaign.AICoreAdminPlugin;
12import com.fs.starfarer.api.campaign.AICoreOfficerPlugin;
13import com.fs.starfarer.api.campaign.BaseCampaignPlugin;
14import com.fs.starfarer.api.campaign.BattleAPI;
15import com.fs.starfarer.api.campaign.BattleAutoresolverPlugin;
16import com.fs.starfarer.api.campaign.BattleCreationPlugin;
17import com.fs.starfarer.api.campaign.CampaignFleetAPI;
18import com.fs.starfarer.api.campaign.CampaignTerrainAPI;
19import com.fs.starfarer.api.campaign.CampaignTerrainPlugin;
20import com.fs.starfarer.api.campaign.CargoStackAPI;
21import com.fs.starfarer.api.campaign.CustomEntitySpecAPI;
22import com.fs.starfarer.api.campaign.FactionAPI;
23import com.fs.starfarer.api.campaign.FleetInflater;
24import com.fs.starfarer.api.campaign.FleetStubAPI;
25import com.fs.starfarer.api.campaign.FleetStubConverterPlugin;
26import com.fs.starfarer.api.campaign.InteractionDialogPlugin;
27import com.fs.starfarer.api.campaign.JumpPointAPI;
28import com.fs.starfarer.api.campaign.PersonImportance;
29import com.fs.starfarer.api.campaign.PlanetAPI;
30import com.fs.starfarer.api.campaign.RepLevel;
31import com.fs.starfarer.api.campaign.ReputationActionResponsePlugin;
32import com.fs.starfarer.api.campaign.SectorEntityToken;
33import com.fs.starfarer.api.campaign.SubmarketPlugin;
34import com.fs.starfarer.api.campaign.ai.AbilityAIPlugin;
35import com.fs.starfarer.api.campaign.ai.CampaignFleetAIAPI;
36import com.fs.starfarer.api.campaign.ai.CampaignFleetAIAPI.EncounterOption;
37import com.fs.starfarer.api.campaign.ai.ModularFleetAIAPI;
38import com.fs.starfarer.api.campaign.econ.ImmigrationPlugin;
39import com.fs.starfarer.api.campaign.econ.Industry;
40import com.fs.starfarer.api.campaign.econ.MarketAPI;
41import com.fs.starfarer.api.campaign.econ.MarketAPI.SurveyLevel;
42import com.fs.starfarer.api.campaign.econ.MarketConditionAPI;
43import com.fs.starfarer.api.campaign.econ.MonthlyReport;
44import com.fs.starfarer.api.campaign.econ.SubmarketAPI;
45import com.fs.starfarer.api.campaign.rules.MemoryAPI;
46import com.fs.starfarer.api.characters.AbilityPlugin;
47import com.fs.starfarer.api.characters.ImportantPeopleAPI;
48import com.fs.starfarer.api.characters.ImportantPeopleAPI.PersonDataAPI;
49import com.fs.starfarer.api.characters.PersonAPI;
50import com.fs.starfarer.api.combat.ShipAPI.HullSize;
51import com.fs.starfarer.api.fleet.FleetMemberAPI;
52import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActionEnvelope;
53import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActions;
54import com.fs.starfarer.api.impl.campaign.fleets.DefaultFleetInflater;
55import com.fs.starfarer.api.impl.campaign.fleets.DefaultFleetInflaterParams;
56import com.fs.starfarer.api.impl.campaign.ids.Commodities;
57import com.fs.starfarer.api.impl.campaign.ids.Factions;
58import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
59import com.fs.starfarer.api.impl.campaign.ids.Strings;
60import com.fs.starfarer.api.impl.campaign.ids.Tags;
61import com.fs.starfarer.api.impl.campaign.intel.bases.PirateBaseManager;
62import com.fs.starfarer.api.impl.campaign.intel.contacts.ContactIntel;
63import com.fs.starfarer.api.impl.campaign.population.CoreImmigrationPluginImpl;
64import com.fs.starfarer.api.impl.campaign.shared.PlayerTradeDataForSubmarket;
65import com.fs.starfarer.api.impl.campaign.shared.SharedData;
66import com.fs.starfarer.api.impl.campaign.tutorial.CampaignTutorialScript;
67import com.fs.starfarer.api.impl.campaign.tutorial.TutorialMissionIntel;
68import com.fs.starfarer.api.impl.campaign.tutorial.TutorialRespawnDialogPluginImpl;
69import com.fs.starfarer.api.impl.combat.BattleCreationPluginImpl;
70import com.fs.starfarer.api.plugins.AutofitPlugin;
71import com.fs.starfarer.api.plugins.impl.CoreAutofitPlugin;
72import com.fs.starfarer.api.util.Misc;
77 return "coreCampaignPluginImpl";
85 if (interactionTarget.hasTag(Tags.OBJECTIVE) || interactionTarget.getMarket() !=
null) {
89 if (interactionTarget.hasTag(Tags.GATE)) {
93 if (interactionTarget.hasTag(Tags.STATION)) {
97 if (interactionTarget.hasTag(Tags.HAS_INTERACTION_DIALOG)) {
104 if (interactionTarget.getMarket() !=
null) {
108 if (interactionTarget instanceof CampaignFleetAPI) {
111 if (interactionTarget instanceof JumpPointAPI) {
114 if (interactionTarget instanceof PlanetAPI) {
127 if (ability ==
null)
return null;
128 String
id = ability.getId();
129 if (
id ==
null)
return null;
131 if (ability.getSpec().getAIPluginClass() !=
null) {
153 if (opponent instanceof CampaignFleetAPI) {
163 PickPriority.CORE_GENERAL
170 if (action instanceof RepActions || action instanceof RepActionEnvelope) {
173 PickPriority.CORE_GENERAL
181 if (action instanceof RepActions || action instanceof RepActionEnvelope) {
184 PickPriority.CORE_GENERAL
193 for (String tag : entity.getTags()) {
194 memory.set(
"$tag:" + tag,
true, 0);
197 memory.set(
"$abyssalDepth", Misc.getAbyssalDepth(entity), 0);
199 String onOrAt =
"on";
200 if (entity.hasTag(Tags.STATION)) {
203 memory.set(
"$onOrAt", onOrAt, 0);
205 if (entity.getStarSystem() !=
null &&
206 entity.getStarSystem().hasTag(Tags.SYSTEM_CUT_OFF_FROM_HYPER)) {
207 memory.set(
"$systemCutOffFromHyper",
true, 0);
210 if (entity.getContainingLocation() !=
null) {
211 memory.set(
"$locationId", entity.getContainingLocation().getId(), 0f);
216 memory.set(
"$id", entity.getId(), 0);
218 memory.set(
"$transponderOn", entity.isTransponderOn(), 0);
224 memory.set(
"$name", entity.getName(), 0);
225 memory.set(
"$fullName", entity.getFullName(), 0);
227 memory.set(
"$inHyperspace", entity.isInHyperspace(), 0);
230 if (entity.getCustomEntityType() !=
null) {
231 memory.set(
"$customType", entity.getCustomEntityType(), 0);
233 if (entity.getCustomEntitySpec() !=
null) {
234 CustomEntitySpecAPI spec = entity.getCustomEntitySpec();
235 memory.set(
"$nameInText", spec.getNameInText(), 0);
236 memory.set(
"$shortName", spec.getShortName(), 0);
237 memory.set(
"$isOrAre", spec.getIsOrAre(), 0);
238 memory.set(
"$aOrAn", spec.getAOrAn(), 0);
242 if (entity instanceof CampaignTerrainAPI) {
243 CampaignTerrainAPI terrain = (CampaignTerrainAPI) entity;
244 CampaignTerrainPlugin plugin = terrain.getPlugin();
245 memory.set(
"$terrainId", plugin.getSpec().getId(), 0);
249 if (entity instanceof CampaignFleetAPI) {
250 CampaignFleetAPI fleet = (CampaignFleetAPI) entity;
251 if (fleet.getAI() instanceof CampaignFleetAIAPI) {
252 CampaignFleetAIAPI ai = (CampaignFleetAIAPI) fleet.getAI();
253 EncounterOption option = ai.pickEncounterOption(
null, playerFleet,
true);
254 BattleAPI b = fleet.getBattle();
255 if (b !=
null && b.isPlayerInvolved()) {
257 option = b.getCombinedFor(fleet).getAI().pickEncounterOption(
null, b.getCombinedFor(
Global.
getSector().getPlayerFleet()),
true);
262 memory.set(
"$relativeStrength", -1, 0);
265 memory.set(
"$relativeStrength", 1, 0);
268 memory.set(
"$relativeStrength", 0, 0);
270 case HOLD_VS_STRONGER:
271 memory.set(
"$weakerThanPlayerButHolding",
true, 0);
272 memory.set(
"$relativeStrength", -1, 0);
276 memory.set(
"$isHostile", ai.isHostileTo(playerFleet), 0);
278 memory.set(
"$fleetPoints", fleet.getFleetPoints(), 0);
281 memory.set(
"$isStation", fleet.isStationMode(), 0);
283 memory.set(
"$supplies", fleet.getCargo().getSupplies(), 0);
284 memory.set(
"$fuel", fleet.getCargo().getFuel(), 0);
286 memory.set(
"$knowsWhoPlayerIs", fleet.knowsWhoPlayerIs(), 0);
288 if (!playerFleet.isTransponderOn() && !memory.contains(MemFlags.MEMORY_KEY_SAW_PLAYER_WITH_TRANSPONDER_OFF)) {
289 memory.set(MemFlags.MEMORY_KEY_SAW_PLAYER_WITH_TRANSPONDER_OFF,
true, 0);
292 if (!Misc.isPermaKnowsWhoPlayerIs(fleet) && playerFleet.isTransponderOn()) {
293 memory.set(MemFlags.MEMORY_KEY_SAW_PLAYER_WITH_TRANSPONDER_ON,
true, 7f + (
float) Math.random() * 7f);
297 if (entity.getFaction() !=
null && !memory.contains(
"$isHostile")) {
298 float rel = entity.getFaction().getRelationship(Factions.PLAYER);
299 RepLevel level = RepLevel.getLevelFor(rel);
300 if (level.isAtWorst(RepLevel.INHOSPITABLE)) {
301 memory.set(
"$isHostile",
false, 0);
303 memory.set(
"$isHostile",
true, 0);
308 MarketAPI market = entity.getMarket();
309 if (market !=
null) {
313 if (!market.isPlanetConditionMarketOnly()) {
314 memory.set(
"$hasMarket",
true, 0);
317 if (Misc.getStationFleet(market) !=
null) {
318 memory.set(
"$hasStation",
true, 0);
321 memory.set(
"$marketSize", market.getSize(), 0);
322 memory.set(
"$stability", (
int) market.getStabilityValue(), 0);
325 if (entity instanceof PlanetAPI) {
326 PlanetAPI planet = (PlanetAPI) entity;
327 memory.set(
"$planetType", planet.getTypeId(), 0);
332 if (market !=
null) {
333 for (String tag : market.getTags()) {
334 memory.set(
"$tag:" + tag,
true, 0);
336 for (MarketConditionAPI mc : market.getConditions()) {
337 memory.set(
"$mc:" + mc.getId(),
true, 0);
339 for (Industry ind : market.getIndustries()) {
340 memory.set(
"$ind:" + ind.getId(),
true, 0);
343 memory.set(
"$id", market.getId(), 0);
344 memory.set(
"$size", market.getSize(), 0);
345 memory.set(
"$stability", (
int) market.getStabilityValue(), 0);
347 memory.set(
"$isSurveyed", market.getSurveyLevel() == SurveyLevel.FULL, 0);
348 memory.set(
"$surveyLevel", market.getSurveyLevel().name(), 0);
349 memory.set(
"$isPlanetConditionMarketOnly", market.isPlanetConditionMarketOnly(), 0);
351 memory.set(
"$isHidden", market.isHidden(), 0);
353 memory.set(
"$isPlayerOwned", market.isPlayerOwned(), 0);
355 boolean hasRuins =
false;
356 if (Misc.hasRuins(market)) {
357 memory.set(
"$hasRuins",
true, 0);
363 memory.set(
"$hasUnexploredRuins", Misc.hasUnexploredRuins(market), 0);
367 memory.set(MemFlags.MEMORY_MARKET_SMUGGLING_SUSPICION_LEVEL, suspicionLevel, 0);
385 float smugglingTotal = 0f;
386 float tradeTotal = 0f;
387 for (SubmarketAPI submarket : market.getSubmarketsCopy()) {
388 SubmarketPlugin plugin = submarket.getPlugin();
389 if (!plugin.isParticipatesInEconomy())
continue;
391 PlayerTradeDataForSubmarket tradeData = SharedData.getData().getPlayerActivityTracker().getPlayerTradeData(submarket);
392 if (submarket.getFaction().isHostileTo(market.getFaction()) || submarket.getPlugin().isBlackMarket()) {
393 smugglingTotal += tradeData.getTotalPlayerTradeValue();
395 tradeTotal += tradeData.getTotalPlayerTradeValue();
399 float suspicionLevel = 0f;
401 if (smugglingTotal + tradeTotal > 0) {
402 suspicionLevel = smugglingTotal / (smugglingTotal + tradeTotal);
406 float threshold = 10000f * market.getSize();
407 suspicionLevel *= Math.min(1f, (smugglingTotal + tradeTotal) / threshold);
410 float extra = market.getMemoryWithoutUpdate().getFloat(MemFlags.MARKET_EXTRA_SUSPICION);
411 suspicionLevel += extra;
412 suspicionLevel = Math.min(1f, suspicionLevel);
414 return suspicionLevel;
418 memory.set(
"$id", person.getId(), 0);
420 for (String tag : person.getTags()) {
421 memory.set(
"$tag:" + tag,
true, 0);
425 float rel = person.getRelToPlayer().getRel();
426 memory.set(
"$relValue", rel, 0);
427 memory.set(
"$rel", rel, 0);
428 memory.set(
"$relName", person.getRelToPlayer().getLevel().name(), 0);
430 if (Misc.isMercenary(person)) {
435 memory.set(
"$isPerson",
true, 0);
436 memory.set(
"$name", person.getName().getFullName(), 0);
437 memory.set(
"$personName", person.getName().getFullName(), 0);
438 memory.set(
"$isContact", ContactIntel.playerHasContact(person,
false), 0);
440 memory.set(
"$rankId", person.getRankId(), 0);
441 memory.set(
"$postId", person.getPostId(), 0);
443 if (person.isAICore()) {
444 memory.set(
"$aiCoreId", person.getAICoreId(), 0);
445 memory.set(
"$isAICore",
true, 0);
448 memory.set(
"$rankAOrAn", person.getRankArticle(), 0);
449 memory.set(
"$postAOrAn", person.getPostArticle(), 0);
451 if (person.getRank() !=
null) {
452 memory.set(
"$rank", person.getRank().toLowerCase(), 0);
453 memory.set(
"$Rank", Misc.ucFirst(person.getRank()), 0);
455 if (person.getPost() !=
null) {
456 memory.set(
"$post", person.getPost().toLowerCase(), 0);
457 memory.set(
"$Post", Misc.ucFirst(person.getPost()), 0);
459 memory.set(
"$importance", person.getImportance().name(), 0);
460 memory.set(
"$importanceAtLeastHigh", person.getImportance().ordinal() >= PersonImportance.HIGH.ordinal(), 0);
461 memory.set(
"$importanceAtMostLow", person.getImportance().ordinal() <= PersonImportance.LOW.ordinal(), 0);
463 memory.set(
"$level", person.getStats().getLevel(), 0);
465 memory.set(
"$personality", person.getPersonalityAPI().getId(), 0);
468 PersonDataAPI data = ip.getData(person);
470 if (data.getLocation().getMarket() !=
null) {
471 MarketAPI market = data.getLocation().getMarket();
472 memory.set(
"$hostileToMarket", person.getFaction().isHostileTo(market.getFaction()), 0);
479 memory.set(
"$id", faction.getId(), 0);
481 float rel = faction.getRelationship(Factions.PLAYER);
482 RepLevel level = RepLevel.getLevelFor(rel);
483 if (level.isAtWorst(RepLevel.FAVORABLE)) {
484 memory.set(
"$friendlyToPlayer",
true, 0);
485 }
else if (level.isAtBest(RepLevel.HOSTILE)) {
486 memory.set(
"$hostileToPlayer",
true, 0);
488 memory.set(
"$neutralToPlayer",
true, 0);
491 if (level.isAtWorst(RepLevel.INHOSPITABLE)) {
492 memory.set(
"$isHostile",
false, 0);
494 memory.set(
"$isHostile",
true, 0);
497 if (JSONObject.getNames(faction.getCustom()) !=
null) {
498 for (String key : JSONObject.getNames(faction.getCustom())) {
499 String val = faction.getCustom().optString(key);
500 memory.set(
"$c:" + key, val, 0);
503 Color c = faction.getColor();
504 memory.set(
"$color", c.getRed() +
"," + c.getGreen() +
"," + c.getBlue() +
"," + c.getAlpha(), 0);
506 c = faction.getBaseUIColor();
507 memory.set(
"$baseColor", c.getRed() +
"," + c.getGreen() +
"," + c.getBlue() +
"," + c.getAlpha(), 0);
509 c = faction.getBrightUIColor();
510 memory.set(
"$brightColor", c.getRed() +
"," + c.getGreen() +
"," + c.getBlue() +
"," + c.getAlpha(), 0);
512 c = faction.getDarkUIColor();
513 memory.set(
"$darkColor", c.getRed() +
"," + c.getGreen() +
"," + c.getBlue() +
"," + c.getAlpha(), 0);
515 c = faction.getGridUIColor();
516 memory.set(
"$gridColor", c.getRed() +
"," + c.getGreen() +
"," + c.getBlue() +
"," + c.getAlpha(), 0);
519 memory.set(
"$isNeutralFaction", faction.isNeutralFaction(), 0);
521 memory.set(
"$relValue", rel, 0);
522 memory.set(
"$rel", level.name(), 0);
523 memory.set(
"$relName", level.name(), 0);
530 memory.set(
"$isDevMode",
true, 0);
532 if (TutorialMissionIntel.isTutorialInProgress()) {
533 memory.set(
"$isInTutorial",
true, 0);
540 memory.set(
"$daysSinceStart", PirateBaseManager.getInstance().getUnadjustedDaysSinceStart(), 0);
548 memory.set(
"$abyssalDepth", Misc.getAbyssalDepth(fleet), 0);
552 memory.set(
"$firstName", person.getName().getFirst(), 0);
553 memory.set(
"$lastName", person.getName().getLast(), 0);
554 memory.set(
"$name", person.getName().getFullName(), 0);
556 memory.set(
"$factionName",
Global.
getSector().getFaction(Factions.PLAYER).getDisplayNameOverride(), 0);
557 memory.set(
"$theFactionName",
Global.
getSector().getFaction(Factions.PLAYER).getDisplayNameWithArticleOverride(), 0);
560 if (Misc.getCommissionFactionId() !=
null) {
561 memory.set(
"$commissionFactionId", Misc.getCommissionFactionId(), 0);
565 if (fleet.getContainingLocation() !=
null) {
566 memory.set(
"$locationId", fleet.getContainingLocation().getId(), 0);
568 for (String tag : fleet.getContainingLocation().getTags()) {
569 memory.set(
"$locTag:" + tag,
true, 0);
576 memory.set(
"$fleetId", fleet.getId(), 0);
578 memory.set(
"$transponderOn", fleet.isTransponderOn(), 0);
580 memory.set(
"$supplies", (
int)fleet.getCargo().getSupplies(), 0);
581 memory.set(
"$fuel", (
int)fleet.getCargo().getFuel(), 0);
582 memory.set(
"$machinery", (
int)fleet.getCargo().getCommodityQuantity(Commodities.HEAVY_MACHINERY), 0);
585 memory.set(
"$marines", (
int)fleet.getCargo().getMarines(), 0);
587 memory.set(
"$crew", (
int)fleet.getCargo().getCrew(), 0);
589 memory.set(
"$crewRoom", (
int)(fleet.getCargo().getMaxPersonnel() - fleet.getCargo().getTotalPersonnel()), 0);
590 memory.set(
"$fuelRoom", (
int)fleet.getCargo().getMaxFuel() - (int)fleet.getCargo().getFuel(), 0);
591 memory.set(
"$cargoRoom", (
int)fleet.getCargo().getMaxCapacity() - (int)fleet.getCargo().getSpaceUsed(), 0);
593 memory.set(
"$crewRoomStr", Misc.getWithDGS((
int)(fleet.getCargo().getMaxPersonnel() - fleet.getCargo().getTotalPersonnel())), 0);
594 memory.set(
"$fuelRoomStr", Misc.getWithDGS((
int)fleet.getCargo().getMaxFuel() - (int)fleet.getCargo().getFuel()), 0);
595 memory.set(
"$cargoRoomStr", Misc.getWithDGS((
int)fleet.getCargo().getMaxCapacity() - (int)fleet.getCargo().getSpaceUsed()), 0);
597 memory.set(
"$credits", (
int)fleet.getCargo().getCredits().get(), 0);
598 memory.set(
"$creditsStr", Misc.getWithDGS((
int)fleet.getCargo().getCredits().get()), 0);
599 memory.set(
"$creditsStrC", Misc.getWithDGS((
int)fleet.getCargo().getCredits().get()) + Strings.C, 0);
604 Set<String> seen =
new HashSet<String>();
605 for (CargoStackAPI stack : fleet.getCargo().getStacksCopy()) {
606 String
id = stack.getCommodityId();
607 if (
id ==
null)
continue;
608 if (seen.contains(
id))
continue;
611 int quantity = (int) fleet.getCargo().getCommodityQuantity(
id);
612 String key =
"$" + id;
614 if (!memory.contains(key)) {
615 memory.set(key, quantity, 0);
620 MonthlyReport report = SharedData.getData().getPreviousReport();
621 boolean debt = report.getDebt() > 0;
622 boolean longDebt = report.getDebt() > 0 && report.getPreviousDebt() > 0;
623 memory.set(
"$inDebt", debt, 0);
624 memory.set(
"$inLongDebt", longDebt, 0);
626 int fleetSizeCount = fleet.getFleetSizeCount();
628 int maxCombatSize = 0;
629 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
630 HullSize size = member.getHullSpec().getHullSize();
651 if (val > maxCombatSize && !member.isCivilian()) {
656 memory.set(
"$maxHullSize", maxSize, 0);
657 memory.set(
"$maxCombatHullSize", maxCombatSize, 0);
659 memory.set(
"$fleetSizeCount", fleetSizeCount, 0);
660 memory.set(
"$numShips", fleet.getFleetData().getMembersListCopy().size(), 0);
661 memory.set(
"$fleetPoints", fleet.getFleetPoints(), 0);
663 memory.set(
"$numColonies", Misc.getPlayerMarkets(
true).size(), 0);
665 if (fleet.getFlagship() !=
null) {
666 memory.set(
"$flagshipName", fleet.getFlagship().getShipName(), 0);
669 for (String
id : fleet.getAbilities().keySet()) {
670 memory.set(
"$ability:" +
id,
true, 0);
689 PersonAPI commander =
null;
690 if (member !=
null) {
691 commander = member.getFleetCommanderForStats();
692 if (commander ==
null) commander = member.getFleetCommander();
700 if (
Global.
getSector().getMemoryWithoutUpdate().getBoolean(CampaignTutorialScript.USE_TUTORIAL_RESPAWN)) {
714 if (Commodities.ALPHA_CORE.equals(commodityId)) {
721 if (Commodities.OMEGA_CORE.equals(commodityId) ||
722 Commodities.ALPHA_CORE.equals(commodityId) ||
723 Commodities.BETA_CORE.equals(commodityId) ||
724 Commodities.GAMMA_CORE.equals(commodityId)) {
731 if (params instanceof DefaultFleetInflaterParams) {
732 DefaultFleetInflaterParams p = (DefaultFleetInflaterParams) params;
static SettingsAPI getSettings()
static SectorAPI getSector()
void updateEntityFacts(SectorEntityToken entity, MemoryAPI memory)
PluginPick< AutofitPlugin > pickAutofitPlugin(FleetMemberAPI member)
void updateGlobalFacts(MemoryAPI memory)
PluginPick< InteractionDialogPlugin > pickInteractionDialogPlugin(SectorEntityToken interactionTarget)
PluginPick< FleetStubConverterPlugin > pickStubConverter(CampaignFleetAPI fleet)
void updatePlayerFacts(MemoryAPI memory)
PluginPick< ReputationActionResponsePlugin > pickReputationActionResponsePlugin(Object action, PersonAPI person)
void updatePersonFacts(PersonAPI person, MemoryAPI memory)
PluginPick< FleetStubConverterPlugin > pickStubConverter(FleetStubAPI stub)
PluginPick< BattleCreationPlugin > pickBattleCreationPlugin(SectorEntityToken opponent)
PluginPick< ReputationActionResponsePlugin > pickReputationActionResponsePlugin(Object action, String factionId)
PluginPick< ImmigrationPlugin > pickImmigrationPlugin(MarketAPI market)
void updateFactionFacts(FactionAPI faction, MemoryAPI memory)
PluginPick< AICoreOfficerPlugin > pickAICoreOfficerPlugin(String commodityId)
void updateMarketFacts(MarketAPI market, MemoryAPI memory)
PluginPick< InteractionDialogPlugin > pickInteractionDialogPlugin(Object param, SectorEntityToken interactionTarget)
PluginPick< FleetInflater > pickFleetInflater(CampaignFleetAPI fleet, Object params)
static final float computeSmugglingSuspicionLevel(MarketAPI market)
PluginPick< BattleAutoresolverPlugin > pickBattleAutoresolverPlugin(BattleAPI battle)
PluginPick< InteractionDialogPlugin > pickRespawnPlugin()
PluginPick< AbilityAIPlugin > pickAbilityAI(AbilityPlugin ability, ModularFleetAIAPI ai)
PluginPick< AICoreAdminPlugin > pickAICoreAdminPlugin(String commodityId)
static boolean canUseGates()
static String PLAYER_CAN_USE_GATES
float getFloat(String key)