This commit is contained in:
Raoul Van den Berge
2016-08-13 17:15:28 +02:00
parent b7c39d6489
commit b153f56046
7 changed files with 48 additions and 46 deletions

View File

@@ -4,9 +4,9 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Slot; import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandler;
import refinedstorage.container.slot.SlotFluidFilter; import refinedstorage.container.slot.SlotFluid;
import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.container.slot.SlotSpecimen;
import refinedstorage.inventory.ItemHandlerFluidFilter; import refinedstorage.inventory.ItemHandlerFluid;
import refinedstorage.tile.TileBase; import refinedstorage.tile.TileBase;
public class ContainerStorage extends ContainerBase { public class ContainerStorage extends ContainerBase {
@@ -22,7 +22,7 @@ public class ContainerStorage extends ContainerBase {
protected void addFilterAndPlayerInventorySlots(IItemHandler filters) { protected void addFilterAndPlayerInventorySlots(IItemHandler filters) {
for (int i = 0; i < 9; ++i) { for (int i = 0; i < 9; ++i) {
addSlotToContainer(filters instanceof ItemHandlerFluidFilter ? new SlotFluidFilter(!getTile().getWorld().isRemote, filters, i, 8 + (18 * i), 20) : new SlotSpecimen(filters, i, 8 + (18 * i), 20)); addSlotToContainer(filters instanceof ItemHandlerFluid ? new SlotFluid(!getTile().getWorld().isRemote, filters, i, 8 + (18 * i), 20) : new SlotSpecimen(filters, i, 8 + (18 * i), 20));
} }
addPlayerInventory(8, 129); addPlayerInventory(8, 129);

View File

@@ -3,10 +3,10 @@ package refinedstorage.container.slot;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandler;
public class SlotFluidFilter extends SlotSpecimen { public class SlotFluid extends SlotSpecimen {
private boolean server; private boolean server;
public SlotFluidFilter(boolean server, IItemHandler handler, int id, int x, int y) { public SlotFluid(boolean server, IItemHandler handler, int id, int x, int y) {
super(handler, id, x, y); super(handler, id, x, y);
this.server = server; this.server = server;

View File

@@ -17,7 +17,7 @@ import net.minecraftforge.items.SlotItemHandler;
import org.lwjgl.input.Mouse; import org.lwjgl.input.Mouse;
import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorage;
import refinedstorage.gui.sidebutton.SideButton; import refinedstorage.gui.sidebutton.SideButton;
import refinedstorage.inventory.ItemHandlerFluidFilter; import refinedstorage.inventory.ItemHandlerFluid;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
@@ -131,8 +131,8 @@ public abstract class GuiBase extends GuiContainer {
for (int i = 0; i < inventorySlots.inventorySlots.size(); ++i) { for (int i = 0; i < inventorySlots.inventorySlots.size(); ++i) {
Slot slot = inventorySlots.inventorySlots.get(i); Slot slot = inventorySlots.inventorySlots.get(i);
if (slot instanceof SlotItemHandler && ((SlotItemHandler) slot).getItemHandler() instanceof ItemHandlerFluidFilter) { if (slot instanceof SlotItemHandler && ((SlotItemHandler) slot).getItemHandler() instanceof ItemHandlerFluid) {
FluidStack stack = ((ItemHandlerFluidFilter) ((SlotItemHandler) slot).getItemHandler()).getFilters()[slot.getSlotIndex()]; FluidStack stack = ((ItemHandlerFluid) ((SlotItemHandler) slot).getItemHandler()).getFluids()[slot.getSlotIndex()];
if (stack != null) { if (stack != null) {
FLUID_RENDERER.draw(mc, slot.xDisplayPosition, slot.yDisplayPosition, stack); FLUID_RENDERER.draw(mc, slot.xDisplayPosition, slot.yDisplayPosition, stack);

View File

@@ -0,0 +1,34 @@
package refinedstorage.inventory;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
public class ItemHandlerFluid extends ItemHandlerBasic {
private FluidStack[] fluids;
public ItemHandlerFluid(int size, TileEntity tile) {
super(size, tile, (IItemValidator) s -> s.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null) && s.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).drain(Fluid.BUCKET_VOLUME, false) != null);
this.fluids = new FluidStack[size];
}
@Override
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
ItemStack stack = getStackInSlot(slot);
if (stack == null) {
fluids[slot] = null;
} else {
fluids[slot] = stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).drain(Fluid.BUCKET_VOLUME, false);
}
}
public FluidStack[] getFluids() {
return fluids;
}
}

View File

@@ -1,32 +0,0 @@
package refinedstorage.inventory;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
public class ItemHandlerFluidFilter extends ItemHandlerBasic {
private FluidStack[] filters = new FluidStack[9];
public ItemHandlerFluidFilter(TileEntity tile) {
super(9, tile, (IItemValidator) s -> s.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null) && s.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).drain(Fluid.BUCKET_VOLUME, false) != null);
}
@Override
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
ItemStack stack = getStackInSlot(slot);
if (stack == null) {
filters[slot] = null;
} else {
filters[slot] = stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).drain(Fluid.BUCKET_VOLUME, false);
}
}
public FluidStack[] getFilters() {
return filters;
}
}

View File

@@ -19,7 +19,7 @@ import refinedstorage.apiimpl.storage.fluid.FluidStorageNBT;
import refinedstorage.apiimpl.storage.fluid.FluidUtils; import refinedstorage.apiimpl.storage.fluid.FluidUtils;
import refinedstorage.block.EnumFluidStorageType; import refinedstorage.block.EnumFluidStorageType;
import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerBasic;
import refinedstorage.inventory.ItemHandlerFluidFilter; import refinedstorage.inventory.ItemHandlerFluid;
import refinedstorage.inventory.ItemValidatorBasic; import refinedstorage.inventory.ItemValidatorBasic;
import refinedstorage.tile.config.IComparable; import refinedstorage.tile.config.IComparable;
import refinedstorage.tile.config.IFilterable; import refinedstorage.tile.config.IFilterable;
@@ -93,7 +93,7 @@ public class TileFluidDiskDrive extends TileNode implements IFluidStorageProvide
} }
}; };
private ItemHandlerFluidFilter filters = new ItemHandlerFluidFilter(this); private ItemHandlerFluid filters = new ItemHandlerFluid(9, this);
private FluidStorage storages[] = new FluidStorage[8]; private FluidStorage storages[] = new FluidStorage[8];

View File

@@ -6,7 +6,7 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandler;
import refinedstorage.api.storage.CompareUtils; import refinedstorage.api.storage.CompareUtils;
import refinedstorage.inventory.ItemHandlerFluidFilter; import refinedstorage.inventory.ItemHandlerFluid;
import refinedstorage.tile.data.ITileDataConsumer; import refinedstorage.tile.data.ITileDataConsumer;
import refinedstorage.tile.data.ITileDataProducer; import refinedstorage.tile.data.ITileDataProducer;
import refinedstorage.tile.data.TileDataParameter; import refinedstorage.tile.data.TileDataParameter;
@@ -63,12 +63,12 @@ public interface IFilterable {
return false; return false;
} }
static boolean canTakeFluids(ItemHandlerFluidFilter filters, int mode, int compare, FluidStack stack) { static boolean canTakeFluids(ItemHandlerFluid filters, int mode, int compare, FluidStack stack) {
if (mode == WHITELIST) { if (mode == WHITELIST) {
int slots = 0; int slots = 0;
for (int i = 0; i < filters.getSlots(); ++i) { for (int i = 0; i < filters.getSlots(); ++i) {
FluidStack slot = filters.getFilters()[i]; FluidStack slot = filters.getFluids()[i];
if (slot != null) { if (slot != null) {
slots++; slots++;
@@ -82,7 +82,7 @@ public interface IFilterable {
return slots == 0; return slots == 0;
} else if (mode == BLACKLIST) { } else if (mode == BLACKLIST) {
for (int i = 0; i < filters.getSlots(); ++i) { for (int i = 0; i < filters.getSlots(); ++i) {
FluidStack slot = filters.getFilters()[i]; FluidStack slot = filters.getFluids()[i];
if (slot != null && CompareUtils.compareStack(slot, stack, compare)) { if (slot != null && CompareUtils.compareStack(slot, stack, compare)) {
return false; return false;