Skip to content

Commit

Permalink
fixing recipes
Browse files Browse the repository at this point in the history
shapeless and shaped
  • Loading branch information
Faithcaio committed Nov 22, 2023
1 parent d5827bc commit bab4796
Show file tree
Hide file tree
Showing 12 changed files with 155 additions and 148 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
import java.util.Map;
import java.util.function.Function;

public abstract class SpongeRecipeRegistration<R extends Recipe<Container>> implements RecipeRegistration {
public abstract class SpongeRecipeRegistration<R extends Recipe<? extends Container>> implements RecipeRegistration {

protected final ResourceLocation key;
protected final RecipeSerializer<? extends R> serializer;
Expand All @@ -76,14 +76,8 @@ public SpongeRecipeRegistration(final ResourceLocation key,
public static <R extends Recipe<C>, C extends Container> RecipeSerializer<? extends R> determineSerializer(final ItemStack resultStack,
final Function<C, ItemStack> resultFunction,
final Function<net.minecraft.world.inventory.CraftingContainer, NonNullList<ItemStack>> remainingItemsFunction,
final Map<Character, Ingredient> ingredients, final RecipeSerializer<R> vanilla, final RecipeSerializer<? extends R> sponge) {
return SpongeRecipeRegistration.determineSerializer(resultStack, resultFunction, remainingItemsFunction, ingredients.values(), vanilla, sponge);
}

public static <R extends Recipe<C>, C extends Container> RecipeSerializer<? extends R> determineSerializer(final ItemStack resultStack,
final Function<C, ItemStack> resultFunction,
final Function<net.minecraft.world.inventory.CraftingContainer, NonNullList<ItemStack>> remainingItemsFunction,
final Collection<Ingredient> ingredients, final RecipeSerializer<R> vanilla, final RecipeSerializer<? extends R> sponge) {
final Collection<Ingredient> ingredients,
final RecipeSerializer<R> vanilla, final RecipeSerializer<? extends R> sponge) {
if (resultStack.hasTag() || resultFunction != null || remainingItemsFunction != null) {
return sponge;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.crafting.Recipe;
import net.minecraft.world.item.crafting.RecipeSerializer;
import net.minecraft.world.item.crafting.ShapedRecipe;
import net.minecraft.world.item.crafting.ShapelessRecipe;
import net.minecraft.world.item.crafting.StonecutterRecipe;
import org.spongepowered.common.item.recipe.cooking.SpongeBlastingRecipe;
import org.spongepowered.common.item.recipe.cooking.SpongeCampfireCookingRecipe;
Expand All @@ -52,8 +54,8 @@ public interface SpongeRecipeSerializers {
SpongeCookingRecipeSerializer<SpongeBlastingRecipe> SPONGE_BLASTING = register("blasting", new SpongeCookingRecipeSerializer<>(SpongeBlastingRecipe::new, 100));
SpongeCookingRecipeSerializer<SpongeCampfireCookingRecipe> SPONGE_CAMPFIRE_COOKING = register("campfire_cooking", new SpongeCookingRecipeSerializer<>(SpongeCampfireCookingRecipe::new, 100));
SpongeCookingRecipeSerializer<SpongeFurnaceRecipe> SPONGE_SMELTING = register("smelting", new SpongeCookingRecipeSerializer<>(SpongeFurnaceRecipe::new, 200));
RecipeSerializer<?> SPONGE_CRAFTING_SHAPED = register("crafting_shaped", new SpongeShapedCraftingRecipeSerializer());
RecipeSerializer<SpongeShapelessRecipe> SPONGE_CRAFTING_SHAPELESS = register("crafting_shapeless", new SpongeShapelessCraftingRecipeSerializer());
RecipeSerializer<ShapedRecipe> SPONGE_CRAFTING_SHAPED = register("crafting_shaped", new SpongeShapedCraftingRecipeSerializer());
RecipeSerializer<ShapelessRecipe> SPONGE_CRAFTING_SHAPELESS = register("crafting_shapeless", new SpongeShapelessCraftingRecipeSerializer());
RecipeSerializer<SpongeSmithingRecipe> SPONGE_SMITHING = register("smithing", new SpongeSmithingRecipeSerializer<>(SpongeSmithingRecipe::new));
RecipeSerializer<SpongeStonecuttingRecipe> SPONGE_STONECUTTING = register("stonecutting", new SpongeStonecuttingRecipeSerializer<>(SpongeStonecuttingRecipe::new));
SpongeCookingRecipeSerializer<SpongeSmokingRecipe> SPONGE_SMOKING = register("smoking", new SpongeCookingRecipeSerializer<>(SpongeSmokingRecipe::new, 100));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.Container;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.AbstractCookingRecipe;
import net.minecraft.world.item.crafting.BlastingRecipe;
import net.minecraft.world.item.crafting.CampfireCookingRecipe;
import net.minecraft.world.item.crafting.CookingBookCategory;
Expand All @@ -49,7 +50,7 @@
import java.util.List;
import java.util.function.Function;

public class SpongeCookingRecipeRegistration extends SpongeRecipeRegistration implements SpongeRecipeRegistration.ResultFunctionRegistration<Container>{
public class SpongeCookingRecipeRegistration extends SpongeRecipeRegistration<AbstractCookingRecipe> implements SpongeRecipeRegistration.ResultFunctionRegistration<Container>{

// Vanilla Recipe
private final Ingredient ingredient;
Expand All @@ -62,7 +63,7 @@ public class SpongeCookingRecipeRegistration extends SpongeRecipeRegistration im
private final RecipeType<?> type;
private final CookingBookCategory cookingCategory;

public SpongeCookingRecipeRegistration(final ResourceLocation key, final RecipeType<?> type, final RecipeSerializer<?> serializer,
public SpongeCookingRecipeRegistration(final ResourceLocation key, final RecipeType<?> type, final RecipeSerializer<? extends AbstractCookingRecipe> serializer,
final String group, final Ingredient ingredient, final float experience, final Ticks cookingTime,
final ItemStack spongeResult, final Function<Container, ItemStack> resultFunction,
final DataPack<RecipeRegistration> pack, final RecipeCategory category, final CookingBookCategory cookingCategory) {
Expand All @@ -84,7 +85,7 @@ public static SpongeCookingRecipeRegistration of(final ResourceLocation key, fin

var finalCookingTime = cookingTime;

final RecipeSerializer<?> serializer;
final RecipeSerializer<? extends AbstractCookingRecipe> serializer;
if (type == RecipeType.BLASTING) {
if (finalCookingTime == null) {
finalCookingTime = Ticks.of(100);
Expand Down Expand Up @@ -117,27 +118,32 @@ public static SpongeCookingRecipeRegistration of(final ResourceLocation key, fin
public Recipe recipe() {
this.ensureCached();
final int ticksCookingTime = (int) this.cookingTime.ticks();
final String resultFunctionId = this.resultFunction == null ? null : this.key.toString();
if (type == RecipeType.BLASTING) {
if (this.serializer instanceof SpongeCookingRecipeSerializer<?>) {
return (CookingRecipe) new SpongeBlastingRecipe(this.group, this.cookingCategory, this.ingredient, this.spongeResult, this.experience, ticksCookingTime, this.key.toString());
return (CookingRecipe) new SpongeBlastingRecipe(this.group, this.cookingCategory, this.ingredient, this.spongeResult, this.experience, ticksCookingTime,
resultFunctionId);
}
return (CookingRecipe) new BlastingRecipe(this.group, this.cookingCategory, this.ingredient, this.spongeResult, this.experience, ticksCookingTime);
}
if (type == RecipeType.CAMPFIRE_COOKING) {
if (this.serializer instanceof SpongeCookingRecipeSerializer<?>) {
return (CookingRecipe) new SpongeCampfireCookingRecipe(this.group, this.cookingCategory, this.ingredient, this.spongeResult, this.experience, ticksCookingTime, this.key.toString());
return (CookingRecipe) new SpongeCampfireCookingRecipe(this.group, this.cookingCategory, this.ingredient, this.spongeResult, this.experience, ticksCookingTime,
resultFunctionId);
}
return (CookingRecipe) new CampfireCookingRecipe(this.group, this.cookingCategory, this.ingredient, this.spongeResult, this.experience, ticksCookingTime);
}
if (type == RecipeType.SMOKING) {
if (this.serializer instanceof SpongeCookingRecipeSerializer<?>) {
return (CookingRecipe) new SpongeSmokingRecipe(this.group, this.cookingCategory, this.ingredient, this.spongeResult, this.experience, ticksCookingTime, this.key.toString());
return (CookingRecipe) new SpongeSmokingRecipe(this.group, this.cookingCategory, this.ingredient, this.spongeResult, this.experience, ticksCookingTime,
resultFunctionId);
}
return (CookingRecipe) new SmokingRecipe(this.group, this.cookingCategory, this.ingredient, this.spongeResult, this.experience, ticksCookingTime);
}
if (type == RecipeType.SMELTING) {
if (this.serializer instanceof SpongeCookingRecipeSerializer<?>) {
return (CookingRecipe) new SpongeFurnaceRecipe(this.group, this.cookingCategory, this.ingredient, this.spongeResult, this.experience, ticksCookingTime, this.key.toString());
return (CookingRecipe) new SpongeFurnaceRecipe(this.group, this.cookingCategory, this.ingredient, this.spongeResult, this.experience, ticksCookingTime,
resultFunctionId);
}
return (CookingRecipe) new SmeltingRecipe(this.group, this.cookingCategory, this.ingredient, this.spongeResult, this.experience, ticksCookingTime);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@
import net.minecraft.core.NonNullList;
import net.minecraft.data.recipes.RecipeCategory;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.crafting.RecipeSerializer;
import net.minecraft.world.item.crafting.CraftingBookCategory;
import net.minecraft.world.item.crafting.ShapedRecipePattern;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.spongepowered.api.datapack.DataPack;
import org.spongepowered.api.datapack.DataPacks;
Expand All @@ -43,8 +44,6 @@
import org.spongepowered.api.item.recipe.crafting.Ingredient;
import org.spongepowered.api.item.recipe.crafting.ShapedCraftingRecipe;
import org.spongepowered.common.inventory.util.InventoryUtil;
import org.spongepowered.common.item.recipe.SpongeRecipeRegistration;
import org.spongepowered.common.item.recipe.SpongeRecipeSerializers;
import org.spongepowered.common.item.recipe.ingredient.IngredientUtil;
import org.spongepowered.common.item.util.ItemStackUtil;
import org.spongepowered.common.util.AbstractResourceKeyedBuilder;
Expand Down Expand Up @@ -74,6 +73,7 @@ public final class SpongeShapedCraftingRecipeBuilder extends AbstractResourceKey
private DataPack<RecipeRegistration> pack = DataPacks.RECIPE;

private RecipeCategory recipeCategory = RecipeCategory.MISC; // TODO support category
private CraftingBookCategory craftingBookCategory = CraftingBookCategory.MISC; // TODO support category

@Override
public AisleStep aisle(final String... aisle) {
Expand Down Expand Up @@ -205,10 +205,9 @@ public RecipeRegistration build0() {

// Default space to Empty Ingredient
// ingredientsMap.putIfAbsent(' ', net.minecraft.item.crafting.Ingredient.EMPTY);
final net.minecraft.world.item.ItemStack resultStack = ItemStackUtil.toNative(this.result);
final RecipeSerializer<?> serializer = SpongeRecipeRegistration.determineSerializer(resultStack, this.resultFunction, this.remainingItemsFunction, ingredientsMap,
RecipeSerializer.SHAPED_RECIPE, SpongeRecipeSerializers.SPONGE_CRAFTING_SHAPED);
return new SpongeShapedCraftingRecipeRegistration((ResourceLocation)(Object) key, serializer, this.group, this.aisle, ingredientsMap, resultStack, this.resultFunction, this.remainingItemsFunction, this.pack, this.recipeCategory);
final ShapedRecipePattern pattern = ShapedRecipePattern.of(ingredientsMap, this.aisle);
return new SpongeShapedCraftingRecipeRegistration((ResourceLocation)(Object) key, this.group, pattern,
ItemStackUtil.toNative(this.result), this.resultFunction, this.remainingItemsFunction, this.pack, this.recipeCategory, this.craftingBookCategory);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,45 +28,69 @@
import net.minecraft.data.recipes.RecipeCategory;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.inventory.CraftingContainer;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.item.crafting.CraftingBookCategory;
import net.minecraft.world.item.crafting.RecipeSerializer;
import net.minecraft.world.item.crafting.ShapedRecipe;
import net.minecraft.world.item.crafting.ShapedRecipePattern;
import org.spongepowered.api.datapack.DataPack;
import org.spongepowered.api.item.recipe.Recipe;
import org.spongepowered.api.item.recipe.RecipeRegistration;
import org.spongepowered.api.item.recipe.crafting.ShapedCraftingRecipe;
import org.spongepowered.common.item.recipe.SpongeRecipeRegistration;
import org.spongepowered.common.item.recipe.SpongeRecipeSerializers;

import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;

public class SpongeShapedCraftingRecipeRegistration extends SpongeRecipeRegistration {
public class SpongeShapedCraftingRecipeRegistration extends SpongeRecipeRegistration<ShapedRecipe> implements
SpongeRecipeRegistration.ResultFunctionRegistration<CraftingContainer>,
SpongeRecipeRegistration.RemainingItemsFunctionRegistration<CraftingContainer> {

// Vanilla Recipe
private final Item result;
private final int count;
private final List<String> pattern;
private final Map<Character, Ingredient> ingredientMap;
private final ShapedRecipePattern pattern;

// Sponge Recipe
private final ItemStack spongeResult;
private final Function<CraftingContainer, ItemStack> resultFunction;
private final Function<CraftingContainer, NonNullList<ItemStack>> remainingItemsFunction;
private final CraftingBookCategory craftingBookCategory;
private final boolean showNotification = true;

public SpongeShapedCraftingRecipeRegistration(final ResourceLocation key, final RecipeSerializer<?> serializer, final String group, final List<String> pattern,
final Map<Character, Ingredient> ingredients, final ItemStack spongeResult, final Function<CraftingContainer, ItemStack> resultFunction,
public SpongeShapedCraftingRecipeRegistration(final ResourceLocation key, final String group, final ShapedRecipePattern pattern,
final ItemStack spongeResult, final Function<CraftingContainer, ItemStack> resultFunction,
final Function<CraftingContainer, NonNullList<ItemStack>> remainingItemsFunction,
final DataPack<RecipeRegistration> pack, final RecipeCategory category) {
super(key, group, pack, category, serializer);
this.result = spongeResult.getItem();
this.count = spongeResult.getCount();
final DataPack<RecipeRegistration> pack, final RecipeCategory category, final CraftingBookCategory craftingBookCategory) {
super(key, group, pack, category, SpongeRecipeRegistration.determineSerializer(spongeResult, resultFunction, remainingItemsFunction, pattern.ingredients(),
RecipeSerializer.SHAPED_RECIPE, SpongeRecipeSerializers.SPONGE_CRAFTING_SHAPED));
this.pattern = pattern;
this.ingredientMap = ingredients;
this.spongeResult = spongeResult;
this.resultFunction = resultFunction;
this.remainingItemsFunction = remainingItemsFunction;
this.craftingBookCategory = craftingBookCategory;
}

@Override
public Function<CraftingContainer, ItemStack> resultFunction() {
return this.resultFunction;
}

@Override
public Function<CraftingContainer, NonNullList<ItemStack>> remainingItems() {
return this.remainingItemsFunction;
}

@Override
public Recipe recipe() {
this.ensureCached();
if (this.serializer instanceof SpongeShapedCraftingRecipeSerializer) {
return (ShapedCraftingRecipe) new SpongeShapedRecipe(this.group, this.craftingBookCategory, this.pattern, this.spongeResult, this.showNotification,
ItemStack.EMPTY,
this.resultFunction == null ? Optional.empty() : Optional.of(this.key.toString()),
this.remainingItemsFunction == null ? Optional.empty() : Optional.of(this.key.toString()));
}
return (ShapedCraftingRecipe) new ShapedRecipe(this.group, this.craftingBookCategory, this.pattern, this.spongeResult, this.showNotification);

}

}
Loading

0 comments on commit bab4796

Please sign in to comment.