Sync controller redstone state and energy state

This commit is contained in:
Raoul Van den Berge
2016-08-05 15:36:45 +02:00
parent 27ddf14fcb
commit 5b5e2239a8
24 changed files with 203 additions and 208 deletions

View File

@@ -3,6 +3,7 @@ package refinedstorage.gui;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.RenderHelper;
import refinedstorage.container.ContainerController;
import refinedstorage.gui.sidebutton.SideButtonRedstoneMode;
import refinedstorage.tile.TileController;
import java.util.List;
@@ -27,7 +28,7 @@ public class GuiController extends GuiBase {
@Override
public void init(int x, int y) {
//addSideButton(new SideButtonRedstoneMode(controller));
addSideButton(new SideButtonRedstoneMode(TileController.REDSTONE_MODE));
}
@Override
@@ -99,7 +100,7 @@ public class GuiController extends GuiBase {
}
if (inBounds(barX, barY, barWidth, barHeight, mouseX, mouseY)) {
drawTooltip(mouseX, mouseY, t("misc.refinedstorage:energy_usage", controller.getEnergyUsage()) + "\n" + t("misc.refinedstorage:energy_stored", controller.getEnergy().getEnergyStored(), controller.getEnergy().getMaxEnergyStored()));
drawTooltip(mouseX, mouseY, t("misc.refinedstorage:energy_usage", TileController.ENERGY_USAGE.getValue()) + "\n" + t("misc.refinedstorage:energy_stored", TileController.ENERGY_STORED.getValue(), TileController.ENERGY_CAPACITY.getValue()));
}
}

View File

@@ -2,7 +2,7 @@ package refinedstorage.gui.sidebutton;
import net.minecraft.util.text.TextFormatting;
import refinedstorage.gui.GuiBase;
import refinedstorage.tile.config.IModeConfig;
import refinedstorage.tile.config.IFilterable;
import refinedstorage.tile.data.TileDataManager;
import refinedstorage.tile.data.TileDataParameter;
@@ -15,18 +15,18 @@ public class SideButtonMode extends SideButton {
@Override
public String getTooltip(GuiBase gui) {
return TextFormatting.GREEN + gui.t("sidebutton.refinedstorage:mode") + TextFormatting.RESET + "\n" + gui.t("sidebutton.refinedstorage:mode." + (parameter.getValue() == IModeConfig.WHITELIST ? "whitelist" : "blacklist"));
return TextFormatting.GREEN + gui.t("sidebutton.refinedstorage:mode") + TextFormatting.RESET + "\n" + gui.t("sidebutton.refinedstorage:mode." + (parameter.getValue() == IFilterable.WHITELIST ? "whitelist" : "blacklist"));
}
@Override
public void draw(GuiBase gui, int x, int y) {
gui.bindTexture("icons.png");
gui.drawTexture(x, y + 1, parameter.getValue() == IModeConfig.WHITELIST ? 0 : 16, 64, 16, 16);
gui.drawTexture(x, y + 1, parameter.getValue() == IFilterable.WHITELIST ? 0 : 16, 64, 16, 16);
}
@Override
public void actionPerformed() {
TileDataManager.setParameter(parameter, parameter.getValue() == IModeConfig.WHITELIST ? IModeConfig.BLACKLIST : IModeConfig.WHITELIST);
TileDataManager.setParameter(parameter, parameter.getValue() == IFilterable.WHITELIST ? IFilterable.BLACKLIST : IFilterable.WHITELIST);
}
}

View File

@@ -2,7 +2,6 @@ package refinedstorage.gui.sidebutton;
import net.minecraft.util.text.TextFormatting;
import refinedstorage.gui.GuiBase;
import refinedstorage.tile.config.RedstoneMode;
import refinedstorage.tile.data.TileDataManager;
import refinedstorage.tile.data.TileDataParameter;
@@ -26,6 +25,6 @@ public class SideButtonRedstoneMode extends SideButton {
@Override
public void actionPerformed() {
TileDataManager.setParameter(parameter, RedstoneMode.getById(parameter.getValue()).next().id);
TileDataManager.setParameter(parameter, parameter.getValue() + 1);
}
}

