1 package pcc.chemicraft.core;
3 import java.util.ArrayList;
4 import java.util.Arrays;
5 import java.util.HashMap;
7 import net.minecraft.item.Item;
8 import net.minecraft.item.ItemStack;
9 import pcc.chemicraft.ChemiCraftData;
10 import pcc.chemicraft.EnumLoggingType;
11 import pcc.chemicraft.core.nbt.ChemicalNBTRecipe;
12 import pcc.chemicraft.core.system.ChemiCraftCraftingManager;
13 import pcc.chemicraft.util.Formula;
14 import pcc.chemicraft.util.ICompoundHandler;
15 import pcc.chemicraft.util.ListHash;
16 import pcc.chemicraft.util.MaterialRecipe;
20 * ChemiCraftのAPIを提供するクラスです<br>
21 * ChemiCraftのAPIを作成する場合はこのクラスを使用します<br>
25 public class ChemiCraftAPI {
30 private static ChemiCraftAPI instance = new ChemiCraftAPI();
37 public static ChemiCraftAPI instance(){
45 private ArrayList<Integer[]> chemicalCombinationAmounts = new ArrayList<Integer[]>();
51 private ArrayList<String[]> chemicalCombinationAtoms = new ArrayList<String[]>();
57 private ArrayList<ItemStack> chemicalCombinationResult = new ArrayList<ItemStack>();
61 * ChemiCraftの化学作業台類のレシピのマネージャー
63 private ChemiCraftCraftingManager chemiCraftCraftingManager = new ChemiCraftCraftingManager();
67 * List of item name of handler to compounds.
69 private ArrayList<String> compoundHandlerItemNames = new ArrayList<String>();
73 * List of compounds handlers.
75 private ArrayList<ICompoundHandler> compoundHandlers = new ArrayList<ICompoundHandler>();
79 * 化合物の文字列をダメージ値に変換します。
81 private HashMap<String, Integer> compoundHash = new HashMap<String, Integer>();
85 * List of compounds names.
87 private ListHash<String, String> compoundsNameListHash = new ListHash<String, String>();
93 private HashMap<ItemStack, Integer> electrolysisFuelList = new HashMap<ItemStack, Integer>();
99 private HashMap<ItemStack, ItemStack[]> electrolysisRecipeList = new HashMap<ItemStack, ItemStack[]>();
105 private ArrayList<MaterialRecipe> materialRecipe = new ArrayList<MaterialRecipe>();
111 private HashMap<ItemStack, Integer> pyrolysisFuelList = new HashMap<ItemStack, Integer>();
117 private HashMap<ItemStack, ItemStack[]> pyrolysisRecipeList = new HashMap<ItemStack, ItemStack[]>();
123 private ArrayList<ItemStack[]> toolAndWeaponMaterials = new ArrayList<ItemStack[]>();
129 private ArrayList<ItemStack> toolAndWeaponResult = new ArrayList<ItemStack>();
135 private ArrayList<Boolean> toolAndWeaponSharpless = new ArrayList<Boolean>();
140 * 化合レシピを追加します。materialの要素数は0<= n <= 16にしてください。
144 public void addChemicalCombinationRecipe(ItemStack result, Formula formula){
145 ChemiCraftCore.logger.write("addChemicalCombinationRecipe:" + "Result-" + result.getItemName() + "/Material-" + formula.getAtoms().toString()
146 , EnumLoggingType.INFO);
147 chemicalCombinationAtoms.add(formula.getAtoms());
148 chemicalCombinationAmounts.add(formula.getAmonts());
149 chemicalCombinationResult.add(result);
158 public void addCompound(String name){
159 ChemiCraftCore.logger.write("addCompound:" + name
160 , EnumLoggingType.INFO);
161 compoundsNameListHash.add("en_US", name);
162 compoundHash.put(name, compoundHash.size());
167 * 既に登録された化合物に対して別の言語をを追加します
169 * @param englishName 英語名
170 * @param langName 別言語への名前
172 public void addCompound(String lang, String englishName, String langName){
173 ChemiCraftCore.logger.write("addCompound(MultiLang):" + "lang-" + lang + "/name-" + englishName + "/langToName-" + langName
174 , EnumLoggingType.INFO);
175 addCompound(englishName);
176 addCompoundLanguage(lang, langName);
182 * 単体で使用すると異常が発生するため、API以外での使用を固く非推奨する
184 * @param langName 言語への名前
187 private void addCompoundLanguage(String lang, String langName){
188 compoundsNameListHash.add(
198 * @param formula 化学式(結果)
200 public void addElectrolysisDecompositionRecipe(ItemStack material, Formula formula) {
201 ChemiCraftCore.logger.write("addElectrolysisRecipe:" + "Material-" + material.getItemName() + "/Result-" + formula.getAtoms().toString(),
202 EnumLoggingType.INFO);
204 ItemStack[] itemstacks =
205 new ItemStack[formula.getAtoms().length];
206 for (int i = 0; i < itemstacks.length; i++) {
209 ChemiCraftCore.instance.itemAtoms,
210 formula.getAmonts()[i],
211 ChemiCraftData.toAtoms(formula.getAtoms()[i]));
213 this.electrolysisRecipeList.put(
222 * @param material 素材 (すべて結果は同じになります)
223 * @param formula 化学式(結果)
225 public void addElectrolysisDecompositionRecipe(ArrayList<ItemStack> material, Formula formula) {
226 for (ItemStack item : material) {
228 addElectrolysisDecompositionRecipe(item, formula);
238 * @param formula 化学式(結果)
240 public void addPyrolysisDecompositionRecipe(ItemStack material, Formula formula) {
241 ChemiCraftCore.logger.write("addPyrolysisRecipe:" + "Material-" + material.getItemName() + "/Result-" + formula.getAtoms().toString(),
242 EnumLoggingType.INFO);
244 ItemStack[] itemstacks =
245 new ItemStack[formula.getAtoms().length];
246 for (int i = 0; i < itemstacks.length; i++) {
249 ChemiCraftCore.instance.itemAtoms,
250 formula.getAmonts()[i],
251 ChemiCraftData.toAtoms(formula.getAtoms()[i]));
253 this.pyrolysisRecipeList.put(
262 * @param material 素材 (すべて結果は同じになります)
263 * @param formula 化学式(結果)
265 public void addPyrolysisDecompositionRecipe(ArrayList<ItemStack> material, Formula formula) {
266 for (ItemStack item : material) {
268 addPyrolysisDecompositionRecipe(item, formula);
277 * 化合,熱分解,電気分解ができるレシピを追加します
278 * @param materialAndResult 素材(分解)と結果(化合)
279 * @param formula 化学式(分解なら結果に。化合なら素材に)
281 public void addReversible(ItemStack materialAndResult, Formula formula){
282 addChemicalCombinationRecipe(materialAndResult, formula);
283 addPyrolysisDecompositionRecipe(materialAndResult, formula);
284 addElectrolysisDecompositionRecipe(materialAndResult, formula);
290 * 化合,電気分解ができるレシピを追加します
291 * @param materialAndResult 素材(分解)と結果(化合)
292 * @param formula 化学式(分解なら結果に。化合なら素材に)
294 public void addReversibleOfElectrolysis(ItemStack result, Formula formula){
295 addChemicalCombinationRecipe(result, formula);
296 addElectrolysisDecompositionRecipe(result, formula);
302 * 化合,熱分解ができるレシピを追加します
303 * @param materialAndResult 素材(分解)と結果(化合)
304 * @param formula 化学式(分解なら結果に。化合なら素材に)
306 public void addReversibleOfPyrolysis(ItemStack result, Formula formula){
307 addChemicalCombinationRecipe(result, formula);
308 addPyrolysisDecompositionRecipe(result, formula);
315 * @param itemstack 燃料のItemStack
316 * @param burnTime 燃焼時間(tick * rate)
318 public void addElectrolysisDecompositionFuel(ItemStack itemstack, int burnTime) {
319 ChemiCraftCore.logger.write("addElectrolysisFuel:" + "Fuel-" + itemstack.getItemName() + "/BurnTime-" + burnTime,
320 EnumLoggingType.INFO);
322 this.electrolysisFuelList.put(
331 * @param itemstack 燃料のItemStack
332 * @param burnTime 燃焼時間(tick * rate)
334 public void addPyrolysisDecompositionFuel(ItemStack itemstack, int burnTime) {
335 ChemiCraftCore.logger.write("addPyrolysisFuel:" + "Fuel-" + itemstack.getItemName() + "/BurnTime-" + burnTime,
336 EnumLoggingType.INFO);
338 this.pyrolysisFuelList.put(
347 * @param materials 素材
349 * @param nbtRecipe NBT(Nullの場合はなし)
351 public void addMaterialRecipe(ItemStack[] materials, ItemStack result, ChemicalNBTRecipe nbtRecipe){
352 ChemiCraftCore.logger.write("addMaterialRecipe:" + "Materials-" + materials.toString() + "/Result-" + result.getItemName() + "/NBT-" + nbtRecipe,
353 EnumLoggingType.INFO);
367 * @param materials 素材
369 * @param nbtRecipe NBT(Nullの場合はなし)
371 public void addSharplessMaterialRecipe(ItemStack[] materials, ItemStack result, ChemicalNBTRecipe nbtRecipe){
372 ChemiCraftCore.logger.write("addMaterialRecipe:" + "Materials-" + materials.toString() + "/Result-" + result.getItemName() + "/NBT-" + nbtRecipe,
373 EnumLoggingType.INFO);
386 * 化合物のハンドラーを設定します。<br>
387 * CompoundHandlerを実装したクラスをcompoundHandlerに入れることによってhandlerItemNameで指定した<br>
388 * 化合物にハンドラーをつけることができます。
389 * @param handlerItemName ハンドラーをつける化合物の英語名
390 * @param compoundHandler ハンドラー
392 public void settingCompoundHandler(String handlerItemName, ICompoundHandler compoundHandler){
393 ChemiCraftCore.logger.write("settingCompoundHandler:" + "Name-" + handlerItemName + "/CompoundHandler-" + compoundHandler,
394 EnumLoggingType.INFO);
396 compoundHandlers.add(compoundHandler);
397 compoundHandlerItemNames.add(handlerItemName);
403 * ツール&武器作成台のレシピを追加します<br>
405 * @param materials 素材
409 public void addToolAndWeaponRecipe(ItemStack[] materials, ItemStack result) {
410 toolAndWeaponMaterials.add(materials);
411 toolAndWeaponResult.add(result);
412 toolAndWeaponSharpless.add(false);
418 * ツール&武器作成台の不定形レシピを追加します<br>
420 * @param materials 素材
424 public void addSharplessToolAndWeaponRecipe(ItemStack[] materials, ItemStack result) {
425 toolAndWeaponMaterials.add(materials);
426 toolAndWeaponResult.add(result);
427 toolAndWeaponSharpless.add(true);
432 //以下システム関連//////////////////////////////////////////////////////
434 public ArrayList<Integer[]> getChemicalCombinationAmounts() {
435 return chemicalCombinationAmounts;
440 public ArrayList<String[]> getChemicalCombinationAtoms() {
441 return chemicalCombinationAtoms;
446 public ArrayList<ItemStack> getChemicalCombinationResult() {
447 return chemicalCombinationResult;
452 public int getCompound(String key) {
453 if (compoundHash.get(key) != null) {
454 return compoundHash.get(key);
462 public ArrayList<ICompoundHandler> getCompoundHandler() {
463 compoundHandlers.trimToSize();
464 return compoundHandlers;
469 public ArrayList<String> getCompoundHandlerItemName() {
470 compoundHandlerItemNames.trimToSize();
471 return compoundHandlerItemNames;
476 public ListHash<String, String> getCompoundsName() {
477 return compoundsNameListHash;
482 public ChemiCraftCraftingManager getCraftingManager() {
483 return chemiCraftCraftingManager;
488 public HashMap<ItemStack, Integer> getElectrolysisFuelList() {
489 return electrolysisFuelList;
494 public HashMap<ItemStack, ItemStack[]> getElectrolysisRecipeList() {
495 return electrolysisRecipeList;
500 public ArrayList<MaterialRecipe> getMaterialRecipe() {
501 return materialRecipe;
506 public HashMap<ItemStack, Integer> getPyrolysisFuelList() {
507 return pyrolysisFuelList;
512 public HashMap<ItemStack, ItemStack[]> getPyrolysisRecipeList() {
513 return pyrolysisRecipeList;
518 public ArrayList<ItemStack[]> getToolAndWeaponMaterials() {
519 return toolAndWeaponMaterials;
524 public ArrayList<ItemStack> getToolAndWeaponResult() {
525 return toolAndWeaponResult;
530 public ArrayList<Boolean> getToolAndWeaponSharpless() {
531 return toolAndWeaponSharpless;