1 package pcc.chemicraft;
3 import java.util.ArrayList;
4 import java.util.HashMap;
6 import net.minecraft.item.Item;
7 import net.minecraft.item.ItemStack;
8 import pcc.chemicraft.gen.WorldGenAtomsOre;
9 import pcc.chemicraft.system.ChemiCraftCraftingManager;
10 import pcc.chemicraft.tileentity.TileEntityPyrolysisTable;
11 import pcc.chemicraft.util.ChemicalNBTRecipe;
12 import pcc.chemicraft.util.ICompoundHandler;
13 import pcc.chemicraft.util.ListHash;
14 import pcc.chemicraft.util.MaterialRecipe;
19 * 基本的にAddonはこのクラスのインスタンスを使う
23 public class ChemiCraftAPI {
26 * Instance of the ChemiCraftAPI.
28 private static ChemiCraftAPI instance = new ChemiCraftAPI();
31 public static ChemiCraftAPI instance(){
39 private HashMap<String, Integer[]> atomOresAmountsHash = new HashMap<String, Integer[]>();
45 private HashMap<String, Integer[]> atomOresAtomsHash = new HashMap<String, Integer[]>();
51 private ListHash<String, String> atomOresLangListHash = new ListHash<String, String>();
57 private ArrayList<WorldGenAtomsOre> atomOresList = new ArrayList<WorldGenAtomsOre>();
63 private ListHash<String, String> atomOresNameListHash = new ListHash<String, String>();
70 private ListHash<String, String> chemicalCellsLangListHash = new ListHash<String, String>();
76 private ListHash<String, String> chemicalCellsNameListHash = new ListHash<String, String>();
79 private HashMap<ItemStack, Integer> chemicalCellsFuelList = new HashMap<ItemStack, Integer>();
86 private ArrayList<Integer[]> chemicalCombinationAmounts = new ArrayList<Integer[]>();
92 private ArrayList<String[]> chemicalCombinationAtoms = new ArrayList<String[]>();
98 private ArrayList<ItemStack> chemicalCombinationResult = new ArrayList<ItemStack>();
102 * ChemiCraftの化学作業台類のレシピのマネージャー
104 private ChemiCraftCraftingManager chemiCraftCraftingManager = new ChemiCraftCraftingManager();
108 * List of item name of handler to compounds.
110 private ArrayList<String> compoundHandlerItemNames = new ArrayList<String>();
114 * List of compounds handlers.
116 private ArrayList<ICompoundHandler> compoundHandlers = new ArrayList<ICompoundHandler>();
120 * 化合物の文字列をダメージ値に変換します。
122 private HashMap<String, Integer> compoundHash = new HashMap<String, Integer>();
126 * List of compounds the language names.
128 private ListHash<String, String> compoundsLangListHash = new ListHash<String, String>();
132 * List of compounds names.
134 private ListHash<String, String> compoundsNameListHash = new ListHash<String, String>();
141 private ArrayList<MaterialRecipe> materialRecipe = new ArrayList<MaterialRecipe>();
147 private ArrayList<ItemStack[]> toolAndWeaponMaterials = new ArrayList<ItemStack[]>();
153 private ArrayList<ItemStack> toolAndWeaponResult = new ArrayList<ItemStack>();
160 private ArrayList<Boolean> toolAndWeaponSharpless = new ArrayList<Boolean>();
166 * @param par1Name 鉱石名
167 * @param par2Atoms 元素
168 * @param par3Amounts 元素数
171 * @param par6Frequency 頻度
172 * @param par7PosY Y座標
174 public void addAtomOres(String par1Name, Integer[] par2Atoms, Integer[] par3Amounts, int par4Id, int par5Size, int par6Frequency, int par7PosY){
175 atomOresList.add(new WorldGenAtomsOre(par4Id, getAtomOresMetaOfLastIndex(), par5Size, par6Frequency, par7PosY));
176 atomOresAtomsHash.put(par1Name, par2Atoms);
177 atomOresAmountsHash.put(par1Name, par3Amounts);
178 addAtomOresLanguage(par1Name, par1Name, "en_US");
183 public void addAtomOres(String par1Name, String[] par2Atoms, Integer[] par3Amounts, int par4Id, int par5Size, int par6Frequency, int par7PosY){
184 addAtomOres(par1Name, ChemiCraftData.toAtoms(par2Atoms), par3Amounts, par7PosY, par7PosY, par7PosY, par7PosY);
190 * 既に登録した鉱石の新しい名前・言語を追加します
191 * @param par1Name 英語名
192 * @param par2NewName 新しい名前
193 * @param par3Language 言語
195 public void addAtomOresLanguage(String par1Name, String par2NewName, String par3Language){
196 atomOresNameListHash.add(par1Name, par2NewName);
197 atomOresLangListHash.add(par1Name, par3Language);
206 public void addChemicalCell(Item par1ChemicalCell, String par2Name, int par3OperationTime){
207 chemicalCellsFuelList.put(new ItemStack(par1ChemicalCell, 0, chemicalCellsNameListHash.sizeKeysList()), par3OperationTime);
208 addChemicalCellLanguage(par2Name, "en_US", par2Name);
213 * 既に登録した電池の新しい名前・言語を追加します
214 * @param par1Name 英語名
215 * @param par2NewName 新しい名前
216 * @param par3Language 言語
218 public void addChemicalCellLanguage(String par1Name, String par3NewLanguage, String par2NewName){
219 chemicalCellsNameListHash.add(par1Name, par2NewName);
220 chemicalCellsLangListHash.add(par1Name, par3NewLanguage);
226 * 化合レシピを追加します。materialの要素数は0<= n <= 16にしてください。
230 public void addChemicalCombinationRecipe(String[] atoms, Integer[] amounts, ItemStack result){
231 chemicalCombinationAtoms.add(atoms);
232 chemicalCombinationAmounts.add(amounts);
233 chemicalCombinationResult.add(result);
240 * @param name compound name.
242 public void addCompound(String name){
243 compoundsNameListHash.add(name, name);
244 compoundsLangListHash.add(name, "en_US");
245 compoundHash.put(name, compoundHash.size());
251 * add compound corresponding to the language.
252 * @param lang Language to the corresponding
253 * @param englishName compound name
254 * @param langName compound name(specified language)
256 public void addCompound(String lang, String englishName, String langName){
257 addCompound(englishName);
258 addCompoundLanguage(lang, englishName, langName);
263 public void addCompoundLanguage(String lang, String englishName, String langName){
264 compoundsNameListHash.add(englishName, langName);
265 compoundsLangListHash.add(englishName, lang);
272 * @param itemstack 燃料のItemStack
273 * @param burnTime 燃焼時間(tick * rate)
275 public void addDecompositionFuel(ItemStack itemstack, int burnTime) {
276 TileEntityPyrolysisTable.addFuel(itemstack, burnTime);
283 * @param integers 原子の元素番号の配列
284 * @param integers2 原子のできる数の配列
286 public void addDecompositionRecipe(ItemStack material, Integer[] integers, Integer[] integers2) {
287 ItemStack[] itemstacks = new ItemStack[integers.length];
288 for (int i = 0; i < itemstacks.length; i++) {
289 itemstacks[i] = new ItemStack(ChemiCraft.instance.itemAtoms,integers2[i], integers[i]);
291 TileEntityPyrolysisTable.addRecipe(material, itemstacks);
298 * @param materials 素材
300 * @param nbtRecipe NBT(Nullの場合はなし)
302 public void addMaterialRecipe(ItemStack[] materials, ItemStack result, ChemicalNBTRecipe nbtRecipe){
303 materialRecipe.add(new MaterialRecipe(result, materials, nbtRecipe, false));
310 * @param materials 素材
312 * @param nbtRecipe NBT(Nullの場合はなし)
314 public void addSharplessMaterialRecipe(ItemStack[] materials, ItemStack result, ChemicalNBTRecipe nbtRecipe){
315 materialRecipe.add(new MaterialRecipe(result, materials, nbtRecipe, true));
321 * ツール&武器作成台の不定形レシピを追加します
322 * @param materials 素材
325 public void addSharplessToolAndWeaponRecipe(ItemStack[] materials, ItemStack result) {
326 toolAndWeaponMaterials.add(materials);
327 toolAndWeaponResult.add(result);
328 toolAndWeaponSharpless.add(true);
333 * ツール&武器作成台のレシピを追加します
334 * @param materials 素材
337 public void addToolAndWeaponRecipe(ItemStack[] materials, ItemStack result) {
338 toolAndWeaponMaterials.add(materials);
339 toolAndWeaponResult.add(result);
340 toolAndWeaponSharpless.add(false);
344 public ArrayList<WorldGenAtomsOre> getAtomOres(){
349 //以下システム関連//////////////////////////////////////////////////////
351 public HashMap<String, Integer[]> getAtomOresAmounts(){
352 return atomOresAmountsHash;
357 public HashMap<String, Integer[]> getAtomOresAtoms(){
358 return atomOresAtomsHash;
363 public ListHash<String, String> getAtomOresLanguage(){
364 return atomOresLangListHash;
369 public int getAtomOresLastIndex(){
370 return atomOresNameListHash.sizeKeysList() / 16;
375 public int getAtomOresMetaOfLastIndex(){
376 return atomOresNameListHash.sizeKeysList() - getAtomOresLastIndex() * 16;
381 public ListHash<String, String> getAtomOresName(){
382 return atomOresNameListHash;
387 public HashMap<ItemStack, Integer> getChemicalCellsFuelList(){
388 return chemicalCellsFuelList;
393 public ListHash<String, String> getChemicalCellsLanguage(){
394 return chemicalCellsLangListHash;
399 public ListHash<String, String> getChemicalCellsName(){
400 return chemicalCellsNameListHash;
405 public ArrayList<Integer[]> getChemicalCombinationAmounts(){
406 return chemicalCombinationAmounts;
411 public ArrayList<String[]> getChemicalCombinationAtoms(){
412 return chemicalCombinationAtoms;
417 public ArrayList<ItemStack> getChemicalCombinationResult(){
418 return chemicalCombinationResult;
423 public int getCompound(String key){
424 if(compoundHash.get(key) != null){
425 return compoundHash.get(key);
433 public ArrayList<ICompoundHandler> getCompoundHandler(){
434 compoundHandlers.trimToSize();
435 return compoundHandlers;
441 public ArrayList<String> getCompoundHandlerItemName(){
442 compoundHandlerItemNames.trimToSize();
443 return compoundHandlerItemNames;
448 public ListHash<String, String> getCompoundsLang(){
449 return compoundsLangListHash;
454 public ListHash<String, String> getCompoundsName(){
455 return compoundsNameListHash;
460 public ChemiCraftCraftingManager getCraftingManager(){
461 return chemiCraftCraftingManager;
466 public ArrayList<MaterialRecipe> getMaterialRecipe(){
467 return materialRecipe;
472 public ArrayList<ItemStack[]> getToolAndWeaponMaterials() {
473 return toolAndWeaponMaterials;
478 public ArrayList<ItemStack> getToolAndWeaponResult() {
479 return toolAndWeaponResult;
484 public ArrayList<Boolean> getToolAndWeaponSharpless() {
485 return toolAndWeaponSharpless;
491 * setting compound handler.
492 * @param handlerItemName
493 * @param compoundHandler
495 public void settingCompoundHandler(String handlerItemName, ICompoundHandler compoundHandler){
496 compoundHandlers.add(compoundHandler);
497 compoundHandlerItemNames.add(handlerItemName);