Add JEI transfer autocompletion for fluids in Pattern Grid.

This commit is contained in:
raoulvdberge
2018-07-23 15:39:12 +02:00
parent b933814625
commit c0ed630ac4
2 changed files with 99 additions and 2 deletions

View File

@@ -17,6 +17,7 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container; import net.minecraft.inventory.Container;
import net.minecraft.inventory.InventoryCrafting; import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
@@ -54,6 +55,9 @@ public class RecipeTransferHandlerGrid implements IRecipeTransferHandler {
List<ItemStack> inputs = new LinkedList<>(); List<ItemStack> inputs = new LinkedList<>();
List<ItemStack> outputs = new LinkedList<>(); List<ItemStack> outputs = new LinkedList<>();
List<FluidStack> fluidInputs = new LinkedList<>();
List<FluidStack> fluidOutputs = new LinkedList<>();
for (IGuiIngredient<ItemStack> guiIngredient : recipeLayout.getItemStacks().getGuiIngredients().values()) { for (IGuiIngredient<ItemStack> guiIngredient : recipeLayout.getItemStacks().getGuiIngredients().values()) {
if (guiIngredient != null && guiIngredient.getDisplayedIngredient() != null) { if (guiIngredient != null && guiIngredient.getDisplayedIngredient() != null) {
ItemStack ingredient = guiIngredient.getDisplayedIngredient().copy(); ItemStack ingredient = guiIngredient.getDisplayedIngredient().copy();
@@ -66,7 +70,19 @@ public class RecipeTransferHandlerGrid implements IRecipeTransferHandler {
} }
} }
RS.INSTANCE.network.sendToServer(new MessageGridProcessingTransfer(inputs, outputs)); for (IGuiIngredient<FluidStack> 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 { } else {
RS.INSTANCE.network.sendToServer(new MessageGridTransfer(recipeLayout.getItemStacks().getGuiIngredients(), container.inventorySlots.stream().filter(s -> s.inventory instanceof InventoryCrafting).collect(Collectors.toList()))); RS.INSTANCE.network.sendToServer(new MessageGridTransfer(recipeLayout.getItemStacks().getGuiIngredients(), container.inventorySlots.stream().filter(s -> s.inventory instanceof InventoryCrafting).collect(Collectors.toList())));
} }

View File

@@ -5,10 +5,16 @@ import com.raoulvdberge.refinedstorage.api.network.grid.IGrid;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeGrid; import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeGrid;
import com.raoulvdberge.refinedstorage.container.ContainerGrid; import com.raoulvdberge.refinedstorage.container.ContainerGrid;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFluid;
import com.raoulvdberge.refinedstorage.util.StackUtils; import com.raoulvdberge.refinedstorage.util.StackUtils;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack; 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 net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import java.util.ArrayList; import java.util.ArrayList;
@@ -18,12 +24,17 @@ public class MessageGridProcessingTransfer extends MessageHandlerPlayerToServer<
private Collection<ItemStack> inputs; private Collection<ItemStack> inputs;
private Collection<ItemStack> outputs; private Collection<ItemStack> outputs;
private Collection<FluidStack> fluidInputs;
private Collection<FluidStack> fluidOutputs;
public MessageGridProcessingTransfer() { public MessageGridProcessingTransfer() {
} }
public MessageGridProcessingTransfer(Collection<ItemStack> inputs, Collection<ItemStack> outputs) { public MessageGridProcessingTransfer(Collection<ItemStack> inputs, Collection<ItemStack> outputs, Collection<FluidStack> fluidInputs, Collection<FluidStack> fluidOutputs) {
this.inputs = inputs; this.inputs = inputs;
this.outputs = outputs; this.outputs = outputs;
this.fluidInputs = fluidInputs;
this.fluidOutputs = fluidOutputs;
} }
@Override @Override
@@ -43,6 +54,26 @@ public class MessageGridProcessingTransfer extends MessageHandlerPlayerToServer<
for (int i = 0; i < size; i++) { for (int i = 0; i < size; i++) {
this.outputs.add(StackUtils.readItemStack(buf)); 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 @Override
@@ -58,6 +89,18 @@ public class MessageGridProcessingTransfer extends MessageHandlerPlayerToServer<
for (ItemStack stack : outputs) { for (ItemStack stack : outputs) {
StackUtils.writeItemStack(buf, stack); 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 @Override
@@ -67,11 +110,16 @@ public class MessageGridProcessingTransfer extends MessageHandlerPlayerToServer<
if (grid.getGridType() == GridType.PATTERN) { if (grid.getGridType() == GridType.PATTERN) {
ItemHandlerBase handler = ((NetworkNodeGrid) grid).getProcessingMatrix(); ItemHandlerBase handler = ((NetworkNodeGrid) grid).getProcessingMatrix();
ItemHandlerFluid handlerFluid = ((NetworkNodeGrid) grid).getMatrixProcessingFluids();
clearInputsAndOutputs(handler); clearInputsAndOutputs(handler);
clearInputsAndOutputs(handlerFluid);
setInputs(handler, message.inputs); setInputs(handler, message.inputs);
setOutputs(handler, message.outputs); 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<FluidStack> stacks) {
setFluidSlots(handler, stacks, 0, 9);
}
private void setFluidOutputs(ItemHandlerBase handler, Collection<FluidStack> stacks) {
setFluidSlots(handler, stacks, 9, 18);
}
private void setFluidSlots(ItemHandlerBase handler, Collection<FluidStack> 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;
}
}
}
} }