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.ItemStack;
8 import pcc.chemicraft.ChemiCraftData;
9 import pcc.chemicraft.EnumLoggingType;
10 import pcc.chemicraft.core.nbt.ChemicalNBTRecipe;
11 import pcc.chemicraft.core.system.ChemiCraftCraftingManager;
12 import pcc.chemicraft.util.Formula;
13 import pcc.chemicraft.util.ICompoundHandler;
14 import pcc.chemicraft.util.ListHash;
15 import pcc.chemicraft.util.MaterialRecipe;
19 * ChemiCraftのAPIを提供するクラスです<br>
20 * ChemiCraftのAPIを作成する場合はこのクラスを使用します<br>
24 public class ChemiCraftAPI {
29 private static ChemiCraftAPI instance = new ChemiCraftAPI();
36 public static ChemiCraftAPI instance(){
44 private static ArrayList<Integer[]> chemicalCombinationAmounts = new ArrayList<Integer[]>();
50 private static ArrayList<String[]> chemicalCombinationAtoms = new ArrayList<String[]>();
56 private static ArrayList<ItemStack> chemicalCombinationResult = new ArrayList<ItemStack>();
60 * ChemiCraftの化学作業台類のレシピのマネージャー
62 private static ChemiCraftCraftingManager chemiCraftCraftingManager = new ChemiCraftCraftingManager();
66 * List of item name of handler to compounds.
68 private static ArrayList<String> compoundHandlerItemNames = new ArrayList<String>();
72 * List of compounds handlers.
74 private static ArrayList<ICompoundHandler> compoundHandlers = new ArrayList<ICompoundHandler>();
78 * 化合物の文字列をダメージ値に変換します。
80 private static HashMap<String, Integer> compoundHash = new HashMap<String, Integer>();
84 * List of compounds names.
86 private static ListHash<String, String> compoundsNameListHash = new ListHash<String, String>();
92 private static HashMap<ItemStack, Integer> electrolysisFuelList = new HashMap<ItemStack, Integer>();
98 private static HashMap<ItemStack, ItemStack[]> electrolysisRecipeList = new HashMap<ItemStack, ItemStack[]>();
104 private static ArrayList<MaterialRecipe> materialRecipe = new ArrayList<MaterialRecipe>();
110 private static HashMap<ItemStack, Integer> pyrolysisFuelList = new HashMap<ItemStack, Integer>();
116 private static HashMap<ItemStack, ItemStack[]> pyrolysisRecipeList = new HashMap<ItemStack, ItemStack[]>();
122 private static ArrayList<ItemStack[]> toolAndWeaponMaterials = new ArrayList<ItemStack[]>();
128 private static ArrayList<ItemStack> toolAndWeaponResult = new ArrayList<ItemStack>();
134 private static ArrayList<Boolean> toolAndWeaponSharpless = new ArrayList<Boolean>();
139 * 化合レシピを追加します。materialの要素数は0<= n <= 16にしてください。
143 public static void addChemicalCombinationRecipe(ItemStack result, Formula formula){
144 ChemiCraftCore.logger.write("addChemicalCombinationRecipe:" + "Result-" + result.getItemName() + "/Material-" + Arrays.toString(formula.getAtoms())
145 , EnumLoggingType.INFO);
146 chemicalCombinationAtoms.add(formula.getAtoms());
147 chemicalCombinationAmounts.add(formula.getAmonts());
148 chemicalCombinationResult.add(result);
157 public static void addCompound(String name){
158 ChemiCraftCore.logger.write("addCompound:" + name
159 , EnumLoggingType.INFO);
160 compoundsNameListHash.add("en_US", name);
161 compoundHash.put(name, compoundHash.size());
166 * 既に登録された化合物に対して別の言語をを追加します
168 * @param englishName 英語名
169 * @param langName 別言語への名前
171 public static void addCompound(String lang, String englishName, String langName){
172 ChemiCraftCore.logger.write("addCompound(MultiLang):" + "lang-" + lang + "/name-" + englishName + "/langToName-" + langName
173 , EnumLoggingType.INFO);
174 addCompound(englishName);
175 addCompoundLanguage(lang, langName);
181 * 単体で使用すると異常が発生するため、API以外での使用を固く非推奨する
183 * @param langName 言語への名前
186 private static void addCompoundLanguage(String lang, String langName){
187 compoundsNameListHash.add(
197 * @param formula 化学式(結果)
199 public static void addElectrolysisDecompositionRecipe(ItemStack material, Formula formula) {
200 ChemiCraftCore.logger.write("addElectrolysisRecipe:" + "Material-" + material.getItemName() + "/Result-" + Arrays.toString(formula.getAtoms()),
201 EnumLoggingType.INFO);
203 ItemStack[] itemstacks =
204 new ItemStack[formula.getAtoms().length];
205 for (int i = 0; i < itemstacks.length; i++) {
208 ChemiCraftCore.instance.itemAtoms,
209 formula.getAmonts()[i],
210 ChemiCraftData.toAtoms(formula.getAtoms()[i]));
212 electrolysisRecipeList.put(
221 * @param material 素材 (すべて結果は同じになります)
222 * @param formula 化学式(結果)
224 public static void addElectrolysisDecompositionRecipe(ArrayList<ItemStack> material, Formula formula) {
225 for (ItemStack item : material) {
227 addElectrolysisDecompositionRecipe(item, formula);
237 * @param formula 化学式(結果)
239 public static void addPyrolysisDecompositionRecipe(ItemStack material, Formula formula) {
240 ChemiCraftCore.logger.write("addPyrolysisRecipe:" + "Material-" + material.getItemName() + "/Result-" + Arrays.toString(formula.getAtoms()),
241 EnumLoggingType.INFO);
243 ItemStack[] itemstacks =
244 new ItemStack[formula.getAtoms().length];
245 for (int i = 0; i < itemstacks.length; i++) {
248 ChemiCraftCore.instance.itemAtoms,
249 formula.getAmonts()[i],
250 ChemiCraftData.toAtoms(formula.getAtoms()[i]));
252 pyrolysisRecipeList.put(
261 * @param material 素材 (すべて結果は同じになります)
262 * @param formula 化学式(結果)
264 public static void addPyrolysisDecompositionRecipe(ArrayList<ItemStack> material, Formula formula) {
265 for (ItemStack item : material) {
267 addPyrolysisDecompositionRecipe(item, formula);
276 * 化合,熱分解,電気分解ができるレシピを追加します
277 * @param materialAndResult 素材(分解)と結果(化合)
278 * @param formula 化学式(分解なら結果に。化合なら素材に)
280 public static void addReversible(ItemStack materialAndResult, Formula formula){
281 addChemicalCombinationRecipe(materialAndResult, formula);
282 addPyrolysisDecompositionRecipe(materialAndResult, formula);
283 addElectrolysisDecompositionRecipe(materialAndResult, formula);
289 * 化合,電気分解ができるレシピを追加します
290 * @param materialAndResult 素材(分解)と結果(化合)
291 * @param formula 化学式(分解なら結果に。化合なら素材に)
293 public static void addReversibleOfElectrolysis(ItemStack result, Formula formula){
294 addChemicalCombinationRecipe(result, formula);
295 addElectrolysisDecompositionRecipe(result, formula);
301 * 化合,熱分解ができるレシピを追加します
302 * @param materialAndResult 素材(分解)と結果(化合)
303 * @param formula 化学式(分解なら結果に。化合なら素材に)
305 public static void addReversibleOfPyrolysis(ItemStack result, Formula formula){
306 addChemicalCombinationRecipe(result, formula);
307 addPyrolysisDecompositionRecipe(result, formula);
314 * @param itemstack 燃料のItemStack
315 * @param burnTime 燃焼時間(tick * rate)
317 public static void addElectrolysisDecompositionFuel(ItemStack itemstack, int burnTime) {
318 ChemiCraftCore.logger.write("addElectrolysisFuel:" + "Fuel-" + itemstack.getItemName() + "/BurnTime-" + burnTime,
319 EnumLoggingType.INFO);
321 electrolysisFuelList.put(
330 * @param itemstack 燃料のItemStack
331 * @param burnTime 燃焼時間(tick * rate)
333 public static void addPyrolysisDecompositionFuel(ItemStack itemstack, int burnTime) {
334 ChemiCraftCore.logger.write("addPyrolysisFuel:" + "Fuel-" + itemstack.getItemName() + "/BurnTime-" + burnTime,
335 EnumLoggingType.INFO);
337 pyrolysisFuelList.put(
346 * @param materials 素材
348 * @param nbtRecipe NBT(Nullの場合はなし)
350 public static void addMaterialRecipe(ItemStack[] materials, ItemStack result, ChemicalNBTRecipe nbtRecipe){
351 ChemiCraftCore.logger.write("addMaterialRecipe:" + "Materials-" + Arrays.toString(materials) + "/Result-" + result.getItemName() + "/NBT-" + nbtRecipe,
352 EnumLoggingType.INFO);
366 * @param materials 素材
368 * @param nbtRecipe NBT(Nullの場合はなし)
370 public static void addSharplessMaterialRecipe(ItemStack[] materials, ItemStack result, ChemicalNBTRecipe nbtRecipe){
371 ChemiCraftCore.logger.write("addMaterialRecipe:" + "Materials-" + Arrays.toString(materials) + "/Result-" + result.getItemName() + "/NBT-" + nbtRecipe,
372 EnumLoggingType.INFO);
385 * 化合物のハンドラーを設定します。<br>
386 * CompoundHandlerを実装したクラスをcompoundHandlerに入れることによってhandlerItemNameで指定した<br>
387 * 化合物にハンドラーをつけることができます。
388 * @param handlerItemName ハンドラーをつける化合物の英語名
389 * @param compoundHandler ハンドラー
391 public static void settingCompoundHandler(String handlerItemName, ICompoundHandler compoundHandler){
392 ChemiCraftCore.logger.write("settingCompoundHandler:" + "Name-" + handlerItemName + "/CompoundHandler-" + compoundHandler,
393 EnumLoggingType.INFO);
395 compoundHandlers.add(compoundHandler);
396 compoundHandlerItemNames.add(handlerItemName);
402 * ツール&武器作成台のレシピを追加します<br>
404 * @param materials 素材
408 public static void addToolAndWeaponRecipe(ItemStack[] materials, ItemStack result) {
409 toolAndWeaponMaterials.add(materials);
410 toolAndWeaponResult.add(result);
411 toolAndWeaponSharpless.add(false);
417 * ツール&武器作成台の不定形レシピを追加します<br>
419 * @param materials 素材
423 public static void addSharplessToolAndWeaponRecipe(ItemStack[] materials, ItemStack result) {
424 toolAndWeaponMaterials.add(materials);
425 toolAndWeaponResult.add(result);
426 toolAndWeaponSharpless.add(true);
431 //以下システム関連//////////////////////////////////////////////////////
433 public static ArrayList<Integer[]> getChemicalCombinationAmounts() {
434 return chemicalCombinationAmounts;
439 public static ArrayList<String[]> getChemicalCombinationAtoms() {
440 return chemicalCombinationAtoms;
445 public static ArrayList<ItemStack> getChemicalCombinationResult() {
446 return chemicalCombinationResult;
451 public static int getCompound(String key) {
452 if (compoundHash.get(key) != null) {
453 return compoundHash.get(key);
461 public static ArrayList<ICompoundHandler> getCompoundHandler() {
462 compoundHandlers.trimToSize();
463 return compoundHandlers;
468 public static ArrayList<String> getCompoundHandlerItemName() {
469 compoundHandlerItemNames.trimToSize();
470 return compoundHandlerItemNames;
475 public static ListHash<String, String> getCompoundsName() {
476 return compoundsNameListHash;
481 public static ChemiCraftCraftingManager getCraftingManager() {
482 return chemiCraftCraftingManager;
487 public static HashMap<ItemStack, Integer> getElectrolysisFuelList() {
488 return electrolysisFuelList;
493 public static HashMap<ItemStack, ItemStack[]> getElectrolysisRecipeList() {
494 return electrolysisRecipeList;
499 public static ArrayList<MaterialRecipe> getMaterialRecipe() {
500 return materialRecipe;
505 public static HashMap<ItemStack, Integer> getPyrolysisFuelList() {
506 return pyrolysisFuelList;
511 public static HashMap<ItemStack, ItemStack[]> getPyrolysisRecipeList() {
512 return pyrolysisRecipeList;
517 public static ArrayList<ItemStack[]> getToolAndWeaponMaterials() {
518 return toolAndWeaponMaterials;
523 public static ArrayList<ItemStack> getToolAndWeaponResult() {
524 return toolAndWeaponResult;
529 public static ArrayList<Boolean> getToolAndWeaponSharpless() {
530 return toolAndWeaponSharpless;