diff --git a/build.gradle b/build.gradle index b7276c143..07fd10e9d 100755 --- a/build.gradle +++ b/build.gradle @@ -104,8 +104,9 @@ processResources { dependencies { minecraft 'net.minecraftforge:forge:1.18.2-40.1.48' - compileOnly fg.deobf("mezz.jei:jei-1.18.2:9.5.4.171:api") - runtimeOnly fg.deobf("mezz.jei:jei-1.18.2:9.5.4.171") + compileOnly fg.deobf("mezz.jei:jei-1.18.2-common-api:10.1.0.208") + compileOnly fg.deobf("mezz.jei:jei-1.18.2-forge-api:10.1.0.208") + runtimeOnly fg.deobf("mezz.jei:jei-1.18.2-forge:10.1.0.208") compileOnly fg.deobf('curse.maven:mouse-tweaks-60089:3578801') diff --git a/src/main/java/com/refinedmods/refinedstorage/integration/jei/CoverCraftingCategoryExtension.java b/src/main/java/com/refinedmods/refinedstorage/integration/jei/CoverCraftingCategoryExtension.java index 95063fcd4..fd9be26a0 100644 --- a/src/main/java/com/refinedmods/refinedstorage/integration/jei/CoverCraftingCategoryExtension.java +++ b/src/main/java/com/refinedmods/refinedstorage/integration/jei/CoverCraftingCategoryExtension.java @@ -5,9 +5,10 @@ import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverManager; import com.refinedmods.refinedstorage.item.CoverItem; import com.refinedmods.refinedstorage.recipe.CoverRecipe; import mezz.jei.api.constants.VanillaTypes; -import mezz.jei.api.gui.IRecipeLayout; -import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.category.extensions.vanilla.crafting.ICustomCraftingCategoryExtension; +import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; +import mezz.jei.api.gui.ingredient.ICraftingGridHelper; +import mezz.jei.api.recipe.IFocusGroup; +import mezz.jei.api.recipe.category.extensions.vanilla.crafting.ICraftingCategoryExtension; import net.minecraft.core.NonNullList; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.CreativeModeTab; @@ -16,25 +17,24 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Block; import net.minecraftforge.common.Tags; -import net.minecraftforge.common.util.Size2i; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.tags.ITag; import javax.annotation.Nullable; import java.util.ArrayList; -import java.util.Arrays; +import java.util.Collections; import java.util.List; -import java.util.stream.Collectors; -public class CoverCraftingCategoryExtension implements ICustomCraftingCategoryExtension { +public class CoverCraftingCategoryExtension implements ICraftingCategoryExtension { + @Override - public void setIngredients(IIngredients ingredients) { + public void setRecipe(IRecipeLayoutBuilder builder, ICraftingGridHelper craftingGridHelper, IFocusGroup focuses) { List input = new ArrayList<>(); List output = new ArrayList<>(); for (Block block : ForgeRegistries.BLOCKS.getValues()) { - Item item = Item.byBlock(block); - if (item == Items.AIR) { + Item item = Item.BY_BLOCK.get(block); + if (item == null || item == Items.AIR) { continue; } NonNullList subBlocks = NonNullList.create(); @@ -48,15 +48,26 @@ public class CoverCraftingCategoryExtension implements ICustomCraftingCategoryEx } } } - ITag nuggets = ForgeRegistries.ITEMS.tags().getTag(Tags.Items.NUGGETS_IRON); - ingredients.setInputLists(VanillaTypes.ITEM, Arrays.asList(nuggets.stream().map(ItemStack::new).collect(Collectors.toList()), input)); - ingredients.setOutputs(VanillaTypes.ITEM, output); + + ITag nuggetTag = ForgeRegistries.ITEMS.tags().getTag(Tags.Items.NUGGETS_IRON); + List nuggets = nuggetTag.stream().map(ItemStack::new).toList(); + List> inputs = new ArrayList<>(Collections.nCopies(9, new ArrayList<>())); + inputs.set(4, nuggets); + inputs.set(5, input); + craftingGridHelper.setInputs(builder, VanillaTypes.ITEM_STACK, inputs, 3, 3); + craftingGridHelper.setOutputs(builder, VanillaTypes.ITEM_STACK, output); + + //builder.createFocusLink(in, out); //waiting on API update } - @Nullable @Override - public Size2i getSize() { - return new Size2i(2, 1); + public int getWidth() { + return 3; + } + + @Override + public int getHeight() { + return 3; } @Nullable @@ -64,21 +75,4 @@ public class CoverCraftingCategoryExtension implements ICustomCraftingCategoryEx public ResourceLocation getRegistryName() { return CoverRecipe.SERIALIZER.getRegistryName(); } - - @Override - public void setRecipe(IRecipeLayout recipeLayout, IIngredients ingredients) { - ITag nuggets = ForgeRegistries.ITEMS.tags().getTag(Tags.Items.NUGGETS_IRON); - ItemStack stack = recipeLayout.getFocus(VanillaTypes.ITEM).getValue(); - if (stack.getItem() instanceof CoverItem) { - recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(4, nuggets.stream().map(ItemStack::new).collect(Collectors.toList())); - recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(5, CoverItem.getItem(stack)); - recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(0, stack); - } else { - recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(4, nuggets.stream().map(ItemStack::new).collect(Collectors.toList())); - recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(5, stack); - ItemStack output = new ItemStack(RSItems.COVER.get()); - CoverItem.setItem(output, stack); - recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(0, output); - } - } } diff --git a/src/main/java/com/refinedmods/refinedstorage/integration/jei/GridRecipeTransferHandler.java b/src/main/java/com/refinedmods/refinedstorage/integration/jei/GridRecipeTransferHandler.java index 93c0fabde..c68bb945b 100644 --- a/src/main/java/com/refinedmods/refinedstorage/integration/jei/GridRecipeTransferHandler.java +++ b/src/main/java/com/refinedmods/refinedstorage/integration/jei/GridRecipeTransferHandler.java @@ -9,8 +9,11 @@ import com.refinedmods.refinedstorage.network.grid.GridTransferMessage; import com.refinedmods.refinedstorage.screen.grid.GridScreen; import com.refinedmods.refinedstorage.screen.grid.stack.IGridStack; import com.refinedmods.refinedstorage.screen.grid.stack.ItemGridStack; -import mezz.jei.api.gui.IRecipeLayout; -import mezz.jei.api.gui.ingredient.IGuiIngredient; +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.forge.ForgeTypes; +import mezz.jei.api.gui.ingredient.IRecipeSlotView; +import mezz.jei.api.gui.ingredient.IRecipeSlotsView; +import mezz.jei.api.recipe.RecipeIngredientRole; import mezz.jei.api.recipe.transfer.IRecipeTransferError; import mezz.jei.api.recipe.transfer.IRecipeTransferHandler; import net.minecraft.client.gui.screens.Screen; @@ -19,11 +22,9 @@ import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.CraftingRecipe; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.Nullable; -import javax.annotation.Nonnull; -import java.util.Collection; -import java.util.LinkedList; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; public class GridRecipeTransferHandler implements IRecipeTransferHandler { @@ -47,23 +48,22 @@ public class GridRecipeTransferHandler implements IRecipeTransferHandler s.container instanceof CraftingContainer).collect(Collectors.toList()), - recipe instanceof CraftingRecipe - )); + private void move(IRecipeSlotsView recipeSlotsView) { + List> inputs = recipeSlotsView.getSlotViews(RecipeIngredientRole.INPUT).stream().map(view -> { + + //Creating a mutable list + List stacks = view.getIngredients(VanillaTypes.ITEM_STACK).collect(Collectors.toCollection(ArrayList::new)); + + //moving the displayed stack to first + Optional displayStack = view.getDisplayedIngredient(VanillaTypes.ITEM_STACK); + displayStack.ifPresent(stack -> { + int index = stacks.indexOf(stack); + if (index > -1) { + stacks.remove(index); + stacks.add(0, stack); + } + }); + return stacks; + }).toList(); + + RS.NETWORK_HANDLER.sendToServer(new GridTransferMessage(inputs)); } - private void moveForProcessing(IRecipeLayout recipeLayout, IngredientTracker tracker) { + private void moveForProcessing(IRecipeSlotsView recipeLayout, IngredientTracker tracker) { List inputs = new LinkedList<>(); List outputs = new LinkedList<>(); List fluidInputs = new LinkedList<>(); List fluidOutputs = new LinkedList<>(); - for (IGuiIngredient guiIngredient : recipeLayout.getItemStacks().getGuiIngredients().values()) { - handleItemIngredient(inputs, outputs, guiIngredient, tracker); + List inputSlots = recipeLayout.getSlotViews(RecipeIngredientRole.INPUT); + for (IRecipeSlotView view : inputSlots) { + handleItemIngredient(inputs, view, tracker); + handleFluidIngredient(fluidInputs, view); } - for (IGuiIngredient guiIngredient : recipeLayout.getFluidStacks().getGuiIngredients().values()) { - handleFluidIngredient(fluidInputs, fluidOutputs, guiIngredient); + List outputSlots = recipeLayout.getSlotViews(RecipeIngredientRole.OUTPUT); + for (IRecipeSlotView view : outputSlots) { + handleItemIngredient(outputs, view, tracker); + handleFluidIngredient(fluidOutputs, view); } RS.NETWORK_HANDLER.sendToServer(new GridProcessingTransferMessage(inputs, outputs, fluidInputs, fluidOutputs)); } - private void handleFluidIngredient(List fluidInputs, List fluidOutputs, IGuiIngredient guiIngredient) { - if (guiIngredient != null && guiIngredient.getDisplayedIngredient() != null) { - FluidStack ingredient = guiIngredient.getDisplayedIngredient().copy(); - - if (guiIngredient.isInput()) { - fluidInputs.add(ingredient); - } else { - fluidOutputs.add(ingredient); - } + private void handleFluidIngredient(List list, IRecipeSlotView slotView) { + if (slotView != null) { + slotView.getDisplayedIngredient(ForgeTypes.FLUID_STACK).ifPresent(list::add); } } - private void handleItemIngredient(List inputs, List outputs, IGuiIngredient guiIngredient, IngredientTracker tracker) { - if (guiIngredient != null && guiIngredient.getDisplayedIngredient() != null) { - ItemStack ingredient = tracker.findBestMatch(guiIngredient.getAllIngredients()).copy(); + private void handleItemIngredient(List list, IRecipeSlotView slotView, IngredientTracker tracker) { + if (slotView != null && slotView.getIngredients(VanillaTypes.ITEM_STACK).findAny().isPresent()) { + ItemStack stack = tracker.findBestMatch(slotView.getIngredients(VanillaTypes.ITEM_STACK).toList()); - if (ingredient == ItemStack.EMPTY) { - ingredient = guiIngredient.getDisplayedIngredient().copy(); + if (stack.isEmpty() && slotView.getDisplayedIngredient(VanillaTypes.ITEM_STACK).isPresent()) { + stack = slotView.getDisplayedIngredient(VanillaTypes.ITEM_STACK).get(); } - - if (guiIngredient.isInput()) { - inputs.add(ingredient); - } else { - outputs.add(ingredient); + if (!stack.isEmpty()) { + list.add(stack); } } } diff --git a/src/main/java/com/refinedmods/refinedstorage/integration/jei/HollowCoverCraftingCategoryExtension.java b/src/main/java/com/refinedmods/refinedstorage/integration/jei/HollowCoverCraftingCategoryExtension.java index d1c9a6809..5de4f8af9 100644 --- a/src/main/java/com/refinedmods/refinedstorage/integration/jei/HollowCoverCraftingCategoryExtension.java +++ b/src/main/java/com/refinedmods/refinedstorage/integration/jei/HollowCoverCraftingCategoryExtension.java @@ -1,30 +1,58 @@ package com.refinedmods.refinedstorage.integration.jei; import com.refinedmods.refinedstorage.RSItems; +import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverManager; import com.refinedmods.refinedstorage.item.CoverItem; import com.refinedmods.refinedstorage.recipe.HollowCoverRecipe; import mezz.jei.api.constants.VanillaTypes; -import mezz.jei.api.gui.IRecipeLayout; -import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.category.extensions.vanilla.crafting.ICustomCraftingCategoryExtension; +import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; +import mezz.jei.api.gui.ingredient.ICraftingGridHelper; +import mezz.jei.api.recipe.IFocusGroup; +import mezz.jei.api.recipe.category.extensions.vanilla.crafting.ICraftingCategoryExtension; +import net.minecraft.core.NonNullList; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.common.util.Size2i; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.registries.ForgeRegistries; import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; -public class HollowCoverCraftingCategoryExtension implements ICustomCraftingCategoryExtension { +public class HollowCoverCraftingCategoryExtension implements ICraftingCategoryExtension { @Override - public void setIngredients(IIngredients ingredients) { - ingredients.setInput(VanillaTypes.ITEM, new ItemStack(RSItems.COVER.get())); - ingredients.setOutput(VanillaTypes.ITEM, new ItemStack(RSItems.HOLLOW_COVER.get())); - } + public void setRecipe(IRecipeLayoutBuilder builder, ICraftingGridHelper craftingGridHelper, IFocusGroup focuses) { - @Nullable - @Override - public Size2i getSize() { - return new Size2i(2, 1); + List> stacks = new ArrayList<>(Collections.nCopies(9, new ArrayList<>())); + List input = new ArrayList<>(); + List output = new ArrayList<>(); + for (Block block : ForgeRegistries.BLOCKS.getValues()) { + Item item = Item.BY_BLOCK.get(block); + if (item == null || item == Items.AIR) { + continue; + } + NonNullList subBlocks = NonNullList.create(); + block.fillItemCategory(CreativeModeTab.TAB_SEARCH, subBlocks); + for (ItemStack subBlock : subBlocks) { + if (CoverManager.isValidCover(subBlock)) { + ItemStack fullCover = new ItemStack(RSItems.COVER.get()); + CoverItem.setItem(fullCover, subBlock); + input.add(fullCover); + ItemStack hollowCover = new ItemStack(RSItems.HOLLOW_COVER.get()); + CoverItem.setItem(hollowCover, subBlock); + output.add(hollowCover); + } + } + } + + stacks.set(4, input); + craftingGridHelper.setInputs(builder, VanillaTypes.ITEM_STACK, stacks, 0, 0); + craftingGridHelper.setOutputs(builder, VanillaTypes.ITEM_STACK, output); } @Nullable @@ -34,18 +62,12 @@ public class HollowCoverCraftingCategoryExtension implements ICustomCraftingCate } @Override - public void setRecipe(IRecipeLayout recipeLayout, IIngredients ingredients) { - ItemStack stack = recipeLayout.getFocus(VanillaTypes.ITEM).getValue(); - if (stack.getItem() == RSItems.COVER.get()) { - recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(5, stack); - ItemStack output = new ItemStack(RSItems.HOLLOW_COVER.get()); - CoverItem.setItem(output, CoverItem.getItem(stack)); - recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(0, output); - } else { - ItemStack input = new ItemStack(RSItems.COVER.get()); - CoverItem.setItem(input, CoverItem.getItem(stack)); - recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(5, input); - recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(0, stack); - } + public int getWidth() { + return 0; + } + + @Override + public int getHeight() { + return 0; } } diff --git a/src/main/java/com/refinedmods/refinedstorage/integration/jei/Ingredient.java b/src/main/java/com/refinedmods/refinedstorage/integration/jei/Ingredient.java index 30f43f32d..c2aa43de1 100644 --- a/src/main/java/com/refinedmods/refinedstorage/integration/jei/Ingredient.java +++ b/src/main/java/com/refinedmods/refinedstorage/integration/jei/Ingredient.java @@ -1,19 +1,18 @@ package com.refinedmods.refinedstorage.integration.jei; -import mezz.jei.api.gui.ingredient.IGuiIngredient; -import net.minecraft.world.item.ItemStack; +import mezz.jei.api.gui.ingredient.IRecipeSlotView; import java.util.UUID; class Ingredient { - private final IGuiIngredient guiIngredient; + private final IRecipeSlotView slotView; private final int required; private UUID craftStackId; private int fulfilled; - public Ingredient(IGuiIngredient guiIngredient) { - this.guiIngredient = guiIngredient; - this.required = guiIngredient.getAllIngredients().get(0).getCount(); + public Ingredient(IRecipeSlotView view, int count) { + this.slotView = view; + this.required = count; } public boolean isAvailable() { @@ -28,8 +27,8 @@ class Ingredient { return craftStackId != null; } - public IGuiIngredient getGuiIngredient() { - return guiIngredient; + public IRecipeSlotView getSlotView() { + return slotView; } public UUID getCraftStackId() { diff --git a/src/main/java/com/refinedmods/refinedstorage/integration/jei/IngredientTracker.java b/src/main/java/com/refinedmods/refinedstorage/integration/jei/IngredientTracker.java index 2f2947763..1e1923dbc 100644 --- a/src/main/java/com/refinedmods/refinedstorage/integration/jei/IngredientTracker.java +++ b/src/main/java/com/refinedmods/refinedstorage/integration/jei/IngredientTracker.java @@ -6,8 +6,10 @@ import com.refinedmods.refinedstorage.api.util.IComparer; import com.refinedmods.refinedstorage.apiimpl.API; import com.refinedmods.refinedstorage.item.PatternItem; import com.refinedmods.refinedstorage.screen.grid.stack.IGridStack; -import mezz.jei.api.gui.IRecipeLayout; -import mezz.jei.api.gui.ingredient.IGuiIngredient; +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.gui.ingredient.IRecipeSlotView; +import mezz.jei.api.gui.ingredient.IRecipeSlotsView; +import mezz.jei.api.recipe.RecipeIngredientRole; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -20,12 +22,13 @@ public class IngredientTracker { private final Map storedItems = new HashMap<>(); private boolean doTransfer; - public IngredientTracker(IRecipeLayout recipeLayout, boolean doTransfer) { - for (IGuiIngredient guiIngredient : recipeLayout.getItemStacks().getGuiIngredients().values()) { - if (guiIngredient.isInput() && !guiIngredient.getAllIngredients().isEmpty()) { - ingredients.add(new Ingredient(guiIngredient)); - } + public IngredientTracker(IRecipeSlotsView recipeLayout, boolean doTransfer) { + for (IRecipeSlotView slotView : recipeLayout.getSlotViews(RecipeIngredientRole.INPUT)) { + Optional optionalItemStack = slotView.getIngredients(VanillaTypes.ITEM_STACK).findAny(); + + optionalItemStack.ifPresent(stack -> ingredients.add(new Ingredient(slotView, stack.getCount()))); } + this.doTransfer = doTransfer; } @@ -55,9 +58,8 @@ public class IngredientTracker { } Optional match = ingredient - .getGuiIngredient() - .getAllIngredients() - .stream() + .getSlotView() + .getIngredients(VanillaTypes.ITEM_STACK) .filter(s -> API.instance().getComparer().isEqual(stack, s, IComparer.COMPARE_NBT)) .findFirst(); diff --git a/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferCraftingGridError.java b/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferCraftingGridError.java index ec8527b13..e01355377 100644 --- a/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferCraftingGridError.java +++ b/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferCraftingGridError.java @@ -1,7 +1,7 @@ package com.refinedmods.refinedstorage.integration.jei; import com.mojang.blaze3d.vertex.PoseStack; -import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.gui.ingredient.IRecipeSlotsView; import mezz.jei.api.recipe.transfer.IRecipeTransferError; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; @@ -29,11 +29,11 @@ public class RecipeTransferCraftingGridError implements IRecipeTransferError { } @Override - public void showError(PoseStack stack, int mouseX, int mouseY, IRecipeLayout recipeLayout, int recipeX, int recipeY) { - List message = drawIngredientHighlights(stack, recipeX, recipeY); + public void showError(PoseStack poseStack, int mouseX, int mouseY, IRecipeSlotsView recipeSlotsView, int recipeX, int recipeY) { + List message = drawIngredientHighlights(poseStack, recipeX, recipeY); Screen currentScreen = Minecraft.getInstance().screen; - currentScreen.renderComponentTooltip(stack, message, mouseX, mouseY); + currentScreen.renderComponentTooltip(poseStack, message, mouseX, mouseY); } protected List drawIngredientHighlights(PoseStack stack, int recipeX, int recipeY) { @@ -46,10 +46,10 @@ public class RecipeTransferCraftingGridError implements IRecipeTransferError { for (Ingredient ingredient : tracker.getIngredients()) { if (!ingredient.isAvailable()) { if (ingredient.isCraftable()) { - ingredient.getGuiIngredient().drawHighlight(stack, AUTOCRAFTING_HIGHLIGHT_COLOR.getRGB(), recipeX, recipeY); + ingredient.getSlotView().drawHighlight(stack, AUTOCRAFTING_HIGHLIGHT_COLOR.getRGB()); craftMessage = true; } else { - ingredient.getGuiIngredient().drawHighlight(stack, MISSING_HIGHLIGHT_COLOR.getRGB(), recipeX, recipeY); + ingredient.getSlotView().drawHighlight(stack, MISSING_HIGHLIGHT_COLOR.getRGB()); missingMessage = true; } } diff --git a/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferPatternGridError.java b/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferPatternGridError.java index 38ce96ce6..b4269176f 100644 --- a/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferPatternGridError.java +++ b/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferPatternGridError.java @@ -22,7 +22,7 @@ public class RecipeTransferPatternGridError extends RecipeTransferCraftingGridEr for (Ingredient ingredient : tracker.getIngredients()) { if (ingredient.isCraftable()) { - ingredient.getGuiIngredient().drawHighlight(stack, AUTOCRAFTING_HIGHLIGHT_COLOR.getRGB(), recipeX, recipeY); + ingredient.getSlotView().drawHighlight(stack, AUTOCRAFTING_HIGHLIGHT_COLOR.getRGB()); craftMessage = true; } } diff --git a/src/main/java/com/refinedmods/refinedstorage/network/grid/GridTransferMessage.java b/src/main/java/com/refinedmods/refinedstorage/network/grid/GridTransferMessage.java index a0935671b..406c219da 100644 --- a/src/main/java/com/refinedmods/refinedstorage/network/grid/GridTransferMessage.java +++ b/src/main/java/com/refinedmods/refinedstorage/network/grid/GridTransferMessage.java @@ -1,47 +1,36 @@ package com.refinedmods.refinedstorage.network.grid; + import com.refinedmods.refinedstorage.api.network.grid.GridType; import com.refinedmods.refinedstorage.api.network.grid.IGrid; import com.refinedmods.refinedstorage.container.GridContainerMenu; import com.refinedmods.refinedstorage.util.StackUtils; -import mezz.jei.api.gui.ingredient.IGuiIngredient; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; import net.minecraftforge.network.NetworkEvent; -import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.function.Supplier; - public class GridTransferMessage { private final ItemStack[][] recipe = new ItemStack[9][]; - private Map> inputs; - private List slots; - boolean isCraftingRecipe; + List> inputs; public GridTransferMessage() { } - public GridTransferMessage(Map> inputs, List slots, boolean isCraftingRecipe) { + public GridTransferMessage(List> inputs) { this.inputs = inputs; - this.slots = slots; - this.isCraftingRecipe = isCraftingRecipe; } public static GridTransferMessage decode(FriendlyByteBuf buf) { GridTransferMessage msg = new GridTransferMessage(); - int slots = buf.readInt(); + for (int i = 0; i < slots; i++) { + int numberOfIngredients = buf.readInt(); + msg.recipe[i] = new ItemStack[numberOfIngredients]; - for (int i = 0; i < slots; ++i) { - int ingredients = buf.readInt(); - - msg.recipe[i] = new ItemStack[ingredients]; - - for (int j = 0; j < ingredients; ++j) { + for (int j = 0; j < numberOfIngredients; j++) { msg.recipe[i][j] = StackUtils.readItemStack(buf); } } @@ -50,29 +39,18 @@ public class GridTransferMessage { } public static void encode(GridTransferMessage message, FriendlyByteBuf buf) { - buf.writeInt(message.slots.size()); - for (Slot slot : message.slots) { - IGuiIngredient ingredient = message.inputs.get(slot.getSlotIndex() + (message.isCraftingRecipe ? 1 : 0)); + buf.writeInt(message.inputs.size()); + for (List stacks : message.inputs) { + buf.writeInt(stacks.size()); - List ingredients = new ArrayList<>(); - - if (ingredient != null) { - for (ItemStack possibleStack : ingredient.getAllIngredients()) { - if (possibleStack != null) { - ingredients.add(possibleStack); - } - } - } - - buf.writeInt(ingredients.size()); - - for (ItemStack possibleStack : ingredients) { + for (ItemStack possibleStack : stacks) { StackUtils.writeItemStack(buf, possibleStack); } } } + public static void handle(GridTransferMessage message, Supplier ctx) { Player player = ctx.get().getSender();