1package com.fs.starfarer.api.impl.campaign;
3import java.util.ArrayList;
6import com.fs.starfarer.api.GameState;
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.campaign.CampaignFleetAPI;
9import com.fs.starfarer.api.campaign.CargoAPI;
10import com.fs.starfarer.api.campaign.CargoStackAPI;
11import com.fs.starfarer.api.campaign.econ.MarketAPI;
12import com.fs.starfarer.api.campaign.listeners.RefitScreenListener;
13import com.fs.starfarer.api.combat.ShipVariantAPI;
14import com.fs.starfarer.api.fleet.FleetMemberAPI;
15import com.fs.starfarer.api.loading.HullModSpecAPI;
16import com.fs.starfarer.api.util.ListMap;
17import com.fs.starfarer.api.util.Misc;
21 public static class HullModInstallData {
26 public static class HullModDiff {
27 public List<String> needItems =
new ArrayList<>();
28 public List<String> noLongerNeedItems =
new ArrayList<>();
32 String key =
"$hullModItemManager";
34 if (manager ==
null) {
54 if (member ==
null || currentVariant ==
null)
return true;
58 if (req ==
null)
return true;
61 if (fleet ==
null)
return true;
63 String memberId = member.
getId();
64 List<HullModInstallData> installed =
map.getList(memberId);
65 List<String> installedIds =
new ArrayList<>();
66 for (HullModInstallData data : installed) {
67 installedIds.add(data.modId);
70 if (installedIds.contains(modId))
return true;
73 return available >= 1;
77 int requiredAlreadyByUnconfirmed =
getNumUnconfirmed(req, member, currentVariant);
79 return available - requiredAlreadyByUnconfirmed;
82 if (member ==
null || currentVariant ==
null)
return 0;
85 int requiredAlreadyByUnconfirmed = 0;
86 for (String otherModId : diff.needItems) {
89 if (otherReq ==
null)
continue;
93 requiredAlreadyByUnconfirmed++;
96 for (String otherModId : diff.noLongerNeedItems) {
99 if (otherReq ==
null)
continue;
103 requiredAlreadyByUnconfirmed--;
106 return requiredAlreadyByUnconfirmed;
111 if (fleet ==
null)
return 0;
116 if (dockedAt !=
null) {
122 return (
int) Math.round(quantity);
128 String memberId = member.
getId();
129 List<HullModInstallData> installed =
map.getList(memberId);
130 for (HullModInstallData data : installed) {
131 cargo.
addItems(data.item.getType(), data.item.getData(), 1f);
150 String memberId = member.
getId();
151 List<HullModInstallData> installed =
map.getList(memberId);
152 List<String> installedIds =
new ArrayList<>();
153 for (HullModInstallData data : installed) {
154 installedIds.add(data.modId);
156 for (String modId : installedIds) {
160 map.cleanupEmptyLists();
166 for (String modId : diff.needItems) {
169 for (String modId : diff.noLongerNeedItems) {
173 map.cleanupEmptyLists();
177 HullModDiff diff =
new HullModDiff();
179 String memberId = member.
getId();
180 List<HullModInstallData> installed =
map.getList(memberId);
181 List<String> installedIds =
new ArrayList<>();
182 for (HullModInstallData data : installed) {
183 installedIds.add(data.modId);
186 for (String modId : currentVariant.
getHullMods()) {
190 if (req ==
null)
continue;
192 if (!installedIds.contains(modId)) {
193 diff.needItems.add(modId);
195 installedIds.remove(modId);
198 diff.noLongerNeedItems.addAll(installedIds);
206 if (req ==
null)
return;
208 String memberId = member.
getId();
209 List<HullModInstallData> installed =
map.getList(memberId);
210 for (HullModInstallData data : installed) {
211 if (data.modId.equals(modId))
return;
216 if (fleet ==
null)
return;
219 boolean removed =
false;
225 if (!removed && dockedAt !=
null) {
233 if (!removed)
return;
235 HullModInstallData data =
new HullModInstallData();
244 if (req ==
null)
return;
248 if (fleet ==
null)
return;
252 String memberId = member.
getId();
253 List<HullModInstallData> installed =
map.getList(memberId);
254 for (HullModInstallData data : installed) {
255 if (data.modId.equals(modId)) {
256 map.remove(memberId, data);
257 cargo.
addItems(data.item.getType(), data.item.getData(), 1);
static SettingsAPI getSettings()
static FactoryAPI getFactory()
static GameState getCurrentState()
static SectorAPI getSector()
int getNumUnconfirmed(CargoStackAPI req, FleetMemberAPI member, ShipVariantAPI currentVariant)
int getNumAvailable(CargoStackAPI req, MarketAPI dockedAt)
void takeRequiredItems(String modId, FleetMemberAPI member, MarketAPI dockedAt)
CargoAPI getItemsInUseBy(FleetMemberAPI member)
HullModDiff getHullmodDiff(FleetMemberAPI member, ShipVariantAPI currentVariant)
void giveBackAllItems(FleetMemberAPI member, CargoAPI cargo)
int getNumAvailableMinusUnconfirmed(CargoStackAPI req, FleetMemberAPI member, ShipVariantAPI currentVariant, MarketAPI dockedAt)
void reportFleetMemberVariantSaved(FleetMemberAPI member, MarketAPI dockedAt)
static HullModItemManager getInstance()
boolean isRequiredItemAvailable(String modId, FleetMemberAPI member, ShipVariantAPI currentVariant, MarketAPI dockedAt)
void giveBackAllItems(FleetMemberAPI member)
ListMap< HullModInstallData > map
void giveBackRequiredItems(String modId, FleetMemberAPI member, CargoAPI cargo)
static CargoAPI getStorageCargo(MarketAPI market)
CargoAPI createCargo(boolean unlimitedStacks)
HullModSpecAPI getHullModSpec(String modId)
float getQuantity(CargoAPI.CargoItemType type, Object data)
boolean removeItems(CargoAPI.CargoItemType itemType, Object data, float quantity)
void addItems(CargoAPI.CargoItemType itemType, Object data, float quantity)
CargoAPI.CargoItemType getType()
CampaignFleetAPI getPlayerFleet()
MemoryAPI getMemoryWithoutUpdate()
ListenerManagerAPI getListenerManager()
void addListener(Object listener)
void set(String key, Object value)
default CargoStackAPI getRequiredItem()
boolean isBuiltInMod(String modId)
Collection< String > getHullMods()
ShipVariantAPI getVariant()
ShipHullSpecAPI getHullSpec()
HullModEffect getEffect()