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.EnumOreSpawnFrequency;
9 import pcc.chemicraft.gen.WorldGenAtomsOre;
10 import pcc.chemicraft.system.ChemiCraftCraftingManager;
11 import pcc.chemicraft.tileentity.TileEntityElectrolysisTable;
12 import pcc.chemicraft.tileentity.TileEntityPyrolysisTable;
13 import pcc.chemicraft.util.ChemicalNBTRecipe;
14 import pcc.chemicraft.util.ICompoundHandler;
15 import pcc.chemicraft.util.ListHash;
16 import pcc.chemicraft.util.MaterialRecipe;
21 * 基本的にAddonはこのクラスのインスタンスを使う
25 public class ChemiCraftAPI {
28 * Instance of the ChemiCraftAPI.
30 private static ChemiCraftAPI instance = new ChemiCraftAPI();
33 public static ChemiCraftAPI instance(){
41 private ArrayList<Integer[]> atomOresAmountsList = new ArrayList<Integer[]>();
47 private ArrayList<Integer[]> atomOresAtomsList = new ArrayList<Integer[]>();
53 private ListHash<String, String> atomOresLangListHash = new ListHash<String, String>();
59 private ArrayList<WorldGenAtomsOre> atomOresList = new ArrayList<WorldGenAtomsOre>();
65 private ListHash<String, String> atomOresNameListHash = new ListHash<String, String>();
72 private ListHash<String, String> chemicalCellsLangListHash = new ListHash<String, String>();
78 private HashMap<ItemStack, Integer> chemicalCellsList = new HashMap<ItemStack, Integer>();
84 private ListHash<String, String> chemicalCellsNameListHash = new ListHash<String, String>();
91 private ArrayList<Integer[]> chemicalCombinationAmounts = new ArrayList<Integer[]>();
97 private ArrayList<String[]> chemicalCombinationAtoms = new ArrayList<String[]>();
103 private ArrayList<ItemStack> chemicalCombinationResult = new ArrayList<ItemStack>();
107 * ChemiCraftの化学作業台類のレシピのマネージャー
109 private ChemiCraftCraftingManager chemiCraftCraftingManager = new ChemiCraftCraftingManager();
113 * List of item name of handler to compounds.
115 private ArrayList<String> compoundHandlerItemNames = new ArrayList<String>();
119 * List of compounds handlers.
121 private ArrayList<ICompoundHandler> compoundHandlers = new ArrayList<ICompoundHandler>();
125 * 化合物の文字列をダメージ値に変換します。
127 private HashMap<String, Integer> compoundHash = new HashMap<String, Integer>();
131 * List of compounds the language names.
133 private ListHash<String, String> compoundsLangListHash = new ListHash<String, String>();
137 * List of compounds names.
139 private ListHash<String, String> compoundsNameListHash = new ListHash<String, String>();
146 private ArrayList<MaterialRecipe> materialRecipe = new ArrayList<MaterialRecipe>();
152 private ArrayList<ItemStack[]> toolAndWeaponMaterials = new ArrayList<ItemStack[]>();
158 private ArrayList<ItemStack> toolAndWeaponResult = new ArrayList<ItemStack>();
165 private ArrayList<Boolean> toolAndWeaponSharpless = new ArrayList<Boolean>();
171 * @param par1Name 鉱石名
172 * @param par2Atoms 元素
173 * @param par3Amounts 元素数
176 * @param par6Frequency 頻度
177 * @param par7PosY Y座標
179 public void addAtomOres(String par1Name, Integer[] par2Atoms, Integer[] par3Amounts, int par4Id, int par5Size, int par6Frequency, int par7PosY){
180 atomOresList.add(new WorldGenAtomsOre(par4Id, getAtomOresMetaOfLastIndex(), par5Size, par6Frequency, par7PosY));
181 atomOresAtomsList.add(par2Atoms);
182 atomOresAmountsList.add(par3Amounts);
183 addAtomOresLanguage(par1Name, par1Name, "en_US");
188 public void addAtomOres(String par1Name, Integer[] par2Atoms, Integer[] par3Amounts, int par4Id, int par5Size, EnumOreSpawnFrequency par6Frequency, int par7PosY){
189 addAtomOres(par1Name, par2Atoms, par3Amounts, par4Id, par5Size, par6Frequency.getFrequency(), par7PosY);
194 public void addAtomOres(String par1Name, String[] par2Atoms, Integer[] par3Amounts, int par4Id, int par5Size, EnumOreSpawnFrequency par6Frequency, int par7PosY){
195 addAtomOres(par1Name, ChemiCraftData.toAtoms(par2Atoms), par3Amounts, par4Id, par5Size, par6Frequency.getFrequency(), par7PosY);
200 public void addAtomOres(String par1Name, String[] par2Atoms, Integer[] par3Amounts, int par4Id, int par5Size, int par6Frequency, int par7PosY){
201 addAtomOres(par1Name, ChemiCraftData.toAtoms(par2Atoms), par3Amounts, par4Id, par5Size, par6Frequency, par7PosY);
207 * 既に登録した鉱石の新しい名前・言語を追加します
208 * @param par1Name 英語名
209 * @param par2NewName 新しい名前
210 * @param par3Language 言語
212 public void addAtomOresLanguage(String par1Name, String par2NewName, String par3Language){
213 atomOresNameListHash.add(par1Name, par2NewName);
214 atomOresLangListHash.add(par1Name, par3Language);
223 public void addChemicalCell(Item par1ChemicalCell, String par2Name, int par3OperationTime){
224 chemicalCellsList.put(new ItemStack(par1ChemicalCell, 0, chemicalCellsNameListHash.sizeKeysList()), par3OperationTime);
225 addChemicalCellLanguage(par2Name, "en_US", par2Name);
231 * 既に登録した電池の新しい名前・言語を追加します
232 * @param par1Name 英語名
233 * @param par2NewName 新しい名前
234 * @param par3Language 言語
236 public void addChemicalCellLanguage(String par1Name, String par3NewLanguage, String par2NewName){
237 chemicalCellsNameListHash.add(par1Name, par2NewName);
238 chemicalCellsLangListHash.add(par1Name, par3NewLanguage);
244 * 化合レシピを追加します。materialの要素数は0<= n <= 16にしてください。
248 public void addChemicalCombinationRecipe(String[] atoms, Integer[] amounts, ItemStack result){
249 chemicalCombinationAtoms.add(atoms);
250 chemicalCombinationAmounts.add(amounts);
251 chemicalCombinationResult.add(result);
258 * @param name compound name.
260 public void addCompound(String name){
261 compoundsNameListHash.add(name, name);
262 compoundsLangListHash.add(name, "en_US");
263 compoundHash.put(name, compoundHash.size());
269 * add compound corresponding to the language.
270 * @param lang Language to the corresponding
271 * @param englishName compound name
272 * @param langName compound name(specified language)
274 public void addCompound(String lang, String englishName, String langName){
275 addCompound(englishName);
276 addCompoundLanguage(lang, englishName, langName);
281 public void addCompoundLanguage(String lang, String englishName, String langName){
282 compoundsNameListHash.add(englishName, langName);
283 compoundsLangListHash.add(englishName, lang);
288 public void addElectrolysisDecompositionRecipe(ItemStack material, Integer[] integers, Integer[] integers2) {
289 ItemStack[] itemstacks = new ItemStack[integers.length];
290 for (int i = 0; i < itemstacks.length; i++) {
291 itemstacks[i] = new ItemStack(ChemiCraft.instance.itemAtoms,integers2[i], integers[i]);
293 TileEntityElectrolysisTable.addRecipe(material, itemstacks);
299 * @param materials 素材
301 * @param nbtRecipe NBT(Nullの場合はなし)
303 public void addMaterialRecipe(ItemStack[] materials, ItemStack result, ChemicalNBTRecipe nbtRecipe){
304 materialRecipe.add(new MaterialRecipe(result, materials, nbtRecipe, false));
311 * @param itemstack 燃料のItemStack
312 * @param burnTime 燃焼時間(tick * rate)
314 public void addPyrolysisDecompositionFuel(ItemStack itemstack, int burnTime) {
315 TileEntityPyrolysisTable.addFuel(itemstack, burnTime);
323 * @param integers 原子の元素番号の配列
324 * @param integers2 原子のできる数の配列
326 public void addPyrolysisDecompositionRecipe(ItemStack material, Integer[] integers, Integer[] integers2) {
327 ItemStack[] itemstacks = new ItemStack[integers.length];
328 for (int i = 0; i < itemstacks.length; i++) {
329 itemstacks[i] = new ItemStack(ChemiCraft.instance.itemAtoms,integers2[i], integers[i]);
331 TileEntityPyrolysisTable.addRecipe(material, itemstacks);
338 * @param materials 素材
340 * @param nbtRecipe NBT(Nullの場合はなし)
342 public void addSharplessMaterialRecipe(ItemStack[] materials, ItemStack result, ChemicalNBTRecipe nbtRecipe){
343 materialRecipe.add(new MaterialRecipe(result, materials, nbtRecipe, true));
349 * ツール&武器作成台の不定形レシピを追加します
350 * @param materials 素材
353 public void addSharplessToolAndWeaponRecipe(ItemStack[] materials, ItemStack result) {
354 toolAndWeaponMaterials.add(materials);
355 toolAndWeaponResult.add(result);
356 toolAndWeaponSharpless.add(true);
361 * ツール&武器作成台のレシピを追加します
362 * @param materials 素材
365 public void addToolAndWeaponRecipe(ItemStack[] materials, ItemStack result) {
366 toolAndWeaponMaterials.add(materials);
367 toolAndWeaponResult.add(result);
368 toolAndWeaponSharpless.add(false);
372 public ArrayList<WorldGenAtomsOre> getAtomOres(){
377 //以下システム関連//////////////////////////////////////////////////////
379 public ArrayList<Integer[]> getAtomOresAmounts(){
380 return atomOresAmountsList;
385 public ArrayList<Integer[]> getAtomOresAtoms(){
386 return atomOresAtomsList;
391 public ListHash<String, String> getAtomOresLanguage(){
392 return atomOresLangListHash;
397 public int getAtomOresLastIndex(){
398 return atomOresNameListHash.sizeKeysList() / 16;
403 public int getAtomOresMetaOfLastIndex(){
404 return atomOresNameListHash.sizeKeysList() - getAtomOresLastIndex() * 16;
409 public ListHash<String, String> getAtomOresName(){
410 return atomOresNameListHash;
415 public ListHash<String, String> getChemicalCellsLanguage(){
416 return chemicalCellsLangListHash;
421 public HashMap<ItemStack, Integer> getChemicalCellsList(){
422 return chemicalCellsList;
427 public ListHash<String, String> getChemicalCellsName(){
428 return chemicalCellsNameListHash;
433 public ArrayList<Integer[]> getChemicalCombinationAmounts(){
434 return chemicalCombinationAmounts;
439 public ArrayList<String[]> getChemicalCombinationAtoms(){
440 return chemicalCombinationAtoms;
445 public ArrayList<ItemStack> getChemicalCombinationResult(){
446 return chemicalCombinationResult;
451 public int getCompound(String key){
452 if(compoundHash.get(key) != null){
453 return compoundHash.get(key);
461 public ArrayList<ICompoundHandler> getCompoundHandler(){
462 compoundHandlers.trimToSize();
463 return compoundHandlers;
469 public ArrayList<String> getCompoundHandlerItemName(){
470 compoundHandlerItemNames.trimToSize();
471 return compoundHandlerItemNames;
476 public ListHash<String, String> getCompoundsLang(){
477 return compoundsLangListHash;
482 public ListHash<String, String> getCompoundsName(){
483 return compoundsNameListHash;
488 public ChemiCraftCraftingManager getCraftingManager(){
489 return chemiCraftCraftingManager;
494 public ArrayList<MaterialRecipe> getMaterialRecipe(){
495 return materialRecipe;
500 public ArrayList<ItemStack[]> getToolAndWeaponMaterials() {
501 return toolAndWeaponMaterials;
506 public ArrayList<ItemStack> getToolAndWeaponResult() {
507 return toolAndWeaponResult;
512 public ArrayList<Boolean> getToolAndWeaponSharpless() {
513 return toolAndWeaponSharpless;
519 * setting compound handler.
520 * @param handlerItemName
521 * @param compoundHandler
523 public void settingCompoundHandler(String handlerItemName, ICompoundHandler compoundHandler){
524 compoundHandlers.add(compoundHandler);
525 compoundHandlerItemNames.add(handlerItemName);