ActuallyAdditions/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java

141 lines
5.3 KiB
Java
Raw Normal View History

2016-01-05 04:47:35 +01:00
/*
2016-05-16 22:52:27 +02:00
* This file ("CrusherRecipeRegistry.java") is part of the Actually Additions mod for Minecraft.
2016-01-05 04:47:35 +01:00
* It is created and owned by Ellpeck and distributed
* under the Actually Additions License to be found at
2016-05-16 22:52:27 +02:00
* http://ellpeck.de/actaddlicense
2016-01-05 04:47:35 +01:00
* View the source code at https://github.com/Ellpeck/ActuallyAdditions
*
2016-05-16 22:54:42 +02:00
* © 2015-2016 Ellpeck
2016-01-05 04:47:35 +01:00
*/
package de.ellpeck.actuallyadditions.mod.recipe;
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
import de.ellpeck.actuallyadditions.api.recipe.CrusherRecipe;
import de.ellpeck.actuallyadditions.mod.config.values.ConfigStringListValues;
2016-01-05 04:47:35 +01:00
import de.ellpeck.actuallyadditions.mod.util.ItemUtil;
import de.ellpeck.actuallyadditions.mod.util.ModUtil;
import net.minecraft.item.Item;
2016-01-05 04:47:35 +01:00
import net.minecraft.item.ItemStack;
import net.minecraftforge.oredict.OreDictionary;
import java.util.ArrayList;
2016-06-17 23:50:38 +02:00
public final class CrusherRecipeRegistry{
2016-01-05 04:47:35 +01:00
public static final ArrayList<SearchCase> SEARCH_CASES = new ArrayList<SearchCase>();
2016-01-05 04:47:35 +01:00
public static void registerFinally(){
ArrayList<String> oresNoResult = new ArrayList<String>();
2016-05-19 20:05:12 +02:00
int recipeStartedAt = ActuallyAdditionsAPI.CRUSHER_RECIPES.size();
2016-01-05 04:47:35 +01:00
for(String ore : OreDictionary.getOreNames()){
if(!hasException(ore)){
for(SearchCase theCase : SEARCH_CASES){
2016-01-05 04:47:35 +01:00
if(ore.length() > theCase.theCase.length()){
if(ore.substring(0, theCase.theCase.length()).equals(theCase.theCase)){
String output = theCase.resultPreString+ore.substring(theCase.theCase.length());
if(!ActuallyAdditionsAPI.addCrusherRecipes(OreDictionary.getOres(ore, false), OreDictionary.getOres(output, false), theCase.resultAmount, null, 0, 0)){
oresNoResult.add(ore);
2016-01-05 04:47:35 +01:00
}
}
}
}
}
}
ArrayList<String> addedRecipes = new ArrayList<String>();
2016-05-19 20:05:12 +02:00
for(int i = recipeStartedAt; i < ActuallyAdditionsAPI.CRUSHER_RECIPES.size(); i++){
CrusherRecipe recipe = ActuallyAdditionsAPI.CRUSHER_RECIPES.get(i);
addedRecipes.add(recipe.inputStack+" -> "+recipe.outputOneStack);
2016-01-05 04:47:35 +01:00
}
ModUtil.LOGGER.info("Added "+addedRecipes.size()+" Crusher Recipes automatically: "+addedRecipes.toString());
ModUtil.LOGGER.warn("Couldn't add "+oresNoResult.size()+" Crusher Recipes automatically, either because the inputs were missing outputs, or because they exist already: "+oresNoResult.toString());
2016-01-05 04:47:35 +01:00
}
public static boolean hasBlacklistedOutput(ItemStack output){
if(output != null){
Item item = output.getItem();
if(item != null){
String reg = item.getRegistryName().toString();
for(String conf : ConfigStringListValues.CRUSHER_OUTPUT_BLACKLIST.getValue()){
String confReg = conf;
int meta = 0;
if(conf.contains("@")){
try{
String[] split = conf.split("@");
confReg = split[0];
meta = Integer.parseInt(split[1]);
}
catch(Exception e){
ModUtil.LOGGER.warn("A config option appears to be incorrect: The Crusher Output Blacklist entry "+conf+" can't be parsed!");
}
}
if(reg.equals(confReg) && output.getItemDamage() == meta){
return true;
}
}
return false;
}
}
return true;
}
2016-01-05 04:47:35 +01:00
private static boolean hasException(String ore){
for(String conf : ConfigStringListValues.CRUSHER_RECIPE_EXCEPTIONS.getValue()){
2016-01-05 04:47:35 +01:00
if(conf.equals(ore)){
return true;
}
}
return false;
}
public static ItemStack getOutputOnes(ItemStack input){
2016-01-05 04:47:35 +01:00
CrusherRecipe recipe = getRecipeFromInput(input);
return recipe == null ? null : recipe.outputOneStack;
2016-01-05 04:47:35 +01:00
}
public static CrusherRecipe getRecipeFromInput(ItemStack input){
2016-05-19 20:05:12 +02:00
for(CrusherRecipe recipe : ActuallyAdditionsAPI.CRUSHER_RECIPES){
if(ItemUtil.areItemsEqual(recipe.inputStack, input, true)){
2016-01-05 04:47:35 +01:00
return recipe;
}
}
return null;
}
public static ItemStack getOutputTwos(ItemStack input){
2016-01-05 04:47:35 +01:00
CrusherRecipe recipe = getRecipeFromInput(input);
return recipe == null ? null : recipe.outputTwoStack;
2016-01-05 04:47:35 +01:00
}
public static int getOutputTwoChance(ItemStack input){
CrusherRecipe recipe = getRecipeFromInput(input);
return recipe == null ? -1 : recipe.outputTwoChance;
}
public static class SearchCase{
2016-05-19 20:05:12 +02:00
final String theCase;
final int resultAmount;
final String resultPreString;
2016-01-05 04:47:35 +01:00
public SearchCase(String theCase, int resultAmount){
this(theCase, resultAmount, "dust");
}
public SearchCase(String theCase, int resultAmount, String resultPreString){
this.theCase = theCase;
this.resultAmount = resultAmount;
this.resultPreString = resultPreString;
}
}
}