1 package pcc.chemicraft;
3 import java.util.ArrayList;
4 import java.util.HashMap;
6 import net.minecraft.item.ItemStack;
7 import pcc.chemicraft.gen.WorldGenAtomsOre;
8 import pcc.chemicraft.system.ChemiCraftCraftingManager;
9 import pcc.chemicraft.tileentity.TileEntityPyrolysisTable;
10 import pcc.chemicraft.util.ChemicalNBTRecipe;
11 import pcc.chemicraft.util.ICompoundHandler;
12 import pcc.chemicraft.util.ListHash;
13 import pcc.chemicraft.util.MaterialRecipe;
18 * 基本的にAddonはこのクラスのインスタンスを使う
22 public class ChemiCraftAPI {
25 * Instance of the ChemiCraftAPI.
27 private static ChemiCraftAPI instance = new ChemiCraftAPI();
31 * List of compounds names.
33 private ListHash<String, String> compoundsNameListHash = new ListHash<String, String>();
37 * List of compounds the language names.
39 private ListHash<String, String> compoundsLangListHash = new ListHash<String, String>();
43 * List of compounds handlers.
45 private ArrayList<ICompoundHandler> compoundHandlers = new ArrayList<ICompoundHandler>();
49 * 化合物の文字列をダメージ値に変換します。
51 private HashMap<String, Integer> compoundHash = new HashMap<String, Integer>();
55 * List of item name of handler to compounds.
57 private ArrayList<String> compoundHandlerItemNames = new ArrayList<String>();
63 private ArrayList<String[]> chemicalCombinationAtoms = new ArrayList<String[]>();
69 private ArrayList<Integer[]> chemicalCombinationAmounts = new ArrayList<Integer[]>();
75 private ArrayList<ItemStack> chemicalCombinationResult = new ArrayList<ItemStack>();
81 private ArrayList<MaterialRecipe> materialRecipe = new ArrayList<MaterialRecipe>();
85 * ChemiCraftの化学作業台類のレシピのマネージャー
87 private ChemiCraftCraftingManager chemiCraftCraftingManager = new ChemiCraftCraftingManager();
94 private ListHash<String, String> atomsOreNameListHash = new ListHash<String, String>();
100 private ListHash<String, String> atomsOreLangListHash = new ListHash<String, String>();
106 private ArrayList<WorldGenAtomsOre> atomsOres = new ArrayList<WorldGenAtomsOre>();
113 private ArrayList<ItemStack[]> toolAndWeaponMaterials = new ArrayList<ItemStack[]>();
119 private ArrayList<ItemStack> toolAndWeaponResult = new ArrayList<ItemStack>();
125 private ArrayList<Boolean> toolAndWeaponSharpless = new ArrayList<Boolean>();
131 * @param name compound name.
133 public void addCompound(String name){
134 compoundsNameListHash.add(name, name);
135 compoundsLangListHash.add(name, "en_US");
136 compoundHash.put(name, compoundHash.size());
142 * add compound corresponding to the language.
143 * @param lang Language to the corresponding
144 * @param englishName compound name
145 * @param langName compound name(specified language)
147 public void addCompound(String lang, String englishName, String langName){
148 addCompound(englishName);
149 addCompoundLanguage(lang, englishName, langName);
154 public void addCompoundLanguage(String lang, String englishName, String langName){
155 compoundsNameListHash.add(englishName, langName);
156 compoundsLangListHash.add(englishName, lang);
161 public int getCompound(String key){
162 if(compoundHash.get(key) != null){
163 return compoundHash.get(key);
172 * setting compound handler.
173 * @param handlerItemName
174 * @param compoundHandler
176 public void settingCompoundHandler(String handlerItemName, ICompoundHandler compoundHandler){
177 compoundHandlers.add(compoundHandler);
178 compoundHandlerItemNames.add(handlerItemName);
184 * 化合レシピを追加します。materialの要素数は0<= n <= 16にしてください。
188 public void addChemicalCombinationRecipe(String[] atoms, Integer[] amounts, ItemStack result){
189 chemicalCombinationAtoms.add(atoms);
190 chemicalCombinationAmounts.add(amounts);
191 chemicalCombinationResult.add(result);
199 * @param results 原子の元素番号の配列
200 * @param stacks 原子のできる数の配列
202 public void addDecompositionRecipe(ItemStack material, int[] results, int[] stacks) {
203 ItemStack[] itemstacks = new ItemStack[results.length];
204 for (int i = 0; i < itemstacks.length; i++) {
205 itemstacks[i] = new ItemStack(ChemiCraft.instance.itemAtoms,stacks[i], results[i]);
207 TileEntityPyrolysisTable.addRecipe(material, itemstacks);
214 * @param itemstack 燃料のItemStack
215 * @param burnTime 燃焼時間(tick * rate)
217 public void addDecompositionFuel(ItemStack itemstack, int burnTime) {
218 TileEntityPyrolysisTable.addFuel(itemstack, burnTime);
224 * ツール&武器作成台のレシピを追加します
225 * @param materials 素材
228 public void addToolAndWeaponRecipe(ItemStack[] materials, ItemStack result) {
229 toolAndWeaponMaterials.add(materials);
230 toolAndWeaponResult.add(result);
231 toolAndWeaponSharpless.add(false);
236 * ツール&武器作成台の不定形レシピを追加します
237 * @param materials 素材
240 public void addSharplessToolAndWeaponRecipe(ItemStack[] materials, ItemStack result) {
241 toolAndWeaponMaterials.add(materials);
242 toolAndWeaponResult.add(result);
243 toolAndWeaponSharpless.add(true);
250 * @param materials 素材
252 * @param nbtRecipe NBT(Nullの場合はなし)
254 public void addSharplessMaterialRecipe(ItemStack[] materials, ItemStack result, ChemicalNBTRecipe nbtRecipe){
255 materialRecipe.add(new MaterialRecipe(result, materials, nbtRecipe, true));
262 * @param materials 素材
264 * @param nbtRecipe NBT(Nullの場合はなし)
266 public void addMaterialRecipe(ItemStack[] materials, ItemStack result, ChemicalNBTRecipe nbtRecipe){
267 materialRecipe.add(new MaterialRecipe(result, materials, nbtRecipe, false));
275 * @param size 一度に生成される量
276 * @param frequency 生成頻度
279 public void addAtomsOre(String par1Name, int par2Id, int par3Size, int par4Frequency, int par5PosY){
280 atomsOres.add(new WorldGenAtomsOre(par2Id, getAtomsOreMetaOfIndex(), par3Size, par4Frequency, par5PosY));
281 addAtomsOreLanguage(par1Name, par1Name, "en_US");
286 * 既に登録した鉱石の新しい名前・言語を追加します
287 * @param par1Name 英語名
288 * @param par2NewName 新しい名前
289 * @param par3Language 言語
291 public void addAtomsOreLanguage(String par1Name, String par2NewName, String par3Language){
292 atomsOreNameListHash.add(par1Name, par2NewName);
293 atomsOreLangListHash.add(par1Name, par3Language);
297 //以下システム関連//////////////////////////////////////////////////////
299 public ArrayList<ICompoundHandler> getCompoundHandler(){
300 compoundHandlers.trimToSize();
301 return compoundHandlers;
307 public ArrayList<String> getCompoundHandlerItemName(){
308 compoundHandlerItemNames.trimToSize();
309 return compoundHandlerItemNames;
314 public ListHash<String, String> getCompoundsName(){
315 return compoundsNameListHash;
320 public ListHash<String, String> getCompoundsLang(){
321 return compoundsLangListHash;
326 public ArrayList<String[]> getChemicalCombinationAtoms(){
327 return chemicalCombinationAtoms;
332 public ArrayList<Integer[]> getChemicalCombinationAmounts(){
333 return chemicalCombinationAmounts;
338 public ArrayList<ItemStack> getChemicalCombinationResult(){
339 return chemicalCombinationResult;
344 public ArrayList<MaterialRecipe> getMaterialRecipe(){
345 return materialRecipe;
350 public ArrayList<ItemStack[]> getToolAndWeaponMaterials() {
351 return toolAndWeaponMaterials;
356 public ArrayList<ItemStack> getToolAndWeaponResult() {
357 return toolAndWeaponResult;
362 public ArrayList<Boolean> getToolAndWeaponSharpless() {
363 return toolAndWeaponSharpless;
368 public ChemiCraftCraftingManager getCraftingManager(){
369 return chemiCraftCraftingManager;
374 public ListHash<String, String> getAtomsOreNameListHash(){
375 return atomsOreNameListHash;
380 public ListHash<String, String> getAtomsOreLangListHash(){
381 return atomsOreLangListHash;
386 public int getAtomsOreIndex(){
387 return atomsOreNameListHash.sizeKeysList() / 16;
392 public int getAtomsOreMetaOfIndex(){
393 return atomsOreNameListHash.sizeKeysList() - getAtomsOreIndex() * 16;
398 public ArrayList<WorldGenAtomsOre> getAtomsOres(){
404 public static ChemiCraftAPI instance(){