Insertion of fluids
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user