Inserting from fluid grids
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user