Some internal Changes for EMI/Asset LICENSE

This commit is contained in:
Frank 2022-07-29 11:07:46 +02:00
parent e6094754ce
commit 0e8f9f6f8c
8 changed files with 87 additions and 11 deletions

View file

@ -1,5 +1,6 @@
package org.betterx.bclib.integration.emi;
import org.betterx.bclib.BCLib;
import org.betterx.bclib.recipes.AlloyingRecipe;
import net.minecraft.world.Container;
@ -23,8 +24,9 @@ public class EMIAlloyingRecipe extends EMIAbstractAlloyingRecipe<Container, Allo
}
static void addAllRecipes(EmiRegistry emiRegistry, RecipeManager manager) {
for (AlloyingRecipe recipe : manager.getAllRecipesFor(AlloyingRecipe.TYPE)) {
emiRegistry.addRecipe(new EMIAlloyingRecipe(recipe));
}
EMIPlugin.addAllRecipes(
emiRegistry, manager, BCLib.LOGGER,
AlloyingRecipe.TYPE, EMIAlloyingRecipe::new
);
}
}

View file

@ -1,5 +1,6 @@
package org.betterx.bclib.integration.emi;
import org.betterx.bclib.BCLib;
import org.betterx.bclib.recipes.AnvilRecipe;
import net.minecraft.core.Holder;
@ -17,6 +18,7 @@ import dev.emi.emi.api.stack.EmiStack;
import dev.emi.emi.api.widget.WidgetHolder;
import java.util.List;
import java.util.stream.StreamSupport;
import org.jetbrains.annotations.Nullable;
public class EMIAnvilRecipe implements EmiRecipe {
@ -28,7 +30,7 @@ public class EMIAnvilRecipe implements EmiRecipe {
public EMIAnvilRecipe(AnvilRecipe recipe, Item hammer) {
this.id = new ResourceLocation(
"emi",
recipe.getId().getNamespace() + "/" + recipe.getId().getPath() + "/" + hammer.getDescriptionId()
recipe.getId().getNamespace() + "/" + recipe.getId().getPath() + "/anvil/" + hammer.getDescriptionId()
);
this.input = List.of(
EmiIngredient.of(recipe.getMainIngredient(), recipe.getInputCount()),
@ -40,12 +42,15 @@ public class EMIAnvilRecipe implements EmiRecipe {
static void addAllRecipes(EmiRegistry emiRegistry, RecipeManager manager) {
Iterable<Holder<Item>> hammers = AnvilRecipe.getAllHammers();
for (AnvilRecipe recipe : manager.getAllRecipesFor(AnvilRecipe.TYPE)) {
for (Holder<Item> hammer : hammers) {
if (recipe.canUse(hammer.value()))
emiRegistry.addRecipe(new EMIAnvilRecipe(recipe, hammer.value()));
}
}
EMIPlugin.addAllRecipes(
emiRegistry, manager, BCLib.LOGGER,
AnvilRecipe.TYPE,
recipe -> StreamSupport.stream(hammers.spliterator(), false)
.map(Holder::value)
.filter(recipe::canUse)
.toList(),
EMIAnvilRecipe::new
);
}
@Override

View file

@ -3,18 +3,26 @@ package org.betterx.bclib.integration.emi;
import org.betterx.bclib.BCLib;
import org.betterx.bclib.blocks.LeveledAnvilBlock;
import org.betterx.bclib.interfaces.AlloyingRecipeWorkstation;
import org.betterx.worlds.together.util.Logger;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.Container;
import net.minecraft.world.item.crafting.Recipe;
import net.minecraft.world.item.crafting.RecipeManager;
import net.minecraft.world.item.crafting.RecipeType;
import net.minecraft.world.level.block.Blocks;
import dev.emi.emi.api.EmiPlugin;
import dev.emi.emi.api.EmiRegistry;
import dev.emi.emi.api.recipe.EmiRecipe;
import dev.emi.emi.api.recipe.EmiRecipeCategory;
import dev.emi.emi.api.render.EmiTexture;
import dev.emi.emi.api.stack.EmiStack;
import java.util.Comparator;
import java.util.List;
import java.util.function.BiFunction;
import java.util.function.Function;
public class EMIPlugin implements EmiPlugin {
private static boolean didInit = false;
@ -113,6 +121,48 @@ public class EMIPlugin implements EmiPlugin {
}
}
public static <C extends Container, T extends Recipe<C>, E extends EmiRecipe> void addAllRecipes(
EmiRegistry emiRegistry,
RecipeManager manager,
Logger logger,
RecipeType<T> recipeType,
Function<T, E> createRecipe
) {
addAllRecipes(
emiRegistry,
manager,
logger,
recipeType,
(_ignored) -> null,
(recipe, _ignored) -> createRecipe.apply(recipe)
);
}
public static <C extends Container, T extends Recipe<C>, E extends EmiRecipe, V> void addAllRecipes(
EmiRegistry emiRegistry,
RecipeManager manager,
Logger logger,
RecipeType<T> recipeType,
Function<T, List<V>> variantSupplier,
BiFunction<T, V, E> createRecipe
) {
for (T recipe : manager.getAllRecipesFor(recipeType)) {
List<V> variants = variantSupplier.apply(recipe);
if (variants == null) {
emiRegistry.addRecipe(createRecipe.apply(recipe, null));
} else {
for (V variantData : variants) {
try {
emiRegistry.addRecipe(createRecipe.apply(recipe, variantData));
} catch (Exception e) {
logger.error("Exception when parsing vanilla recipe " + recipe.getId(), e);
}
}
}
}
}
static EmiRecipeCategory getAnvilCategoryForLevel(int anvilLevel) {
anvilLevel = Math.max(0, Math.min(ANVIL_CATEGORIES.length - 1, anvilLevel));
return ANVIL_CATEGORIES[anvilLevel];