Removed deprecated Recipe Code

This commit is contained in:
Frank 2023-04-13 18:24:51 +02:00
parent b0a275337d
commit c5a8086eb4
8 changed files with 32 additions and 174 deletions

View file

@ -2,7 +2,6 @@ package org.betterx.bclib.recipes;
import org.betterx.bclib.BCLib;
import org.betterx.bclib.config.Configs;
import org.betterx.bclib.util.CollectionsUtil;
import org.betterx.worlds.together.util.DatapackConfigs;
import net.minecraft.core.Registry;
@ -15,89 +14,17 @@ import net.minecraft.world.item.crafting.Recipe;
import net.minecraft.world.item.crafting.RecipeSerializer;
import net.minecraft.world.item.crafting.RecipeType;
import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import com.google.common.collect.Maps;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import java.util.*;
import java.util.Map.Entry;
import java.util.function.Function;
import java.util.HashSet;
import java.util.Map;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
public class BCLRecipeManager {
private static final Map<?, ? extends Map<?, ?>> _RECIPES = Maps.newHashMap();
private static final Map<?, ? extends List<?>> _SORTED = Maps.newHashMap();
private static final String MINECRAFT = "minecraft";
@SuppressWarnings("unchecked")
private static <C extends Container, T extends Recipe<C>> Map<RecipeType<T>, Map<ResourceLocation, T>> RECIPES() {
return (Map<RecipeType<T>, Map<ResourceLocation, T>>) _RECIPES;
}
@SuppressWarnings("unchecked")
private static <C extends Container, T extends Recipe<C>> Map<RecipeType<T>, List<T>> SORTED() {
return (Map<RecipeType<T>, List<T>>) _SORTED;
}
public static <C extends Container, T extends Recipe<C>> Optional<T> getSortedRecipe(
RecipeType<T> type,
C inventory,
Level level,
Function<RecipeType<T>, Map<ResourceLocation, T>> getter
) {
List<T> recipes = BCLRecipeManager.<C, T>SORTED().computeIfAbsent(type, t -> {
Collection<T> values = getter.apply(type).values();
List<T> list = new ArrayList<>(values);
list.sort((v1, v2) -> {
boolean b1 = v1.getId().getNamespace().equals(MINECRAFT);
boolean b2 = v2.getId().getNamespace().equals(MINECRAFT);
return b1 ^ b2 ? (b1 ? 1 : -1) : v1.getId().compareTo(v2.getId());
});
return list;
});
return recipes.stream().filter(recipe -> recipe.matches(inventory, level)).findFirst();
}
public static <C extends Container, T extends Recipe<C>> Map<RecipeType<T>, Map<ResourceLocation, T>> getMap(
Map<RecipeType<T>, Map<ResourceLocation, T>> recipes
) {
Map<RecipeType<T>, Map<ResourceLocation, T>> result = Maps.newHashMap();
for (RecipeType<T> type : recipes.keySet()) {
Map<ResourceLocation, T> typeList = Maps.newHashMap();
typeList.putAll(recipes.get(type));
result.put(type, typeList);
}
SORTED().clear();
BCLRecipeManager.<C, T>RECIPES().forEach((type, list) -> {
if (list != null) {
Map<ResourceLocation, T> typeList = result.computeIfAbsent(type, i -> Maps.newHashMap());
for (Entry<ResourceLocation, T> entry : list.entrySet()) {
ResourceLocation id = entry.getKey();
typeList.computeIfAbsent(id, i -> entry.getValue());
}
}
});
return result;
}
public static <C extends Container, T extends Recipe<C>> Map<ResourceLocation, T> getMapByName(Map<ResourceLocation, T> recipes) {
Map<ResourceLocation, T> result = CollectionsUtil.getMutable(recipes);
BCLRecipeManager.<C, T>RECIPES().values()
.forEach(map -> map.forEach((location, recipe) -> result.computeIfAbsent(
location,
i -> recipe
)));
return result;
}
public static <C extends Container, S extends RecipeSerializer<T>, T extends Recipe<C>> S registerSerializer(
String modID,
String id,