From be3b62f18b57588e4bc40161ad7ed8e8d8ede4d8 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 13 Aug 2016 02:23:30 +0200 Subject: [PATCH] Insertion of fluids --- .../network/grid/FluidGridHandler.java | 23 +++++++- .../refinedstorage/tile/TileController.java | 4 -- .../refinedstorage/tile/TileDiskDrive.java | 57 +++++++++++++++---- 3 files changed, 67 insertions(+), 17 deletions(-) diff --git a/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java index 0086c85e8..1633fb8fc 100755 --- a/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java @@ -2,6 +2,10 @@ package refinedstorage.apiimpl.network.grid; import net.minecraft.entity.player.EntityPlayerMP; 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.IFluidHandler; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.grid.IFluidGridHandler; @@ -16,18 +20,31 @@ public class FluidGridHandler implements IFluidGridHandler { @Override public void onExtract(int hash, boolean shift, EntityPlayerMP player) { - System.out.println("Extract " + hash); + System.out.println("Extract " + hash + " (shift = " + shift + ")"); } @Nullable @Override public ItemStack onInsert(ItemStack container) { - System.out.println("Insert " + container); + if (container.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null)) { + IFluidHandler handler = container.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null); + + FluidStack drainPre = handler.drain(Fluid.BUCKET_VOLUME, false); + + if (drainPre != null && network.insertFluid(drainPre, drainPre.amount, true) == null) { + FluidStack drain = handler.drain(Fluid.BUCKET_VOLUME, true); + + network.insertFluid(drain, drain.amount, false); + } + } + return container; } @Override public void onInsertHeldContainer(EntityPlayerMP player) { - System.out.println("Insert held!"); + onInsert(player.inventory.getItemStack()); + + player.updateHeldItem(); } } diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index b9ac7c202..a2add346b 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -14,7 +14,6 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.Constants; -import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; @@ -184,9 +183,6 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR dataManager.addParameter(ENERGY_CAPACITY); dataManager.addParameter(NODES); - fluidStorage.add(new FluidStack(FluidRegistry.WATER, 1000 * 32), true); - fluidStorage.add(new FluidStack(FluidRegistry.LAVA, 1000 * 64), true); - if (IntegrationIC2.isLoaded()) { this.energyEU = new ControllerEnergyIC2(this); } else { diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index 7371bcd5a..94e80794f 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -12,9 +12,13 @@ import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageItems; import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.storage.fluid.IFluidStorage; +import refinedstorage.api.storage.fluid.IFluidStorageProvider; import refinedstorage.api.storage.item.IItemStorage; import refinedstorage.api.storage.item.IItemStorageProvider; +import refinedstorage.apiimpl.storage.fluid.FluidStorageNBT; import refinedstorage.apiimpl.storage.item.ItemStorageNBT; +import refinedstorage.block.EnumFluidStorageType; import refinedstorage.block.EnumItemStorageType; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemValidatorBasic; @@ -25,7 +29,7 @@ import refinedstorage.tile.data.TileDataParameter; import java.util.List; -public class TileDiskDrive extends TileNode implements IItemStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable { +public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFluidStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable { public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter MODE = IFilterable.createParameter(); @@ -50,6 +54,18 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt } } + // @TODO: This is only temporary. Add fluid disk drive. + class FluidStorage extends FluidStorageNBT { + public FluidStorage(ItemStack disk) { + super(disk.getTagCompound(), EnumFluidStorageType.getById(disk.getItemDamage()).getCapacity(), TileDiskDrive.this); + } + + @Override + public int getPriority() { + return 0; + } + } + private static final String NBT_PRIORITY = "Priority"; private static final String NBT_COMPARE = "Compare"; private static final String NBT_MODE = "Mode"; @@ -60,6 +76,11 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt public boolean isValid(ItemStack disk) { return super.isValid(disk) && ItemStorageNBT.isValid(disk); } + }, new ItemValidatorBasic(RefinedStorageItems.FLUID_STORAGE_DISK) { + @Override + public boolean isValid(ItemStack disk) { + return super.isValid(disk) && FluidStorageNBT.isValid(disk); + } }) { @Override protected void onContentsChanged(int slot) { @@ -72,21 +93,27 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt ItemStack disk = getStackInSlot(slot); if (disk == null) { - storages[slot] = null; + itemStorages[slot] = null; + fluidStorages[slot] = null; } else { - storages[slot] = new ItemStorage(disk); + if (disk.getItem() == RefinedStorageItems.STORAGE_DISK) { + itemStorages[slot] = new ItemStorage(disk); + } else if (disk.getItem() == RefinedStorageItems.FLUID_STORAGE_DISK) { + fluidStorages[slot] = new FluidStorage(disk); + } } if (network != null) { network.getItemStorage().rebuild(); + network.getFluidStorage().rebuild(); } } } @Override public ItemStack extractItem(int slot, int amount, boolean simulate) { - if (storages[slot] != null) { - storages[slot].writeToNBT(); + if (itemStorages[slot] != null) { + itemStorages[slot].writeToNBT(); } return super.extractItem(slot, amount, simulate); @@ -95,7 +122,8 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt private ItemHandlerBasic filters = new ItemHandlerBasic(9, this); - private ItemStorage storages[] = new ItemStorage[8]; + private ItemStorage itemStorages[] = new ItemStorage[8]; + private FluidStorage fluidStorages[] = new FluidStorage[8]; private int priority = 0; private int compare = 0; @@ -139,7 +167,7 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt } public void onBreak() { - for (ItemStorage storage : this.storages) { + for (ItemStorage storage : this.itemStorages) { if (storage != null) { storage.writeToNBT(); } @@ -155,7 +183,16 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt @Override public void addItemStorages(List storages) { - for (IItemStorage storage : this.storages) { + for (IItemStorage storage : this.itemStorages) { + if (storage != null) { + storages.add(storage); + } + } + } + + @Override + public void addFluidStorages(List storages) { + for (IFluidStorage storage : this.fluidStorages) { if (storage != null) { storages.add(storage); } @@ -187,8 +224,8 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt super.write(tag); for (int i = 0; i < disks.getSlots(); ++i) { - if (storages[i] != null) { - storages[i].writeToNBT(); + if (itemStorages[i] != null) { + itemStorages[i].writeToNBT(); } }