Insertion of fluids

This commit is contained in:
Raoul Van den Berge
2016-08-13 02:23:30 +02:00
parent 24a765f705
commit be3b62f18b
3 changed files with 67 additions and 17 deletions

View File

@@ -2,6 +2,10 @@ package refinedstorage.apiimpl.network.grid;
import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.EntityPlayerMP;
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.IFluidHandler;
import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.INetworkMaster;
import refinedstorage.api.network.grid.IFluidGridHandler; import refinedstorage.api.network.grid.IFluidGridHandler;
@@ -16,18 +20,31 @@ 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); System.out.println("Extract " + hash + " (shift = " + shift + ")");
} }
@Nullable @Nullable
@Override @Override
public ItemStack onInsert(ItemStack container) { 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; return container;
} }
@Override @Override
public void onInsertHeldContainer(EntityPlayerMP player) { public void onInsertHeldContainer(EntityPlayerMP player) {
System.out.println("Insert held!"); onInsert(player.inventory.getItemStack());
player.updateHeldItem();
} }
} }

View File

@@ -14,7 +14,6 @@ import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.Constants;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.items.ItemHandlerHelper;
import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorage;
@@ -184,9 +183,6 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
dataManager.addParameter(ENERGY_CAPACITY); dataManager.addParameter(ENERGY_CAPACITY);
dataManager.addParameter(NODES); dataManager.addParameter(NODES);
fluidStorage.add(new FluidStack(FluidRegistry.WATER, 1000 * 32), true);
fluidStorage.add(new FluidStack(FluidRegistry.LAVA, 1000 * 64), true);
if (IntegrationIC2.isLoaded()) { if (IntegrationIC2.isLoaded()) {
this.energyEU = new ControllerEnergyIC2(this); this.energyEU = new ControllerEnergyIC2(this);
} else { } else {

View File

@@ -12,9 +12,13 @@ import net.minecraftforge.items.ItemHandlerHelper;
import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageItems; import refinedstorage.RefinedStorageItems;
import refinedstorage.api.network.INetworkMaster; 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.IItemStorage;
import refinedstorage.api.storage.item.IItemStorageProvider; import refinedstorage.api.storage.item.IItemStorageProvider;
import refinedstorage.apiimpl.storage.fluid.FluidStorageNBT;
import refinedstorage.apiimpl.storage.item.ItemStorageNBT; import refinedstorage.apiimpl.storage.item.ItemStorageNBT;
import refinedstorage.block.EnumFluidStorageType;
import refinedstorage.block.EnumItemStorageType; import refinedstorage.block.EnumItemStorageType;
import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerBasic;
import refinedstorage.inventory.ItemValidatorBasic; import refinedstorage.inventory.ItemValidatorBasic;
@@ -25,7 +29,7 @@ import refinedstorage.tile.data.TileDataParameter;
import java.util.List; 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<Integer> PRIORITY = IPrioritizable.createParameter(); public static final TileDataParameter<Integer> PRIORITY = IPrioritizable.createParameter();
public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter(); public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter();
public static final TileDataParameter<Integer> MODE = IFilterable.createParameter(); public static final TileDataParameter<Integer> 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_PRIORITY = "Priority";
private static final String NBT_COMPARE = "Compare"; private static final String NBT_COMPARE = "Compare";
private static final String NBT_MODE = "Mode"; private static final String NBT_MODE = "Mode";
@@ -60,6 +76,11 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt
public boolean isValid(ItemStack disk) { public boolean isValid(ItemStack disk) {
return super.isValid(disk) && ItemStorageNBT.isValid(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 @Override
protected void onContentsChanged(int slot) { protected void onContentsChanged(int slot) {
@@ -72,21 +93,27 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt
ItemStack disk = getStackInSlot(slot); ItemStack disk = getStackInSlot(slot);
if (disk == null) { if (disk == null) {
storages[slot] = null; itemStorages[slot] = null;
fluidStorages[slot] = null;
} else { } 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) { if (network != null) {
network.getItemStorage().rebuild(); network.getItemStorage().rebuild();
network.getFluidStorage().rebuild();
} }
} }
} }
@Override @Override
public ItemStack extractItem(int slot, int amount, boolean simulate) { public ItemStack extractItem(int slot, int amount, boolean simulate) {
if (storages[slot] != null) { if (itemStorages[slot] != null) {
storages[slot].writeToNBT(); itemStorages[slot].writeToNBT();
} }
return super.extractItem(slot, amount, simulate); 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 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 priority = 0;
private int compare = 0; private int compare = 0;
@@ -139,7 +167,7 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt
} }
public void onBreak() { public void onBreak() {
for (ItemStorage storage : this.storages) { for (ItemStorage storage : this.itemStorages) {
if (storage != null) { if (storage != null) {
storage.writeToNBT(); storage.writeToNBT();
} }
@@ -155,7 +183,16 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt
@Override @Override
public void addItemStorages(List<IItemStorage> storages) { public void addItemStorages(List<IItemStorage> storages) {
for (IItemStorage storage : this.storages) { for (IItemStorage storage : this.itemStorages) {
if (storage != null) {
storages.add(storage);
}
}
}
@Override
public void addFluidStorages(List<IFluidStorage> storages) {
for (IFluidStorage storage : this.fluidStorages) {
if (storage != null) { if (storage != null) {
storages.add(storage); storages.add(storage);
} }
@@ -187,8 +224,8 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt
super.write(tag); super.write(tag);
for (int i = 0; i < disks.getSlots(); ++i) { for (int i = 0; i < disks.getSlots(); ++i) {
if (storages[i] != null) { if (itemStorages[i] != null) {
storages[i].writeToNBT(); itemStorages[i].writeToNBT();
} }
} }