Inserting from fluid grids

This commit is contained in:
Raoul Van den Berge
2016-08-13 02:37:04 +02:00
parent be3b62f18b
commit e53498d79f
6 changed files with 50 additions and 4 deletions

View File

@@ -14,6 +14,10 @@ public final class NetworkUtils {
return network.extractItem(stack, size, CompareUtils.COMPARE_DAMAGE | CompareUtils.COMPARE_NBT); return network.extractItem(stack, size, CompareUtils.COMPARE_DAMAGE | CompareUtils.COMPARE_NBT);
} }
public static FluidStack extractFluid(INetworkMaster network, FluidStack stack, int size) {
return network.extractFluid(stack, size, CompareUtils.COMPARE_NBT);
}
public static ICraftingPattern getPattern(INetworkMaster network, ItemStack stack) { public static ICraftingPattern getPattern(INetworkMaster network, ItemStack stack) {
return network.getPattern(stack, CompareUtils.COMPARE_DAMAGE | CompareUtils.COMPARE_NBT); return network.getPattern(stack, CompareUtils.COMPARE_DAMAGE | CompareUtils.COMPARE_NBT);
} }

View File

@@ -56,6 +56,14 @@ public interface IGroupedFluidStorage {
@Nullable @Nullable
FluidStack get(@Nonnull FluidStack stack, int flags); FluidStack get(@Nonnull FluidStack stack, int flags);
/**
* Gets a fluid from the network by hash, see {@link refinedstorage.api.network.NetworkUtils#getFluidStackHashCode(FluidStack)}.
*
* @return Null if no fluid is found matching the hash, or the {@link FluidStack}, do NOT modify
*/
@Nullable
FluidStack get(int hash);
/** /**
* @return All fluids in this storage network * @return All fluids in this storage network
*/ */

View File

@@ -1,12 +1,15 @@
package refinedstorage.apiimpl.network.grid; package refinedstorage.apiimpl.network.grid;
import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.init.Items;
import net.minecraft.inventory.InventoryHelper;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler;
import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.INetworkMaster;
import refinedstorage.api.network.NetworkUtils;
import refinedstorage.api.network.grid.IFluidGridHandler; import refinedstorage.api.network.grid.IFluidGridHandler;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@@ -20,7 +23,24 @@ public class FluidGridHandler implements IFluidGridHandler {
@Override @Override
public void onExtract(int hash, boolean shift, EntityPlayerMP player) { public void onExtract(int hash, boolean shift, EntityPlayerMP player) {
System.out.println("Extract " + hash + " (shift = " + shift + ")"); FluidStack stack = network.getFluidStorage().get(hash);
if (stack != null) {
ItemStack bucket = NetworkUtils.extractItem(network, new ItemStack(Items.BUCKET), 1);
if (bucket != null) {
bucket.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).fill(NetworkUtils.extractFluid(network, stack, 1000), true);
if (shift) {
if (!player.inventory.addItemStackToInventory(bucket.copy())) {
InventoryHelper.spawnItemStack(player.worldObj, player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ(), bucket);
}
} else {
player.inventory.setItemStack(bucket);
player.updateHeldItem();
}
}
}
} }
@Nullable @Nullable

View File

@@ -5,6 +5,7 @@ import com.google.common.collect.Multimap;
import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.INetworkMaster;
import refinedstorage.api.network.NetworkUtils;
import refinedstorage.api.storage.fluid.IFluidStorage; import refinedstorage.api.storage.fluid.IFluidStorage;
import refinedstorage.api.storage.fluid.IFluidStorageProvider; import refinedstorage.api.storage.fluid.IFluidStorageProvider;
import refinedstorage.api.storage.fluid.IGroupedFluidStorage; import refinedstorage.api.storage.fluid.IGroupedFluidStorage;
@@ -93,6 +94,18 @@ public class GroupedFluidStorage implements IGroupedFluidStorage {
return null; return null;
} }
@Override
@Nullable
public FluidStack get(int hash) {
for (FluidStack stack : this.stacks.values()) {
if (NetworkUtils.getFluidStackHashCode(stack) == hash) {
return stack;
}
}
return null;
}
@Override @Override
public Collection<FluidStack> getStacks() { public Collection<FluidStack> getStacks() {
return stacks.values(); return stacks.values();

View File

@@ -360,8 +360,8 @@ public class GuiGrid extends GuiBase {
RefinedStorage.INSTANCE.network.sendToServer(grid.getType() == EnumGridType.FLUID ? new MessageGridFluidInsertHeld() : new MessageGridItemInsertHeld(clickedButton == 1)); RefinedStorage.INSTANCE.network.sendToServer(grid.getType() == EnumGridType.FLUID ? new MessageGridFluidInsertHeld() : new MessageGridItemInsertHeld(clickedButton == 1));
} }
if (isOverSlotWithItem() && (held == null || (held != null && clickedButton == 2))) { if (isOverSlotWithItem()) {
if (grid.getType() != EnumGridType.FLUID) { if (grid.getType() != EnumGridType.FLUID && (held == null || (held != null && clickedButton == 2))) {
ClientStackItem stack = (ClientStackItem) STACKS.get(slotNumber); ClientStackItem stack = (ClientStackItem) STACKS.get(slotNumber);
if (stack.isCraftable() && (stack.getQuantity() == 0 || (GuiScreen.isShiftKeyDown() && GuiScreen.isCtrlKeyDown()))) { if (stack.isCraftable() && (stack.getQuantity() == 0 || (GuiScreen.isShiftKeyDown() && GuiScreen.isCtrlKeyDown()))) {
@@ -383,7 +383,7 @@ public class GuiGrid extends GuiBase {
RefinedStorage.INSTANCE.network.sendToServer(new MessageGridItemPull(stack.getHash(), flags)); RefinedStorage.INSTANCE.network.sendToServer(new MessageGridItemPull(stack.getHash(), flags));
} }
} else { } else if (grid.getType() == EnumGridType.FLUID && held == null) {
RefinedStorage.INSTANCE.network.sendToServer(new MessageGridFluidPull(STACKS.get(slotNumber).getHash(), GuiScreen.isShiftKeyDown())); RefinedStorage.INSTANCE.network.sendToServer(new MessageGridFluidPull(STACKS.get(slotNumber).getHash(), GuiScreen.isShiftKeyDown()));
} }
} }

View File

@@ -179,6 +179,7 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl
super.onConnectionChange(network, state); super.onConnectionChange(network, state);
network.getItemStorage().rebuild(); network.getItemStorage().rebuild();
network.getFluidStorage().rebuild();
} }
@Override @Override