View File

@@ -16,11 +16,11 @@ import refinedstorage.container.slot.SlotSpecimen;
import refinedstorage.inventory.ItemHandlerBasic;
import refinedstorage.inventory.ItemHandlerUpgrade;
import refinedstorage.item.ItemUpgrade;
import refinedstorage.tile.config.ICompareConfig;
import refinedstorage.tile.config.IComparable;
import refinedstorage.tile.data.TileDataParameter;
public class TileConstructor extends TileNode implements ICompareConfig {
public static final TileDataParameter COMPARE = ICompareConfig.createConfigParameter();
public class TileConstructor extends TileNode implements IComparable {
public static final TileDataParameter COMPARE = IComparable.createParameter();
private static final String NBT_COMPARE = "Compare";

View File

@@ -8,6 +8,7 @@ import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.common.capabilities.Capability;
@@ -41,13 +42,39 @@ import refinedstorage.integration.tesla.IntegrationTesla;
import refinedstorage.item.ItemPattern;
import refinedstorage.network.MessageGridDelta;
import refinedstorage.network.MessageGridUpdate;
import refinedstorage.tile.config.IRedstoneModeConfig;
import refinedstorage.tile.config.IRedstoneConfigurable;
import refinedstorage.tile.config.RedstoneMode;
import refinedstorage.tile.data.ITileDataProducer;
import refinedstorage.tile.data.TileDataManager;
import refinedstorage.tile.data.TileDataParameter;
import refinedstorage.tile.externalstorage.ExternalStorage;
import java.util.*;
public class TileController extends TileBase implements INetworkMaster, IEnergyReceiver, IRedstoneModeConfig {
public class TileController extends TileBase implements INetworkMaster, IEnergyReceiver, IRedstoneConfigurable {
public static final TileDataParameter REDSTONE_MODE = RedstoneMode.createParameter();
public static final TileDataParameter<Integer> ENERGY_USAGE = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer<Integer, TileController>() {
@Override
public Integer getValue(TileController tile) {
return tile.getEnergyUsage();
}
});
public static final TileDataParameter<Integer> ENERGY_STORED = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer<Integer, TileController>() {
@Override
public Integer getValue(TileController tile) {
return tile.getEnergy().getEnergyStored();
}
});
public static final TileDataParameter<Integer> ENERGY_CAPACITY = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer<Integer, TileController>() {
@Override
public Integer getValue(TileController tile) {
return tile.getEnergy().getMaxEnergyStored();
}
});
public static final String NBT_ENERGY = "Energy";
public static final String NBT_ENERGY_CAPACITY = "EnergyCapacity";
@@ -85,7 +112,6 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
private EnergyStorage energy = new EnergyStorage(RefinedStorage.INSTANCE.controllerCapacity);
private IControllerEnergyIC2 energyEU;
private ControllerEnergyTesla energyTesla;
private int energyUsage;
private int lastEnergyDisplay;
private int lastEnergyComparator;
@@ -99,6 +125,11 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
private List<ClientNode> clientNodes = new ArrayList<ClientNode>();
public TileController() {
dataManager.addWatchedParameter(REDSTONE_MODE);
dataManager.addWatchedParameter(ENERGY_USAGE);
dataManager.addWatchedParameter(ENERGY_STORED);
dataManager.addParameter(ENERGY_CAPACITY);
if (IntegrationIC2.isLoaded()) {
this.energyEU = new ControllerEnergyIC2(this);
} else {
@@ -500,7 +531,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
energy.writeToNBT(tag);
tag.setInteger(RedstoneMode.NBT, redstoneMode.id);
tag.setInteger(RedstoneMode.NBT, redstoneMode.ordinal());
NBTTagList list = new NBTTagList();
@@ -579,19 +610,15 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
@Override
public int getEnergyUsage() {
if (!worldObj.isRemote) {
int usage = RefinedStorage.INSTANCE.controllerBaseUsage;
int usage = RefinedStorage.INSTANCE.controllerBaseUsage;
for (INetworkNode node : nodeGraph.all()) {
if (node.canUpdate()) {
usage += node.getEnergyUsage();
}
for (INetworkNode node : nodeGraph.all()) {
if (node.canUpdate()) {
usage += node.getEnergyUsage();
}
return usage;
}
return energyUsage;
return usage;
}
public EnumControllerType getType() {
@@ -602,7 +629,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
return type == null ? EnumControllerType.NORMAL : type;
}
// @TODO: Make this work as well
// @TODO: Sync client nodes
/*@Override
public void readContainerData(ByteBuf buf) {
energy.setEnergyStored(buf.readInt());

View File

@@ -14,16 +14,15 @@ import refinedstorage.RefinedStorage;
import refinedstorage.inventory.ItemHandlerBasic;
import refinedstorage.inventory.ItemHandlerUpgrade;
import refinedstorage.item.ItemUpgrade;
import refinedstorage.tile.config.ICompareConfig;
import refinedstorage.tile.config.IModeConfig;
import refinedstorage.tile.config.ModeFilter;
import refinedstorage.tile.config.IComparable;
import refinedstorage.tile.config.IFilterable;
import refinedstorage.tile.data.TileDataParameter;
import java.util.List;
public class TileDestructor extends TileNode implements ICompareConfig, IModeConfig {
public static final TileDataParameter COMPARE = ICompareConfig.createConfigParameter();
public static final TileDataParameter MODE = IModeConfig.createConfigParameter();
public class TileDestructor extends TileNode implements IComparable, IFilterable {
public static final TileDataParameter COMPARE = IComparable.createParameter();
public static final TileDataParameter MODE = IFilterable.createParameter();
private static final String NBT_COMPARE = "Compare";
private static final String NBT_MODE = "Mode";
@@ -34,7 +33,7 @@ public class TileDestructor extends TileNode implements ICompareConfig, IModeCon
private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED);
private int compare = 0;
private int mode = IModeConfig.WHITELIST;
private int mode = IFilterable.WHITELIST;
public TileDestructor() {
dataManager.addWatchedParameter(COMPARE);
@@ -55,7 +54,7 @@ public class TileDestructor extends TileNode implements ICompareConfig, IModeCon
ItemStack frontStack = frontBlockState.getBlock().getItem(worldObj, front, frontBlockState);
if (frontStack != null) {
if (ModeFilter.respectsMode(filters, mode, compare, frontStack)) {
if (IFilterable.canTake(filters, mode, compare, frontStack)) {
List<ItemStack> drops = frontBlockState.getBlock().getDrops(worldObj, front, frontBlockState, 0);
worldObj.playEvent(null, 2001, front, Block.getStateId(frontBlockState));

View File

@@ -8,15 +8,15 @@ import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageBlocks;
import refinedstorage.api.network.INetworkMaster;
import refinedstorage.inventory.ItemHandlerBasic;
import refinedstorage.tile.config.ICompareConfig;
import refinedstorage.tile.config.IComparable;
import refinedstorage.tile.config.RedstoneMode;
import refinedstorage.tile.data.ITileDataConsumer;
import refinedstorage.tile.data.ITileDataProducer;
import refinedstorage.tile.data.TileDataManager;
import refinedstorage.tile.data.TileDataParameter;
public class TileDetector extends TileNode implements ICompareConfig {
public static final TileDataParameter COMPARE = ICompareConfig.createConfigParameter();
public class TileDetector extends TileNode implements IComparable {
public static final TileDataParameter COMPARE = IComparable.createParameter();
public static final TileDataParameter<Integer> MODE = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer<Integer, TileDetector>() {
@Override

View File

@@ -18,19 +18,18 @@ import refinedstorage.apiimpl.storage.NBTStorage;
import refinedstorage.block.EnumStorageType;
import refinedstorage.inventory.ItemHandlerBasic;
import refinedstorage.inventory.ItemValidatorBasic;
import refinedstorage.tile.config.ICompareConfig;
import refinedstorage.tile.config.IModeConfig;
import refinedstorage.tile.config.IComparable;
import refinedstorage.tile.config.IFilterable;
import refinedstorage.tile.config.IPrioritizable;
import refinedstorage.tile.config.ModeFilter;
import refinedstorage.tile.data.TileDataManager;
import refinedstorage.tile.data.TileDataParameter;
import java.util.List;
public class TileDiskDrive extends TileNode implements IStorageProvider, IStorageGui, ICompareConfig, IModeConfig, IPrioritizable {
public static final TileDataParameter PRIORITY = IPrioritizable.createConfigParameter();
public static final TileDataParameter COMPARE = ICompareConfig.createConfigParameter();
public static final TileDataParameter MODE = IModeConfig.createConfigParameter();
public class TileDiskDrive extends TileNode implements IStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable {
public static final TileDataParameter PRIORITY = IPrioritizable.createParameter();
public static final TileDataParameter COMPARE = IComparable.createParameter();
public static final TileDataParameter MODE = IFilterable.createParameter();
public class Storage extends NBTStorage {
public Storage(ItemStack disk) {
@@ -44,7 +43,7 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag
@Override
public ItemStack insertItem(ItemStack stack, int size, boolean simulate) {
if (!ModeFilter.respectsMode(getFilters(), mode, getCompare(), stack)) {
if (!IFilterable.canTake(getFilters(), mode, getCompare(), stack)) {
return ItemHandlerHelper.copyStackWithSize(stack, size);
}
@@ -101,7 +100,7 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag
private int priority = 0;
private int compare = 0;
private int mode = IModeConfig.WHITELIST;
private int mode = IFilterable.WHITELIST;
private int stored = 0;
public TileDiskDrive() {

View File

@@ -12,11 +12,11 @@ import refinedstorage.apiimpl.autocrafting.CraftingTaskScheduler;
import refinedstorage.inventory.ItemHandlerBasic;
import refinedstorage.inventory.ItemHandlerUpgrade;
import refinedstorage.item.ItemUpgrade;
import refinedstorage.tile.config.ICompareConfig;
import refinedstorage.tile.config.IComparable;
import refinedstorage.tile.data.TileDataParameter;
public class TileExporter extends TileNode implements ICompareConfig {
public static final TileDataParameter COMPARE = ICompareConfig.createConfigParameter();
public class TileExporter extends TileNode implements IComparable {
public static final TileDataParameter COMPARE = IComparable.createParameter();
private static final String NBT_COMPARE = "Compare";

View File

@@ -10,14 +10,13 @@ import refinedstorage.RefinedStorage;
import refinedstorage.inventory.ItemHandlerBasic;
import refinedstorage.inventory.ItemHandlerUpgrade;
import refinedstorage.item.ItemUpgrade;
import refinedstorage.tile.config.ICompareConfig;
import refinedstorage.tile.config.IModeConfig;
import refinedstorage.tile.config.ModeFilter;
import refinedstorage.tile.config.IComparable;
import refinedstorage.tile.config.IFilterable;
import refinedstorage.tile.data.TileDataParameter;
public class TileImporter extends TileNode implements ICompareConfig, IModeConfig {
public static final TileDataParameter COMPARE = ICompareConfig.createConfigParameter();
public static final TileDataParameter MODE = IModeConfig.createConfigParameter();
public class TileImporter extends TileNode implements IComparable, IFilterable {
public static final TileDataParameter COMPARE = IComparable.createParameter();
public static final TileDataParameter MODE = IFilterable.createParameter();
private static final String NBT_COMPARE = "Compare";
private static final String NBT_MODE = "Mode";
@@ -26,7 +25,7 @@ public class TileImporter extends TileNode implements ICompareConfig, IModeConfi
private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK);
private int compare = 0;
private int mode = IModeConfig.WHITELIST;
private int mode = IFilterable.WHITELIST;
private int currentSlot;
@@ -55,7 +54,7 @@ public class TileImporter extends TileNode implements ICompareConfig, IModeConfi
if (handler.getSlots() > 0) {
ItemStack stack = handler.getStackInSlot(currentSlot);
if (stack == null || !ModeFilter.respectsMode(filters, mode, compare, stack)) {
if (stack == null || !IFilterable.canTake(filters, mode, compare, stack)) {
currentSlot++;
} else if (ticks % upgrades.getSpeed() == 0) {
int quantity = upgrades.hasUpgrade(ItemUpgrade.TYPE_STACK) ? 64 : 1;

View File

@@ -11,11 +11,11 @@ import refinedstorage.RefinedStorage;
import refinedstorage.inventory.ItemHandlerBasic;
import refinedstorage.inventory.ItemHandlerUpgrade;
import refinedstorage.item.ItemUpgrade;
import refinedstorage.tile.config.ICompareConfig;
import refinedstorage.tile.config.IComparable;
import refinedstorage.tile.data.TileDataParameter;
public class TileInterface extends TileNode implements ICompareConfig {
public static final TileDataParameter COMPARE = ICompareConfig.createConfigParameter();
public class TileInterface extends TileNode implements IComparable {
public static final TileDataParameter COMPARE = IComparable.createParameter();
private static final String NBT_COMPARE = "Compare";

View File

@@ -2,36 +2,18 @@ package refinedstorage.tile;
import net.minecraft.block.Block;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import refinedstorage.api.network.INetworkMaster;
import refinedstorage.api.network.INetworkNode;
import refinedstorage.api.network.NetworkUtils;
import refinedstorage.block.BlockNode;
import refinedstorage.tile.config.IRedstoneModeConfig;
import refinedstorage.tile.config.IRedstoneConfigurable;
import refinedstorage.tile.config.RedstoneMode;
import refinedstorage.tile.data.ITileDataConsumer;
import refinedstorage.tile.data.ITileDataProducer;
import refinedstorage.tile.data.TileDataManager;
import refinedstorage.tile.data.TileDataParameter;
public abstract class TileNode extends TileBase implements INetworkNode, IRedstoneModeConfig {
public static final TileDataParameter REDSTONE_MODE = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer<Integer, TileNode>() {
@Override
public Integer getValue(TileNode tile) {
return tile.redstoneMode.id;
}
}, new ITileDataConsumer<Integer, TileNode>() {
@Override
public void setValue(TileNode tile, Integer value) {
RedstoneMode mode = RedstoneMode.getById(value);
if (mode != null) {
tile.redstoneMode = mode;
}
}
});
public abstract class TileNode extends TileBase implements INetworkNode, IRedstoneConfigurable {
public static final TileDataParameter REDSTONE_MODE = RedstoneMode.createParameter();
private static final String NBT_CONNECTED = "Connected";
@@ -164,7 +146,7 @@ public abstract class TileNode extends TileBase implements INetworkNode, IRedsto
public NBTTagCompound write(NBTTagCompound tag) {
super.write(tag);
tag.setInteger(RedstoneMode.NBT, redstoneMode.id);
tag.setInteger(RedstoneMode.NBT, redstoneMode.ordinal());
return tag;
}

View File

@@ -14,20 +14,19 @@ import refinedstorage.apiimpl.storage.NBTStorage;
import refinedstorage.block.BlockStorage;
import refinedstorage.block.EnumStorageType;
import refinedstorage.inventory.ItemHandlerBasic;
import refinedstorage.tile.config.ICompareConfig;
import refinedstorage.tile.config.IModeConfig;
import refinedstorage.tile.config.IComparable;
import refinedstorage.tile.config.IFilterable;
import refinedstorage.tile.config.IPrioritizable;
import refinedstorage.tile.config.ModeFilter;
import refinedstorage.tile.data.ITileDataProducer;
import refinedstorage.tile.data.TileDataManager;
import refinedstorage.tile.data.TileDataParameter;
import java.util.List;
public class TileStorage extends TileNode implements IStorageProvider, IStorageGui, ICompareConfig, IModeConfig, IPrioritizable {
public static final TileDataParameter PRIORITY = IPrioritizable.createConfigParameter();
public static final TileDataParameter COMPARE = ICompareConfig.createConfigParameter();
public static final TileDataParameter MODE = IModeConfig.createConfigParameter();
public class TileStorage extends TileNode implements IStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable {
public static final TileDataParameter PRIORITY = IPrioritizable.createParameter();
public static final TileDataParameter COMPARE = IComparable.createParameter();
public static final TileDataParameter MODE = IFilterable.createParameter();
public static final TileDataParameter STORED = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer<Integer, TileStorage>() {
@Override
public Integer getValue(TileStorage tile) {
@@ -47,7 +46,7 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG
@Override
public ItemStack insertItem(ItemStack stack, int size, boolean simulate) {
if (!ModeFilter.respectsMode(filters, mode, compare, stack)) {
if (!IFilterable.canTake(filters, mode, compare, stack)) {
return ItemHandlerHelper.copyStackWithSize(stack, size);
}
@@ -71,7 +70,7 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG
private int priority = 0;
private int compare = 0;
private int mode = IModeConfig.WHITELIST;
private int mode = IFilterable.WHITELIST;
public TileStorage() {
dataManager.addWatchedParameter(PRIORITY);

View File

@@ -7,17 +7,17 @@ import refinedstorage.tile.data.ITileDataProducer;
import refinedstorage.tile.data.TileDataManager;
import refinedstorage.tile.data.TileDataParameter;
public interface ICompareConfig {
static <T extends TileEntity> TileDataParameter createConfigParameter() {
public interface IComparable {
static <T extends TileEntity> TileDataParameter createParameter() {
return TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer<Integer, T>() {
@Override
public Integer getValue(T tile) {
return ((ICompareConfig) tile).getCompare();
return ((IComparable) tile).getCompare();
}
}, new ITileDataConsumer<Integer, T>() {
@Override
public void setValue(T tile, Integer value) {
((ICompareConfig) tile).setCompare(value);
((IComparable) tile).setCompare(value);
}
});
}

View File

@@ -0,0 +1,68 @@
package refinedstorage.tile.config;
import net.minecraft.item.ItemStack;
import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.items.IItemHandler;
import refinedstorage.api.storage.CompareUtils;
import refinedstorage.tile.data.ITileDataConsumer;
import refinedstorage.tile.data.ITileDataProducer;
import refinedstorage.tile.data.TileDataManager;
import refinedstorage.tile.data.TileDataParameter;
public interface IFilterable {
int WHITELIST = 0;
int BLACKLIST = 1;
static <T extends TileEntity> TileDataParameter createParameter() {
return TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer<Integer, T>() {
@Override
public Integer getValue(T tile) {
return ((IFilterable) tile).getMode();
}
}, new ITileDataConsumer<Integer, T>() {
@Override
public void setValue(T tile, Integer value) {
if (value == WHITELIST || value == BLACKLIST) {
((IFilterable) tile).setMode(value);
}
}
});
}
static boolean canTake(IItemHandler filters, int mode, int compare, ItemStack stack) {
if (mode == WHITELIST) {
int slots = 0;
for (int i = 0; i < filters.getSlots(); ++i) {
ItemStack slot = filters.getStackInSlot(i);
if (slot != null) {
slots++;
if (CompareUtils.compareStack(slot, stack, compare)) {
return true;
}
}
}
return slots == 0;
} else if (mode == BLACKLIST) {
for (int i = 0; i < filters.getSlots(); ++i) {
ItemStack slot = filters.getStackInSlot(i);
if (slot != null && CompareUtils.compareStack(slot, stack, compare)) {
return false;
}
}
return true;
}
return false;
}
void setMode(int mode);
int getMode();
}

View File

@@ -1,33 +0,0 @@
package refinedstorage.tile.config;
import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.tileentity.TileEntity;
import refinedstorage.tile.data.ITileDataConsumer;
import refinedstorage.tile.data.ITileDataProducer;
import refinedstorage.tile.data.TileDataManager;
import refinedstorage.tile.data.TileDataParameter;
public interface IModeConfig {
int WHITELIST = 0;
int BLACKLIST = 1;
static <T extends TileEntity> TileDataParameter createConfigParameter() {
return TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer<Integer, T>() {
@Override
public Integer getValue(T tile) {
return ((IModeConfig) tile).getMode();
}
}, new ITileDataConsumer<Integer, T>() {
@Override
public void setValue(T tile, Integer value) {
if (value == WHITELIST || value == BLACKLIST) {
((IModeConfig) tile).setMode(value);
}
}
});
}
void setMode(int mode);
int getMode();
}

View File

@@ -8,7 +8,7 @@ import refinedstorage.tile.data.TileDataManager;
import refinedstorage.tile.data.TileDataParameter;
public interface IPrioritizable {
static <T extends TileEntity> TileDataParameter createConfigParameter() {
static <T extends TileEntity> TileDataParameter createParameter() {
return TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer<Integer, T>() {
@Override
public Integer getValue(T tile) {

View File

@@ -1,6 +1,6 @@
package refinedstorage.tile.config;
public interface IRedstoneModeConfig {
public interface IRedstoneConfigurable {
RedstoneMode getRedstoneMode();
void setRedstoneMode(RedstoneMode mode);

View File

@@ -1,40 +0,0 @@
package refinedstorage.tile.config;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.IItemHandler;
import refinedstorage.api.storage.CompareUtils;
// @TODO: Move into IModeConfig
public final class ModeFilter {
public static boolean respectsMode(IItemHandler filters, int mode, int compare, ItemStack stack) {
if (mode == IModeConfig.WHITELIST) {
int slots = 0;
for (int i = 0; i < filters.getSlots(); ++i) {
ItemStack slot = filters.getStackInSlot(i);
if (slot != null) {
slots++;
if (CompareUtils.compareStack(slot, stack, compare)) {
return true;
}
}
}
return slots == 0;
} else if (mode == IModeConfig.BLACKLIST) {
for (int i = 0; i < filters.getSlots(); ++i) {
ItemStack slot = filters.getStackInSlot(i);
if (slot != null && CompareUtils.compareStack(slot, stack, compare)) {
return false;
}
}
return true;
}
return false;
}
}

View File

@@ -1,31 +1,19 @@
package refinedstorage.tile.config;
import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import refinedstorage.tile.data.ITileDataConsumer;
import refinedstorage.tile.data.ITileDataProducer;
import refinedstorage.tile.data.TileDataManager;
import refinedstorage.tile.data.TileDataParameter;
public enum RedstoneMode {
IGNORE(0),
HIGH(1),
LOW(2);
IGNORE, HIGH, LOW;
public static final String NBT = "RedstoneMode";
public final int id;
RedstoneMode(int id) {
this.id = id;
}
public RedstoneMode next() {
RedstoneMode next = getById(id + 1);
if (next == null) {
return getById(0);
}
return next;
}
public boolean isEnabled(World world, BlockPos pos) {
switch (this) {
case IGNORE:
@@ -39,14 +27,21 @@ public enum RedstoneMode {
return false;
}
// @TOOD: Remove id field
public static RedstoneMode getById(int id) {
for (RedstoneMode control : values()) {
if (control.id == id) {
return control;
}
}
return id < 0 || id >= values().length ? IGNORE : values()[id];
}
return null;
public static <T extends TileEntity> TileDataParameter createParameter() {
return TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer<Integer, T>() {
@Override
public Integer getValue(T tile) {
return ((IRedstoneConfigurable) tile).getRedstoneMode().ordinal();
}
}, new ITileDataConsumer<Integer, T>() {
@Override
public void setValue(T tile, Integer value) {
((IRedstoneConfigurable) tile).setRedstoneMode(RedstoneMode.getById(value));
}
});
}
}

View File

@@ -4,7 +4,7 @@ import net.minecraft.item.ItemStack;
import net.minecraftforge.items.ItemHandlerHelper;
import powercrystals.minefactoryreloaded.api.IDeepStorageUnit;
import refinedstorage.api.storage.CompareUtils;
import refinedstorage.tile.config.ModeFilter;
import refinedstorage.tile.config.IFilterable;
import javax.annotation.Nonnull;
import java.util.Collections;
@@ -35,7 +35,7 @@ public class DeepStorageUnitStorage extends ExternalStorage {
@Override
public ItemStack insertItem(@Nonnull ItemStack stack, int size, boolean simulate) {
if (ModeFilter.respectsMode(externalStorage.getFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) {
if (IFilterable.canTake(externalStorage.getFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) {
if (unit.getStoredItemType() != null) {
if (CompareUtils.compareStackNoQuantity(unit.getStoredItemType(), stack)) {
if (getStored() + size > unit.getMaxStoredCount()) {

View File

@@ -5,7 +5,7 @@ import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.IVoidable;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.ItemHandlerHelper;
import refinedstorage.api.storage.CompareUtils;
import refinedstorage.tile.config.ModeFilter;
import refinedstorage.tile.config.IFilterable;
import java.util.Collections;
import java.util.List;
@@ -39,7 +39,7 @@ public class DrawerStorage extends ExternalStorage {
@Override
public ItemStack insertItem(ItemStack stack, int size, boolean simulate) {
if (ModeFilter.respectsMode(externalStorage.getFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack) && drawer.canItemBeStored(stack)) {
if (IFilterable.canTake(externalStorage.getFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack) && drawer.canItemBeStored(stack)) {
if (!drawer.isEmpty()) {
if (getStored() + size > drawer.getMaxCapacity(stack)) {
int remainingSpace = getCapacity() - getStored();

View File

@@ -4,7 +4,7 @@ import net.minecraft.item.ItemStack;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.ItemHandlerHelper;
import refinedstorage.api.storage.CompareUtils;
import refinedstorage.tile.config.ModeFilter;
import refinedstorage.tile.config.IFilterable;
import java.util.ArrayList;
import java.util.List;
@@ -38,7 +38,7 @@ public class ItemHandlerStorage extends ExternalStorage {
@Override
public ItemStack insertItem(ItemStack stack, int size, boolean simulate) {
if (ModeFilter.respectsMode(externalStorage.getFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) {
if (IFilterable.canTake(externalStorage.getFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) {
return ItemHandlerHelper.insertItem(handler, ItemHandlerHelper.copyStackWithSize(stack, size), simulate);
}

View File

@@ -14,8 +14,8 @@ import refinedstorage.api.storage.IStorageProvider;
import refinedstorage.inventory.ItemHandlerBasic;
import refinedstorage.tile.IStorageGui;
import refinedstorage.tile.TileNode;
import refinedstorage.tile.config.ICompareConfig;
import refinedstorage.tile.config.IModeConfig;
import refinedstorage.tile.config.IComparable;
import refinedstorage.tile.config.IFilterable;
import refinedstorage.tile.config.IPrioritizable;
import refinedstorage.tile.data.ITileDataProducer;
import refinedstorage.tile.data.TileDataManager;
@@ -24,10 +24,10 @@ import refinedstorage.tile.data.TileDataParameter;
import java.util.ArrayList;
import java.util.List;
public class TileExternalStorage extends TileNode implements IStorageProvider, IStorageGui, ICompareConfig, IModeConfig, IPrioritizable {
public static final TileDataParameter PRIORITY = IPrioritizable.createConfigParameter();
public static final TileDataParameter COMPARE = ICompareConfig.createConfigParameter();
public static final TileDataParameter MODE = IModeConfig.createConfigParameter();
public class TileExternalStorage extends TileNode implements IStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable {
public static final TileDataParameter PRIORITY = IPrioritizable.createParameter();
public static final TileDataParameter COMPARE = IComparable.createParameter();
public static final TileDataParameter MODE = IFilterable.createParameter();
public static final TileDataParameter STORED = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer<Integer, TileExternalStorage>() {
@Override
@@ -51,7 +51,7 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I
private int priority = 0;
private int compare = 0;
private int mode = IModeConfig.WHITELIST;
private int mode = IFilterable.WHITELIST;
private List<ExternalStorage> storages = new ArrayList<ExternalStorage>();
private int lastDrawerCount;