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.TileEntityElectrolysisTable;
11 import pcc.chemicraft.tileentity.TileEntityPyrolysisTable;
12 import pcc.chemicraft.util.ChemicalNBTRecipe;
13 import pcc.chemicraft.util.ICompoundHandler;
14 import pcc.chemicraft.util.ListHash;
15 import pcc.chemicraft.util.MaterialRecipe;
20 * 基本的にAddonはこのクラスのインスタンスを使う
24 public class ChemiCraftAPI {
27 * Instance of the ChemiCraftAPI.
29 private static ChemiCraftAPI instance = new ChemiCraftAPI();
32 public static ChemiCraftAPI instance(){
40 private HashMap<String, Integer[]> atomOresAmountsHash = new HashMap<String, Integer[]>();
46 private HashMap<String, Integer[]> atomOresAtomsHash = new HashMap<String, Integer[]>();
52 private ListHash<String, String> atomOresLangListHash = new ListHash<String, String>();
58 private ArrayList<WorldGenAtomsOre> atomOresList = new ArrayList<WorldGenAtomsOre>();
64 private ListHash<String, String> atomOresNameListHash = new ListHash<String, String>();
71 private HashMap<ItemStack, Integer> chemicalCellsList = new HashMap<ItemStack, Integer>();
77 private ListHash<String, String> chemicalCellsLangListHash = new ListHash<String, String>();
83 private ListHash<String, String> chemicalCellsNameListHash = new ListHash<String, String>();
90 private ArrayList<Integer[]> chemicalCombinationAmounts = new ArrayList<Integer[]>();
96 private ArrayList<String[]> chemicalCombinationAtoms = new ArrayList<String[]>();
102 private ArrayList<ItemStack> chemicalCombinationResult = new ArrayList<ItemStack>();
106 * ChemiCraftの化学作業台類のレシピのマネージャー
108 private ChemiCraftCraftingManager chemiCraftCraftingManager = new ChemiCraftCraftingManager();
112 * List of item name of handler to compounds.
114 private ArrayList<String> compoundHandlerItemNames = new ArrayList<String>();
118 * List of compounds handlers.
120 private ArrayList<ICompoundHandler> compoundHandlers = new ArrayList<ICompoundHandler>();
124 * 化合物の文字列をダメージ値に変換します。
126 private HashMap<String, Integer> compoundHash = new HashMap<String, Integer>();
130 * List of compounds the language names.
132 private ListHash<String, String> compoundsLangListHash = new ListHash<String, String>();
136 * List of compounds names.
138 private ListHash<String, String> compoundsNameListHash = new ListHash<String, String>();
145 private ArrayList<MaterialRecipe> materialRecipe = new ArrayList<MaterialRecipe>();
151 private ArrayList<ItemStack[]> toolAndWeaponMaterials = new ArrayList<ItemStack[]>();
157 private ArrayList<ItemStack> toolAndWeaponResult = new ArrayList<ItemStack>();
164 private ArrayList<Boolean> toolAndWeaponSharpless = new ArrayList<Boolean>();
170 * @param par1Name 鉱石名
171 * @param par2Atoms 元素
172 * @param par3Amounts 元素数
175 * @param par6Frequency 頻度
176 * @param par7PosY Y座標
178 public void addAtomOres(String par1Name, Integer[] par2Atoms, Integer[] par3Amounts, int par4Id, int par5Size, int par6Frequency, int par7PosY){
179 atomOresList.add(new WorldGenAtomsOre(par4Id, getAtomOresMetaOfLastIndex(), par5Size, par6Frequency, par7PosY));
180 atomOresAtomsHash.put(par1Name, par2Atoms);
181 atomOresAmountsHash.put(par1Name, par3Amounts);
182 addAtomOresLanguage(par1Name, par1Name, "en_US");
187 public void addAtomOres(String par1Name, String[] par2Atoms, Integer[] par3Amounts, int par4Id, int par5Size, int par6Frequency, int par7PosY){
188 addAtomOres(par1Name, ChemiCraftData.toAtoms(par2Atoms), par3Amounts, par4Id, par5Size, par6Frequency, par7PosY);
194 * 既に登録した鉱石の新しい名前・言語を追加します
195 * @param par1Name 英語名
196 * @param par2NewName 新しい名前
197 * @param par3Language 言語
199 public void addAtomOresLanguage(String par1Name, String par2NewName, String par3Language){
200 atomOresNameListHash.add(par1Name, par2NewName);
201 atomOresLangListHash.add(par1Name, par3Language);
210 public void addChemicalCell(Item par1ChemicalCell, String par2Name, int par3OperationTime){
211 chemicalCellsList.put(new ItemStack(par1ChemicalCell, 0, chemicalCellsNameListHash.sizeKeysList()), par3OperationTime);
212 addChemicalCellLanguage(par2Name, "en_US", par2Name);
217 * 既に登録した電池の新しい名前・言語を追加します
218 * @param par1Name 英語名
219 * @param par2NewName 新しい名前
220 * @param par3Language 言語
222 public void addChemicalCellLanguage(String par1Name, String par3NewLanguage, String par2NewName){
223 chemicalCellsNameListHash.add(par1Name, par2NewName);
224 chemicalCellsLangListHash.add(par1Name, par3NewLanguage);
230 * 化合レシピを追加します。materialの要素数は0<= n <= 16にしてください。
234 public void addChemicalCombinationRecipe(String[] atoms, Integer[] amounts, ItemStack result){
235 chemicalCombinationAtoms.add(atoms);
236 chemicalCombinationAmounts.add(amounts);
237 chemicalCombinationResult.add(result);
244 * @param name compound name.
246 public void addCompound(String name){
247 compoundsNameListHash.add(name, name);
248 compoundsLangListHash.add(name, "en_US");
249 compoundHash.put(name, compoundHash.size());
255 * add compound corresponding to the language.
256 * @param lang Language to the corresponding
257 * @param englishName compound name
258 * @param langName compound name(specified language)
260 public void addCompound(String lang, String englishName, String langName){
261 addCompound(englishName);
262 addCompoundLanguage(lang, englishName, langName);
267 public void addCompoundLanguage(String lang, String englishName, String langName){
268 compoundsNameListHash.add(englishName, langName);
269 compoundsLangListHash.add(englishName, lang);
276 * @param itemstack 燃料のItemStack
277 * @param burnTime 燃焼時間(tick * rate)
279 public void addPyrolysisDecompositionFuel(ItemStack itemstack, int burnTime) {
280 TileEntityPyrolysisTable.addFuel(itemstack, burnTime);
287 * @param integers 原子の元素番号の配列
288 * @param integers2 原子のできる数の配列
290 public void addPyrolysisDecompositionRecipe(ItemStack material, Integer[] integers, Integer[] integers2) {
291 ItemStack[] itemstacks = new ItemStack[integers.length];
292 for (int i = 0; i < itemstacks.length; i++) {
293 itemstacks[i] = new ItemStack(ChemiCraft.instance.itemAtoms,integers2[i], integers[i]);
295 TileEntityPyrolysisTable.addRecipe(material, itemstacks);
300 public void addElectrolysisDecompositionRecipe(ItemStack material, Integer[] integers, Integer[] integers2) {
301 ItemStack[] itemstacks = new ItemStack[integers.length];
302 for (int i = 0; i < itemstacks.length; i++) {
303 itemstacks[i] = new ItemStack(ChemiCraft.instance.itemAtoms,integers2[i], integers[i]);
305 TileEntityElectrolysisTable.addRecipe(material, itemstacks);
312 * @param materials 素材
314 * @param nbtRecipe NBT(Nullの場合はなし)
316 public void addMaterialRecipe(ItemStack[] materials, ItemStack result, ChemicalNBTRecipe nbtRecipe){
317 materialRecipe.add(new MaterialRecipe(result, materials, nbtRecipe, false));
324 * @param materials 素材
326 * @param nbtRecipe NBT(Nullの場合はなし)
328 public void addSharplessMaterialRecipe(ItemStack[] materials, ItemStack result, ChemicalNBTRecipe nbtRecipe){
329 materialRecipe.add(new MaterialRecipe(result, materials, nbtRecipe, true));
335 * ツール&武器作成台の不定形レシピを追加します
336 * @param materials 素材
339 public void addSharplessToolAndWeaponRecipe(ItemStack[] materials, ItemStack result) {
340 toolAndWeaponMaterials.add(materials);
341 toolAndWeaponResult.add(result);
342 toolAndWeaponSharpless.add(true);
347 * ツール&武器作成台のレシピを追加します
348 * @param materials 素材
351 public void addToolAndWeaponRecipe(ItemStack[] materials, ItemStack result) {
352 toolAndWeaponMaterials.add(materials);
353 toolAndWeaponResult.add(result);
354 toolAndWeaponSharpless.add(false);
358 public ArrayList<WorldGenAtomsOre> getAtomOres(){
363 //以下システム関連//////////////////////////////////////////////////////
365 public HashMap<String, Integer[]> getAtomOresAmounts(){
366 return atomOresAmountsHash;
371 public HashMap<String, Integer[]> getAtomOresAtoms(){
372 return atomOresAtomsHash;
377 public ListHash<String, String> getAtomOresLanguage(){
378 return atomOresLangListHash;
383 public int getAtomOresLastIndex(){
384 return atomOresNameListHash.sizeKeysList() / 16;
389 public int getAtomOresMetaOfLastIndex(){
390 return atomOresNameListHash.sizeKeysList() - getAtomOresLastIndex() * 16;
395 public ListHash<String, String> getAtomOresName(){
396 return atomOresNameListHash;
401 public HashMap<ItemStack, Integer> getChemicalCellsList(){
402 return chemicalCellsList;
407 public ListHash<String, String> getChemicalCellsLanguage(){
408 return chemicalCellsLangListHash;
413 public ListHash<String, String> getChemicalCellsName(){
414 return chemicalCellsNameListHash;
419 public ArrayList<Integer[]> getChemicalCombinationAmounts(){
420 return chemicalCombinationAmounts;
425 public ArrayList<String[]> getChemicalCombinationAtoms(){
426 return chemicalCombinationAtoms;
431 public ArrayList<ItemStack> getChemicalCombinationResult(){
432 return chemicalCombinationResult;
437 public int getCompound(String key){
438 if(compoundHash.get(key) != null){
439 return compoundHash.get(key);
447 public ArrayList<ICompoundHandler> getCompoundHandler(){
448 compoundHandlers.trimToSize();
449 return compoundHandlers;
455 public ArrayList<String> getCompoundHandlerItemName(){
456 compoundHandlerItemNames.trimToSize();
457 return compoundHandlerItemNames;
462 public ListHash<String, String> getCompoundsLang(){
463 return compoundsLangListHash;
468 public ListHash<String, String> getCompoundsName(){
469 return compoundsNameListHash;
474 public ChemiCraftCraftingManager getCraftingManager(){
475 return chemiCraftCraftingManager;
480 public ArrayList<MaterialRecipe> getMaterialRecipe(){
481 return materialRecipe;
486 public ArrayList<ItemStack[]> getToolAndWeaponMaterials() {
487 return toolAndWeaponMaterials;
492 public ArrayList<ItemStack> getToolAndWeaponResult() {
493 return toolAndWeaponResult;
498 public ArrayList<Boolean> getToolAndWeaponSharpless() {
499 return toolAndWeaponSharpless;
505 * setting compound handler.
506 * @param handlerItemName
507 * @param compoundHandler
509 public void settingCompoundHandler(String handlerItemName, ICompoundHandler compoundHandler){
510 compoundHandlers.add(compoundHandler);
511 compoundHandlerItemNames.add(handlerItemName);