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