001package com.fs.starfarer.api.impl.campaign.rulecmd;
002
003import java.util.List;
004import java.util.Map;
005
006import com.fs.starfarer.api.Global;
007import com.fs.starfarer.api.campaign.CargoAPI;
008import com.fs.starfarer.api.campaign.CargoAPI.CargoItemType;
009import com.fs.starfarer.api.campaign.InteractionDialogAPI;
010import com.fs.starfarer.api.campaign.SpecialItemData;
011import com.fs.starfarer.api.campaign.TextPanelAPI;
012import com.fs.starfarer.api.campaign.rules.MemoryAPI;
013import com.fs.starfarer.api.util.Misc.Token;
014
015/**
016 *      First param is one of:
017 *              RESOURCES
018 *              WEAPONS
019 *              FIGHTER_CHIP
020 *              SPECIAL
021 *              
022 *      SPECIAL catalytic_core 1
023 *      SPECIAL ship_bp paragon 1
024 *  WEAPONS ionpulser 1
025 *
026 *      AddRemoveAnyItem <type> <id> <optional other id for blueprints etc> <quantity>
027 *
028 */
029public class AddRemoveAnyItem extends BaseCommandPlugin {
030
031        public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
032                if (dialog == null) return false;
033                
034                String typeStr = params.get(0).getString(memoryMap);
035                CargoItemType type = Enum.valueOf(CargoItemType.class, typeStr);
036                
037                String id = params.get(1).getString(memoryMap);
038                String param = null;
039                int q = 1;
040                if (type != CargoItemType.SPECIAL) {
041                        q = params.get(2).getInt(memoryMap);
042                } else {
043                        if (params.size() <= 3) {
044                                q = params.get(2).getInt(memoryMap);
045                        } else if (params.size() >= 4) {
046                                param = params.get(2).getString(memoryMap);
047                                q = params.get(3).getInt(memoryMap);
048                        }
049                }
050                
051                TextPanelAPI text = dialog.getTextPanel();
052                CargoAPI cargo = Global.getSector().getPlayerFleet().getCargo();
053                
054                if (type == CargoItemType.RESOURCES) {
055                        if (q > 0) {
056                                cargo.addCommodity(id, q);
057                                AddRemoveCommodity.addCommodityGainText(id, q, text);
058                        } else
059                        if (q < 0) {
060                                cargo.removeCommodity(id, -q);
061                                AddRemoveCommodity.addCommodityLossText(id, -q, text);
062                        }
063                        return true;
064                }
065                if (type == CargoItemType.FIGHTER_CHIP) {
066                        if (q > 0) {
067                                cargo.addFighters(id, q);
068                                AddRemoveCommodity.addFighterGainText(id, q, text);
069                        } else
070                        if (q < 0) {
071                                cargo.removeFighters(id, -q);
072                                AddRemoveCommodity.addFighterLossText(id, -q, text);
073                        }
074                        return true;
075                }
076                if (type == CargoItemType.WEAPONS) {
077                        if (q > 0) {
078                                cargo.addWeapons(id, q);
079                                AddRemoveCommodity.addWeaponGainText(id, q, text);
080                        } else
081                        if (q < 0) {
082                                cargo.removeWeapons(id, -q);
083                                AddRemoveCommodity.addWeaponLossText(id, -q, text);
084                        }
085                        return true;
086                }
087                if (type == CargoItemType.SPECIAL) {
088                        SpecialItemData data = new SpecialItemData(id, param);
089                        if (q > 0) {
090                                cargo.addSpecial(data, q);
091                                AddRemoveCommodity.addItemGainText(data, q, text);
092                        } else
093                        if (q < 0) {
094                                cargo.removeItems(CargoItemType.SPECIAL, data, -q);
095                                AddRemoveCommodity.addItemLossText(data, -q, text);
096                        }
097                        return true;
098                }
099                
100                return false;
101        }
102
103}