Skip to content

Commit

Permalink
Fix ingredients with subtypes missing from the ingredient list
Browse files Browse the repository at this point in the history
  • Loading branch information
mezz committed Aug 7, 2017
1 parent 9fd1680 commit 6a74708
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 9 deletions.
2 changes: 1 addition & 1 deletion src/main/java/mezz/jei/ingredients/IngredientRegistry.java
Expand Up @@ -163,7 +163,7 @@ public <V> void addIngredientsAtRuntime(Class<V> ingredientClass, List<V> ingred

IIngredientHelper<V> ingredientHelper = getIngredientHelper(ingredientClass);
//noinspection unchecked
Set<V> set = ingredientsMap.computeIfAbsent(ingredientClass, k -> new IngredientSet<>(ingredientHelper));
Set<V> set = ingredientsMap.computeIfAbsent(ingredientClass, k -> IngredientSet.create(ingredientClass, ingredientHelper));
for (V ingredient : ingredients) {
set.add(ingredient);
if (ingredient instanceof ItemStack) {
Expand Down
Expand Up @@ -35,7 +35,7 @@ public IngredientRegistry createIngredientRegistry(IModIdHelper modIdHelper) {
Class ingredientClass = entry.getKey();
Collection ingredients = entry.getValue();
IIngredientHelper ingredientHelper = ingredientHelperMap.get(ingredientClass);
IngredientSet ingredientSet = new IngredientSet<>(ingredientHelper);
IngredientSet ingredientSet = IngredientSet.create(ingredientClass, ingredientHelper);
ingredientSet.addAll(ingredients);
ingredientsMap.put(ingredientClass, ingredientSet);
}
Expand Down
31 changes: 24 additions & 7 deletions src/main/java/mezz/jei/util/IngredientSet.java
@@ -1,39 +1,56 @@
package mezz.jei.util;

import mezz.jei.Internal;
import mezz.jei.api.ingredients.IIngredientHelper;
import mezz.jei.startup.StackHelper;
import net.minecraft.item.ItemStack;

import java.util.AbstractSet;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;

public class IngredientSet<V> extends AbstractSet<V> {
private final IIngredientHelper<V> ingredientHelper;
public static <V> IngredientSet<V> create(Class<V> ingredientClass, IIngredientHelper<V> ingredientHelper) {
final UidGenerator<V> uidGenerator;
if (ingredientClass == ItemStack.class) {
StackHelper stackHelper = Internal.getStackHelper();
uidGenerator = stack -> stackHelper.getUniqueIdentifierForStack((ItemStack) stack, StackHelper.UidMode.FULL);
} else {
uidGenerator = ingredientHelper::getUniqueId;
}
return new IngredientSet<>(uidGenerator);
}

private interface UidGenerator<V> {
String getUniqueId(V ingredient);
}

private final UidGenerator<V> uidGenerator;
private final Map<String, V> ingredients;

public IngredientSet(IIngredientHelper<V> ingredientHelper) {
this.ingredientHelper = ingredientHelper;
private IngredientSet(UidGenerator<V> uidGenerator) {
this.uidGenerator = uidGenerator;
this.ingredients = new LinkedHashMap<>();
}

@Override
public boolean add(V v) {
String uid = ingredientHelper.getUniqueId(v);
String uid = uidGenerator.getUniqueId(v);
return ingredients.put(uid, v) == null;
}

@Override
public boolean remove(Object o) {
//noinspection unchecked
String uid = ingredientHelper.getUniqueId((V) o);
String uid = uidGenerator.getUniqueId((V) o);
return ingredients.remove(uid) != null;
}

@Override
public boolean contains(Object o) {
//noinspection unchecked
String uid = ingredientHelper.getUniqueId((V) o);
String uid = uidGenerator.getUniqueId((V) o);
return ingredients.containsKey(uid);
}

Expand Down

0 comments on commit 6a74708

Please sign in to comment.