No need for these to be maps

This commit is contained in:
Nicholas Ignoffo 2017-09-07 22:31:59 -07:00
parent 4a47f5cbdc
commit 4c44c871e7
3 changed files with 41 additions and 36 deletions

View file

@ -7,9 +7,7 @@ import WayofTime.bloodmagic.api_impl.recipe.RecipeTartaricForge;
import WayofTime.bloodmagic.apiv2.IBloodMagicRecipeRegistrar; import WayofTime.bloodmagic.apiv2.IBloodMagicRecipeRegistrar;
import WayofTime.bloodmagic.core.recipe.IngredientBloodOrb; import WayofTime.bloodmagic.core.recipe.IngredientBloodOrb;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.*;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.Ingredient; import net.minecraft.item.crafting.Ingredient;
import net.minecraft.util.NonNullList; import net.minecraft.util.NonNullList;
@ -20,17 +18,18 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar { public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar {
private final Map<Ingredient, RecipeBloodAltar> altarRecipes; private final Set<RecipeBloodAltar> altarRecipes;
private final Map<List<Ingredient>, RecipeAlchemyTable> alchemyRecipes; private final Set<RecipeAlchemyTable> alchemyRecipes;
private final Map<List<Ingredient>, RecipeTartaricForge> tartaricForgeRecipes; private final Set<RecipeTartaricForge> tartaricForgeRecipes;
public BloodMagicRecipeRegistrar() { public BloodMagicRecipeRegistrar() {
this.altarRecipes = Maps.newHashMap(); this.altarRecipes = Sets.newHashSet();
this.alchemyRecipes = Maps.newHashMap(); this.alchemyRecipes = Sets.newHashSet();
this.tartaricForgeRecipes = Maps.newHashMap(); this.tartaricForgeRecipes = Sets.newHashSet();
} }
@Override @Override
@ -42,7 +41,7 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar {
Preconditions.checkArgument(consumeRate >= 0, "consumeRate cannot be negative."); Preconditions.checkArgument(consumeRate >= 0, "consumeRate cannot be negative.");
Preconditions.checkArgument(drainRate >= 0, "drainRate cannot be negative."); Preconditions.checkArgument(drainRate >= 0, "drainRate cannot be negative.");
altarRecipes.put(input, new RecipeBloodAltar(input, output, minimumTier, syphon, consumeRate, drainRate)); altarRecipes.add(new RecipeBloodAltar(input, output, minimumTier, syphon, consumeRate, drainRate));
} }
@Override @Override
@ -54,7 +53,7 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar {
Preconditions.checkNotNull(input, "input cannot be null."); Preconditions.checkNotNull(input, "input cannot be null.");
NonNullList<Ingredient> inputs = NonNullList.from(Ingredient.EMPTY, input); NonNullList<Ingredient> inputs = NonNullList.from(Ingredient.EMPTY, input);
alchemyRecipes.put(inputs, new RecipeAlchemyTable(inputs, output, syphon, ticks, minimumTier)); alchemyRecipes.add(new RecipeAlchemyTable(inputs, output, syphon, ticks, minimumTier));
} }
@Override @Override
@ -65,7 +64,7 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar {
Preconditions.checkNotNull(input, "input cannot be null."); Preconditions.checkNotNull(input, "input cannot be null.");
NonNullList<Ingredient> inputs = NonNullList.from(Ingredient.EMPTY, input); NonNullList<Ingredient> inputs = NonNullList.from(Ingredient.EMPTY, input);
tartaricForgeRecipes.put(inputs, new RecipeTartaricForge(inputs, output, minimumSouls, soulDrain)); tartaricForgeRecipes.add(new RecipeTartaricForge(inputs, output, minimumSouls, soulDrain));
} }
public void addTartaricForge(@Nonnull ItemStack output, @Nonnegative double minimumSouls, @Nonnegative double soulDrain, @Nonnull Object... input) { public void addTartaricForge(@Nonnull ItemStack output, @Nonnegative double minimumSouls, @Nonnegative double soulDrain, @Nonnull Object... input) {
@ -90,10 +89,12 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar {
@Nullable @Nullable
public RecipeBloodAltar getBloodAltar(@Nonnull ItemStack input) { public RecipeBloodAltar getBloodAltar(@Nonnull ItemStack input) {
Preconditions.checkNotNull(input, "input cannot be null."); Preconditions.checkNotNull(input, "input cannot be null.");
if (input.isEmpty())
return null;
for (Map.Entry<Ingredient, RecipeBloodAltar> entry : altarRecipes.entrySet()) for (RecipeBloodAltar recipe : altarRecipes)
if (entry.getKey().test(input)) if (recipe.getInput().test(input))
return entry.getValue(); return recipe;
return null; return null;
} }
@ -101,19 +102,21 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar {
@Nullable @Nullable
public RecipeAlchemyTable getAlchemyTable(@Nonnull List<ItemStack> input) { public RecipeAlchemyTable getAlchemyTable(@Nonnull List<ItemStack> input) {
Preconditions.checkNotNull(input, "input cannot be null."); Preconditions.checkNotNull(input, "input cannot be null.");
if (input.isEmpty())
return null;
mainLoop: mainLoop:
for (Map.Entry<List<Ingredient>, RecipeAlchemyTable> entry : alchemyRecipes.entrySet()) { for (RecipeAlchemyTable recipe : alchemyRecipes) {
if (entry.getKey().size() != input.size()) if (recipe.getInput().size() != input.size())
continue; continue;
for (int i = 0; i > input.size(); i++) { for (int i = 0; i < input.size(); i++) {
Ingredient ingredient = entry.getKey().get(i); Ingredient ingredient = recipe.getInput().get(i);
if (!ingredient.apply(input.get(i))) if (!ingredient.apply(input.get(i)))
continue mainLoop; continue mainLoop;
} }
return entry.getValue(); return recipe;
} }
return null; return null;
@ -122,33 +125,35 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar {
@Nullable @Nullable
public RecipeTartaricForge getTartaricForge(@Nonnull List<ItemStack> input) { public RecipeTartaricForge getTartaricForge(@Nonnull List<ItemStack> input) {
Preconditions.checkNotNull(input, "input cannot be null."); Preconditions.checkNotNull(input, "input cannot be null.");
if (input.isEmpty())
return null;
mainLoop: mainLoop:
for (Map.Entry<List<Ingredient>, RecipeTartaricForge> entry : tartaricForgeRecipes.entrySet()) { for (RecipeTartaricForge recipe : tartaricForgeRecipes) {
if (entry.getKey().size() != input.size()) if (recipe.getInput().size() != input.size())
continue; continue;
for (int i = 0; i > input.size(); i++) { for (int i = 0; i < input.size(); i++) {
Ingredient ingredient = entry.getKey().get(i); Ingredient ingredient = recipe.getInput().get(i);
if (!ingredient.apply(input.get(i))) if (!ingredient.apply(input.get(i)))
continue mainLoop; continue mainLoop;
} }
return entry.getValue(); return recipe;
} }
return null; return null;
} }
public Map<Ingredient, RecipeBloodAltar> getAltarRecipes() { public Set<RecipeBloodAltar> getAltarRecipes() {
return ImmutableMap.copyOf(altarRecipes); return ImmutableSet.copyOf(altarRecipes);
} }
public Map<List<Ingredient>, RecipeAlchemyTable> getAlchemyRecipes() { public Set<RecipeAlchemyTable> getAlchemyRecipes() {
return ImmutableMap.copyOf(alchemyRecipes); return ImmutableSet.copyOf(alchemyRecipes);
} }
public Map<List<Ingredient>, RecipeTartaricForge> getTartaricForgeRecipes() { public Set<RecipeTartaricForge> getTartaricForgeRecipes() {
return ImmutableMap.copyOf(tartaricForgeRecipes); return ImmutableSet.copyOf(tartaricForgeRecipes);
} }
} }

View file

@ -22,7 +22,7 @@ public class BookUtils {
@Nullable @Nullable
public static PageAltarRecipe getAltarPage(ItemStack output) { public static PageAltarRecipe getAltarPage(ItemStack output) {
for (RecipeBloodAltar recipe : BloodMagicAPI.INSTANCE.getRecipeRegistrar().getAltarRecipes().values()) for (RecipeBloodAltar recipe : BloodMagicAPI.INSTANCE.getRecipeRegistrar().getAltarRecipes())
if (ItemStack.areItemStacksEqualUsingNBTShareTag(output, recipe.getOutput())) if (ItemStack.areItemStacksEqualUsingNBTShareTag(output, recipe.getOutput()))
return new PageAltarRecipe(recipe); return new PageAltarRecipe(recipe);
@ -31,7 +31,7 @@ public class BookUtils {
@Nullable @Nullable
public static PageTartaricForgeRecipe getForgePage(ItemStack output) { public static PageTartaricForgeRecipe getForgePage(ItemStack output) {
for (RecipeTartaricForge recipe : BloodMagicAPI.INSTANCE.getRecipeRegistrar().getTartaricForgeRecipes().values()) for (RecipeTartaricForge recipe : BloodMagicAPI.INSTANCE.getRecipeRegistrar().getTartaricForgeRecipes())
if (ItemStack.areItemStacksEqualUsingNBTShareTag(output, recipe.getOutput())) if (ItemStack.areItemStacksEqualUsingNBTShareTag(output, recipe.getOutput()))
return new PageTartaricForgeRecipe(recipe); return new PageTartaricForgeRecipe(recipe);

View file

@ -46,9 +46,9 @@ public class BloodMagicJEIPlugin implements IModPlugin {
new ArmourDowngradeRecipeHandler() new ArmourDowngradeRecipeHandler()
); );
registry.addRecipes(BloodMagicAPI.INSTANCE.getRecipeRegistrar().getAltarRecipes().values(), Constants.Compat.JEI_CATEGORY_ALTAR); registry.addRecipes(BloodMagicAPI.INSTANCE.getRecipeRegistrar().getAltarRecipes(), Constants.Compat.JEI_CATEGORY_ALTAR);
registry.addRecipes(BloodMagicAPI.INSTANCE.getRecipeRegistrar().getAlchemyRecipes().values(), Constants.Compat.JEI_CATEGORY_ALCHEMYTABLE); registry.addRecipes(BloodMagicAPI.INSTANCE.getRecipeRegistrar().getAlchemyRecipes(), Constants.Compat.JEI_CATEGORY_ALCHEMYTABLE);
registry.addRecipes(BloodMagicAPI.INSTANCE.getRecipeRegistrar().getTartaricForgeRecipes().values(), Constants.Compat.JEI_CATEGORY_SOULFORGE); registry.addRecipes(BloodMagicAPI.INSTANCE.getRecipeRegistrar().getTartaricForgeRecipes(), Constants.Compat.JEI_CATEGORY_SOULFORGE);
registry.handleRecipes(RecipeBloodAltar.class, AltarRecipeJEI::new, Constants.Compat.JEI_CATEGORY_ALTAR); registry.handleRecipes(RecipeBloodAltar.class, AltarRecipeJEI::new, Constants.Compat.JEI_CATEGORY_ALTAR);
registry.handleRecipes(RecipeAlchemyTable.class, AlchemyTableRecipeJEI::new, Constants.Compat.JEI_CATEGORY_ALCHEMYTABLE); registry.handleRecipes(RecipeAlchemyTable.class, AlchemyTableRecipeJEI::new, Constants.Compat.JEI_CATEGORY_ALCHEMYTABLE);