From c0ed630ac4c228d33ac16585384189d7dde022df Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Mon, 23 Jul 2018 15:39:12 +0200 Subject: [PATCH] Add JEI transfer autocompletion for fluids in Pattern Grid. --- .../jei/RecipeTransferHandlerGrid.java | 18 +++- .../MessageGridProcessingTransfer.java | 83 ++++++++++++++++++- 2 files changed, 99 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RecipeTransferHandlerGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RecipeTransferHandlerGrid.java index 12dd69fed..a92b1090c 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RecipeTransferHandlerGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RecipeTransferHandlerGrid.java @@ -17,6 +17,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.InventoryCrafting; import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; import java.util.LinkedList; import java.util.List; @@ -54,6 +55,9 @@ public class RecipeTransferHandlerGrid implements IRecipeTransferHandler { List inputs = new LinkedList<>(); List outputs = new LinkedList<>(); + List fluidInputs = new LinkedList<>(); + List fluidOutputs = new LinkedList<>(); + for (IGuiIngredient guiIngredient : recipeLayout.getItemStacks().getGuiIngredients().values()) { if (guiIngredient != null && guiIngredient.getDisplayedIngredient() != null) { ItemStack ingredient = guiIngredient.getDisplayedIngredient().copy(); @@ -66,7 +70,19 @@ public class RecipeTransferHandlerGrid implements IRecipeTransferHandler { } } - RS.INSTANCE.network.sendToServer(new MessageGridProcessingTransfer(inputs, outputs)); + for (IGuiIngredient guiIngredient : recipeLayout.getFluidStacks().getGuiIngredients().values()) { + if (guiIngredient != null && guiIngredient.getDisplayedIngredient() != null) { + FluidStack ingredient = guiIngredient.getDisplayedIngredient().copy(); + + if (guiIngredient.isInput()) { + fluidInputs.add(ingredient); + } else { + fluidOutputs.add(ingredient); + } + } + } + + RS.INSTANCE.network.sendToServer(new MessageGridProcessingTransfer(inputs, outputs, fluidInputs, fluidOutputs)); } else { RS.INSTANCE.network.sendToServer(new MessageGridTransfer(recipeLayout.getItemStacks().getGuiIngredients(), container.inventorySlots.stream().filter(s -> s.inventory instanceof InventoryCrafting).collect(Collectors.toList()))); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridProcessingTransfer.java b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridProcessingTransfer.java index 20b4fd712..4042790fb 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridProcessingTransfer.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridProcessingTransfer.java @@ -5,10 +5,16 @@ import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeGrid; import com.raoulvdberge.refinedstorage.container.ContainerGrid; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase; +import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFluid; import com.raoulvdberge.refinedstorage.util.StackUtils; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Items; import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandlerItem; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; import java.util.ArrayList; @@ -18,12 +24,17 @@ public class MessageGridProcessingTransfer extends MessageHandlerPlayerToServer< private Collection inputs; private Collection outputs; + private Collection fluidInputs; + private Collection fluidOutputs; + public MessageGridProcessingTransfer() { } - public MessageGridProcessingTransfer(Collection inputs, Collection outputs) { + public MessageGridProcessingTransfer(Collection inputs, Collection outputs, Collection fluidInputs, Collection fluidOutputs) { this.inputs = inputs; this.outputs = outputs; + this.fluidInputs = fluidInputs; + this.fluidOutputs = fluidOutputs; } @Override @@ -43,6 +54,26 @@ public class MessageGridProcessingTransfer extends MessageHandlerPlayerToServer< for (int i = 0; i < size; i++) { this.outputs.add(StackUtils.readItemStack(buf)); } + + size = buf.readInt(); + + this.fluidInputs = new ArrayList<>(size); + + for (int i = 0; i < size; i++) { + buf.readInt(); + + this.fluidInputs.add(StackUtils.readFluidStack(buf)); + } + + size = buf.readInt(); + + this.fluidOutputs = new ArrayList<>(size); + + for (int i = 0; i < size; i++) { + buf.readInt(); + + this.fluidOutputs.add(StackUtils.readFluidStack(buf)); + } } @Override @@ -58,6 +89,18 @@ public class MessageGridProcessingTransfer extends MessageHandlerPlayerToServer< for (ItemStack stack : outputs) { StackUtils.writeItemStack(buf, stack); } + + buf.writeInt(fluidInputs.size()); + + for (FluidStack stack : fluidInputs) { + StackUtils.writeFluidStack(buf, stack); + } + + buf.writeInt(fluidOutputs.size()); + + for (FluidStack stack : fluidOutputs) { + StackUtils.writeFluidStack(buf, stack); + } } @Override @@ -67,11 +110,16 @@ public class MessageGridProcessingTransfer extends MessageHandlerPlayerToServer< if (grid.getGridType() == GridType.PATTERN) { ItemHandlerBase handler = ((NetworkNodeGrid) grid).getProcessingMatrix(); + ItemHandlerFluid handlerFluid = ((NetworkNodeGrid) grid).getMatrixProcessingFluids(); clearInputsAndOutputs(handler); + clearInputsAndOutputs(handlerFluid); setInputs(handler, message.inputs); setOutputs(handler, message.outputs); + + setFluidInputs(handlerFluid, message.fluidInputs); + setFluidOutputs(handlerFluid, message.fluidOutputs); } } } @@ -101,4 +149,37 @@ public class MessageGridProcessingTransfer extends MessageHandlerPlayerToServer< } } } + + private void setFluidInputs(ItemHandlerBase handler, Collection stacks) { + setFluidSlots(handler, stacks, 0, 9); + } + + private void setFluidOutputs(ItemHandlerBase handler, Collection stacks) { + setFluidSlots(handler, stacks, 9, 18); + } + + private void setFluidSlots(ItemHandlerBase handler, Collection stacks, int begin, int end) { + for (FluidStack stack : stacks) { + if (!StackUtils.hasFluidBucket(stack) || stack.amount > Fluid.BUCKET_VOLUME) { + continue; + } + + ItemStack filledContainer = new ItemStack(Items.BUCKET); + + IFluidHandlerItem fluidHandler = filledContainer.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); + + fluidHandler.fill(StackUtils.copy(stack, Fluid.BUCKET_VOLUME), true); + + filledContainer = fluidHandler.getContainer(); + filledContainer.setCount(stack.amount); + + handler.setStackInSlot(begin, filledContainer); + + begin++; + + if (begin >= end) { + break; + } + } + } }