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}