Fluid Detector
This commit is contained in:
@@ -3,14 +3,14 @@ package refinedstorage.container;
|
|||||||
import net.minecraft.entity.player.EntityPlayer;
|
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 refinedstorage.container.slot.SlotSpecimen;
|
import refinedstorage.container.slot.SlotSpecimenType;
|
||||||
import refinedstorage.tile.TileDetector;
|
import refinedstorage.tile.TileDetector;
|
||||||
|
|
||||||
public class ContainerDetector extends ContainerBase {
|
public class ContainerDetector extends ContainerBase {
|
||||||
public ContainerDetector(TileDetector detector, EntityPlayer player) {
|
public ContainerDetector(TileDetector detector, EntityPlayer player) {
|
||||||
super(detector, player);
|
super(detector, player);
|
||||||
|
|
||||||
addSlotToContainer(new SlotSpecimen(detector.getInventory(), 0, 107, 20));
|
addSlotToContainer(new SlotSpecimenType(detector, 0, 107, 20));
|
||||||
|
|
||||||
addPlayerInventory(8, 55);
|
addPlayerInventory(8, 55);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import refinedstorage.api.storage.CompareUtils;
|
|||||||
import refinedstorage.container.ContainerDetector;
|
import refinedstorage.container.ContainerDetector;
|
||||||
import refinedstorage.gui.sidebutton.SideButtonCompare;
|
import refinedstorage.gui.sidebutton.SideButtonCompare;
|
||||||
import refinedstorage.gui.sidebutton.SideButtonDetectorMode;
|
import refinedstorage.gui.sidebutton.SideButtonDetectorMode;
|
||||||
|
import refinedstorage.gui.sidebutton.SideButtonType;
|
||||||
import refinedstorage.tile.TileDetector;
|
import refinedstorage.tile.TileDetector;
|
||||||
import refinedstorage.tile.data.TileDataManager;
|
import refinedstorage.tile.data.TileDataManager;
|
||||||
|
|
||||||
@@ -20,11 +21,13 @@ public class GuiDetector extends GuiBase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(int x, int y) {
|
public void init(int x, int y) {
|
||||||
addSideButton(new SideButtonCompare(TileDetector.COMPARE, CompareUtils.COMPARE_DAMAGE));
|
addSideButton(new SideButtonType(TileDetector.TYPE));
|
||||||
addSideButton(new SideButtonCompare(TileDetector.COMPARE, CompareUtils.COMPARE_NBT));
|
|
||||||
|
|
||||||
addSideButton(new SideButtonDetectorMode());
|
addSideButton(new SideButtonDetectorMode());
|
||||||
|
|
||||||
|
addSideButton(new SideButtonCompare(TileDetector.COMPARE, CompareUtils.COMPARE_DAMAGE));
|
||||||
|
addSideButton(new SideButtonCompare(TileDetector.COMPARE, CompareUtils.COMPARE_NBT));
|
||||||
|
|
||||||
AMOUNT = new GuiTextField(0, fontRendererObj, x + 62 + 1, y + 23 + 1, 25, fontRendererObj.FONT_HEIGHT);
|
AMOUNT = new GuiTextField(0, fontRendererObj, x + 62 + 1, y + 23 + 1, 25, fontRendererObj.FONT_HEIGHT);
|
||||||
AMOUNT.setText(String.valueOf(TileDetector.AMOUNT.getValue()));
|
AMOUNT.setText(String.valueOf(TileDetector.AMOUNT.getValue()));
|
||||||
AMOUNT.setEnableBackgroundDrawing(false);
|
AMOUNT.setEnableBackgroundDrawing(false);
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import net.minecraft.client.gui.GuiScreen;
|
|||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.network.datasync.DataSerializers;
|
import net.minecraft.network.datasync.DataSerializers;
|
||||||
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
import net.minecraftforge.fml.common.FMLCommonHandler;
|
import net.minecraftforge.fml.common.FMLCommonHandler;
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
import net.minecraftforge.items.IItemHandler;
|
import net.minecraftforge.items.IItemHandler;
|
||||||
@@ -13,14 +14,17 @@ import refinedstorage.RefinedStorageBlocks;
|
|||||||
import refinedstorage.api.network.INetworkMaster;
|
import refinedstorage.api.network.INetworkMaster;
|
||||||
import refinedstorage.gui.GuiDetector;
|
import refinedstorage.gui.GuiDetector;
|
||||||
import refinedstorage.inventory.ItemHandlerBasic;
|
import refinedstorage.inventory.ItemHandlerBasic;
|
||||||
|
import refinedstorage.inventory.ItemHandlerFluid;
|
||||||
import refinedstorage.tile.config.IComparable;
|
import refinedstorage.tile.config.IComparable;
|
||||||
|
import refinedstorage.tile.config.IType;
|
||||||
import refinedstorage.tile.config.RedstoneMode;
|
import refinedstorage.tile.config.RedstoneMode;
|
||||||
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;
|
||||||
|
|
||||||
public class TileDetector extends TileNode implements IComparable {
|
public class TileDetector extends TileNode implements IComparable, IType {
|
||||||
public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter();
|
public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter();
|
||||||
|
public static final TileDataParameter<Integer> TYPE = IType.createParameter();
|
||||||
|
|
||||||
public static final TileDataParameter<Integer> MODE = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileDetector>() {
|
public static final TileDataParameter<Integer> MODE = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileDetector>() {
|
||||||
@Override
|
@Override
|
||||||
@@ -70,10 +74,13 @@ public class TileDetector extends TileNode implements IComparable {
|
|||||||
private static final String NBT_MODE = "Mode";
|
private static final String NBT_MODE = "Mode";
|
||||||
private static final String NBT_AMOUNT = "Amount";
|
private static final String NBT_AMOUNT = "Amount";
|
||||||
private static final String NBT_POWERED = "Powered";
|
private static final String NBT_POWERED = "Powered";
|
||||||
|
private static final String NBT_TYPE = "Type";
|
||||||
|
|
||||||
private ItemHandlerBasic filter = new ItemHandlerBasic(1, this);
|
private ItemHandlerBasic itemFilters = new ItemHandlerBasic(1, this);
|
||||||
|
private ItemHandlerFluid fluidFilters = new ItemHandlerFluid(1, this);
|
||||||
|
|
||||||
private int compare = 0;
|
private int compare = 0;
|
||||||
|
private int type = IType.ITEMS;
|
||||||
private int mode = MODE_EQUAL;
|
private int mode = MODE_EQUAL;
|
||||||
private int amount = 0;
|
private int amount = 0;
|
||||||
|
|
||||||
@@ -82,6 +89,7 @@ public class TileDetector extends TileNode implements IComparable {
|
|||||||
|
|
||||||
public TileDetector() {
|
public TileDetector() {
|
||||||
dataManager.addWatchedParameter(COMPARE);
|
dataManager.addWatchedParameter(COMPARE);
|
||||||
|
dataManager.addWatchedParameter(TYPE);
|
||||||
dataManager.addWatchedParameter(MODE);
|
dataManager.addWatchedParameter(MODE);
|
||||||
dataManager.addWatchedParameter(AMOUNT);
|
dataManager.addWatchedParameter(AMOUNT);
|
||||||
}
|
}
|
||||||
@@ -94,37 +102,29 @@ public class TileDetector extends TileNode implements IComparable {
|
|||||||
@Override
|
@Override
|
||||||
public void updateNode() {
|
public void updateNode() {
|
||||||
if (ticks % SPEED == 0) {
|
if (ticks % SPEED == 0) {
|
||||||
ItemStack slot = filter.getStackInSlot(0);
|
if (type == IType.ITEMS) {
|
||||||
|
ItemStack slot = itemFilters.getStackInSlot(0);
|
||||||
|
|
||||||
if (slot != null) {
|
if (slot != null) {
|
||||||
ItemStack stack = network.getItemStorage().get(slot, compare);
|
ItemStack stack = network.getItemStorage().get(slot, compare);
|
||||||
|
|
||||||
if (stack != null) {
|
powered = isPowered(stack == null ? null : stack.stackSize);
|
||||||
switch (mode) {
|
|
||||||
case MODE_UNDER:
|
|
||||||
powered = stack.stackSize < amount;
|
|
||||||
break;
|
|
||||||
case MODE_EQUAL:
|
|
||||||
powered = stack.stackSize == amount;
|
|
||||||
break;
|
|
||||||
case MODE_ABOVE:
|
|
||||||
powered = stack.stackSize > amount;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (mode == MODE_UNDER && amount != 0) {
|
|
||||||
powered = true;
|
|
||||||
} else if (mode == MODE_EQUAL && amount == 0) {
|
|
||||||
powered = true;
|
|
||||||
} else {
|
} else {
|
||||||
powered = false;
|
powered = false;
|
||||||
}
|
}
|
||||||
}
|
} else if (type == IType.FLUIDS) {
|
||||||
|
FluidStack slot = fluidFilters.getFluids()[0];
|
||||||
|
|
||||||
|
if (slot != null) {
|
||||||
|
FluidStack stack = network.getFluidStorage().get(slot, compare);
|
||||||
|
|
||||||
|
powered = isPowered(stack == null ? null : stack.amount);
|
||||||
} else {
|
} else {
|
||||||
powered = false;
|
powered = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update() {
|
public void update() {
|
||||||
@@ -152,6 +152,29 @@ public class TileDetector extends TileNode implements IComparable {
|
|||||||
return powered;
|
return powered;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isPowered(Integer size) {
|
||||||
|
if (size != null) {
|
||||||
|
switch (mode) {
|
||||||
|
case MODE_UNDER:
|
||||||
|
return size < amount;
|
||||||
|
case MODE_EQUAL:
|
||||||
|
return size == amount;
|
||||||
|
case MODE_ABOVE:
|
||||||
|
return size > amount;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (mode == MODE_UNDER && amount != 0) {
|
||||||
|
return true;
|
||||||
|
} else if (mode == MODE_EQUAL && amount == 0) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getCompare() {
|
public int getCompare() {
|
||||||
return compare;
|
return compare;
|
||||||
@@ -180,7 +203,12 @@ public class TileDetector extends TileNode implements IComparable {
|
|||||||
amount = tag.getInteger(NBT_AMOUNT);
|
amount = tag.getInteger(NBT_AMOUNT);
|
||||||
}
|
}
|
||||||
|
|
||||||
readItems(filter, 0, tag);
|
if (tag.hasKey(NBT_TYPE)) {
|
||||||
|
type = tag.getInteger(NBT_TYPE);
|
||||||
|
}
|
||||||
|
|
||||||
|
readItems(itemFilters, 0, tag);
|
||||||
|
readItems(fluidFilters, 1, tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -190,8 +218,10 @@ public class TileDetector extends TileNode implements IComparable {
|
|||||||
tag.setInteger(NBT_COMPARE, compare);
|
tag.setInteger(NBT_COMPARE, compare);
|
||||||
tag.setInteger(NBT_MODE, mode);
|
tag.setInteger(NBT_MODE, mode);
|
||||||
tag.setInteger(NBT_AMOUNT, amount);
|
tag.setInteger(NBT_AMOUNT, amount);
|
||||||
|
tag.setInteger(NBT_TYPE, type);
|
||||||
|
|
||||||
writeItems(filter, 0, tag);
|
writeItems(itemFilters, 0, tag);
|
||||||
|
writeItems(fluidFilters, 1, tag);
|
||||||
|
|
||||||
return tag;
|
return tag;
|
||||||
}
|
}
|
||||||
@@ -213,11 +243,28 @@ public class TileDetector extends TileNode implements IComparable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public IItemHandler getInventory() {
|
public IItemHandler getInventory() {
|
||||||
return filter;
|
return itemFilters;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRedstoneMode(RedstoneMode mode) {
|
public void setRedstoneMode(RedstoneMode mode) {
|
||||||
// NO OP
|
// NO OP
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getType() {
|
||||||
|
return worldObj.isRemote ? TYPE.getValue() : type;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setType(int type) {
|
||||||
|
this.type = type;
|
||||||
|
|
||||||
|
markDirty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IItemHandler getFilterInventory() {
|
||||||
|
return getType() == IType.ITEMS ? itemFilters : fluidFilters;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user