Skip to content

Commit

Permalink
Merge pull request #316 from MCTian-mi/recipeMapGroup
Browse files Browse the repository at this point in the history
RecipeMapGroup implementation
  • Loading branch information
bruberu authored Oct 2, 2024
2 parents 4fa8f6b + 626f0e3 commit b22f21b
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 0 deletions.
2 changes: 2 additions & 0 deletions dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -65,4 +65,6 @@ dependencies {
compileOnly rfg.deobf("curse.maven:bubbles-a-baubles-fork-995393:5719448")

compileOnly rfg.deobf("curse.maven:barrels-drums-storage-more-319404:2708193")

api("CraftTweaker2:CraftTweaker2-MC1120-Main:1.12-4.1.20.700")
}
63 changes: 63 additions & 0 deletions src/main/java/supersymmetry/api/recipes/RecipeMapGroup.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package supersymmetry.api.recipes;

import gregtech.api.recipes.Recipe;
import gregtech.api.recipes.RecipeBuilder;
import gregtech.api.recipes.RecipeMap;
import gregtech.api.recipes.builders.SimpleRecipeBuilder;
import gregtech.api.recipes.category.GTRecipeCategory;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import javax.annotation.Nonnull;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;

public class RecipeMapGroup<R extends RecipeBuilder<R>> extends RecipeMap<R> {

protected final RecipeMap<?>[] recipeMaps;

protected RecipeMapGroup(@NotNull String unlocalizedName, int maxInputs, int maxOutputs, int maxFluidInputs, int maxFluidOutputs, @NotNull R defaultRecipeBuilder, boolean isHidden, @NotNull RecipeMap<?>[] recipeMaps) {
super(unlocalizedName, maxInputs, maxOutputs, maxFluidInputs, maxFluidOutputs, defaultRecipeBuilder, isHidden);
this.recipeMaps = recipeMaps;
}

@Nonnull
public static RecipeMapGroup<SimpleRecipeBuilder> create(@NotNull String unlocalizedName, @NotNull RecipeMap<?>... recipeMaps) {
int maxInputs = 0, maxOutputs = 0, maxFluidInputs = 0, maxFluidOutputs = 0;
for (RecipeMap<?> recipeMap : recipeMaps) {
maxInputs = Math.max(maxInputs, recipeMap.getMaxInputs());
maxOutputs = Math.max(maxOutputs, recipeMap.getMaxOutputs());
maxFluidInputs = Math.max(maxFluidInputs, recipeMap.getMaxFluidInputs());
maxFluidOutputs = Math.max(maxFluidOutputs, recipeMap.getMaxFluidOutputs());
}
return new RecipeMapGroup<>(unlocalizedName, maxInputs, maxOutputs, maxFluidInputs, maxFluidOutputs, new SimpleRecipeBuilder(), true, recipeMaps);
}

@Nullable
@Override
public Recipe findRecipe(long voltage, List<ItemStack> inputs, List<FluidStack> fluidInputs, boolean exactVoltage) {
AtomicReference<Recipe> recipe = new AtomicReference<>();
Arrays.stream(recipeMaps)
.parallel()
.map(recipeMap -> recipeMap.findRecipe(voltage, inputs, fluidInputs, exactVoltage))
.filter(java.util.Objects::nonNull)
.findFirst().ifPresent(recipe::set);
return recipe.get();
}

@Nonnull
@Override
public Map<GTRecipeCategory, List<Recipe>> getRecipesByCategory() {
Map<GTRecipeCategory, List<Recipe>> res = new Object2ObjectOpenHashMap<>();
for (RecipeMap<?> recipeMap : recipeMaps) {
res.putAll(recipeMap.getRecipesByCategory());
}
return Collections.unmodifiableMap(res);
}
}

0 comments on commit b22f21b

Please sign in to comment.