diff --git a/src/main/java/refinedstorage/gui/GuiController.java b/src/main/java/refinedstorage/gui/GuiController.java index da24e5feb..dd5b21000 100755 --- a/src/main/java/refinedstorage/gui/GuiController.java +++ b/src/main/java/refinedstorage/gui/GuiController.java @@ -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())); } } diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonMode.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonMode.java index 368a55646..e88283ad7 100755 --- a/src/main/java/refinedstorage/gui/sidebutton/SideButtonMode.java +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonMode.java @@ -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); } } diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonRedstoneMode.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonRedstoneMode.java index a891bf62a..77e499eb2 100755 --- a/src/main/java/refinedstorage/gui/sidebutton/SideButtonRedstoneMode.java +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonRedstoneMode.java @@ -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); } } diff --git a/src/main/java/refinedstorage/tile/TileConstructor.java b/src/main/java/refinedstorage/tile/TileConstructor.java index 044d38f1d..ef4eb160f 100755 --- a/src/main/java/refinedstorage/tile/TileConstructor.java +++ b/src/main/java/refinedstorage/tile/TileConstructor.java @@ -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"; diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index 7be78dec7..0ecf5f05a 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -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 ENERGY_USAGE = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @Override + public Integer getValue(TileController tile) { + return tile.getEnergyUsage(); + } + }); + + public static final TileDataParameter ENERGY_STORED = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @Override + public Integer getValue(TileController tile) { + return tile.getEnergy().getEnergyStored(); + } + }); + + public static final TileDataParameter ENERGY_CAPACITY = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @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 clientNodes = new ArrayList(); 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()); diff --git a/src/main/java/refinedstorage/tile/TileDestructor.java b/src/main/java/refinedstorage/tile/TileDestructor.java index af7492654..890398ec9 100755 --- a/src/main/java/refinedstorage/tile/TileDestructor.java +++ b/src/main/java/refinedstorage/tile/TileDestructor.java @@ -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 drops = frontBlockState.getBlock().getDrops(worldObj, front, frontBlockState, 0); worldObj.playEvent(null, 2001, front, Block.getStateId(frontBlockState)); diff --git a/src/main/java/refinedstorage/tile/TileDetector.java b/src/main/java/refinedstorage/tile/TileDetector.java index 7c71e11f5..82aa9ef2b 100755 --- a/src/main/java/refinedstorage/tile/TileDetector.java +++ b/src/main/java/refinedstorage/tile/TileDetector.java @@ -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 MODE = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { @Override diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index 96a1e4a70..fde147909 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -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() { diff --git a/src/main/java/refinedstorage/tile/TileExporter.java b/src/main/java/refinedstorage/tile/TileExporter.java index 5421d2e5a..b6ccf906f 100755 --- a/src/main/java/refinedstorage/tile/TileExporter.java +++ b/src/main/java/refinedstorage/tile/TileExporter.java @@ -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"; diff --git a/src/main/java/refinedstorage/tile/TileImporter.java b/src/main/java/refinedstorage/tile/TileImporter.java index 055e48d84..15a2c3129 100755 --- a/src/main/java/refinedstorage/tile/TileImporter.java +++ b/src/main/java/refinedstorage/tile/TileImporter.java @@ -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; diff --git a/src/main/java/refinedstorage/tile/TileInterface.java b/src/main/java/refinedstorage/tile/TileInterface.java index 5783604fc..3476c3330 100755 --- a/src/main/java/refinedstorage/tile/TileInterface.java +++ b/src/main/java/refinedstorage/tile/TileInterface.java @@ -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"; diff --git a/src/main/java/refinedstorage/tile/TileNode.java b/src/main/java/refinedstorage/tile/TileNode.java index b663c612e..fa3236977 100755 --- a/src/main/java/refinedstorage/tile/TileNode.java +++ b/src/main/java/refinedstorage/tile/TileNode.java @@ -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() { - @Override - public Integer getValue(TileNode tile) { - return tile.redstoneMode.id; - } - }, new ITileDataConsumer() { - @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; } diff --git a/src/main/java/refinedstorage/tile/TileStorage.java b/src/main/java/refinedstorage/tile/TileStorage.java index 603afab0a..a11a647d2 100755 --- a/src/main/java/refinedstorage/tile/TileStorage.java +++ b/src/main/java/refinedstorage/tile/TileStorage.java @@ -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() { @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); diff --git a/src/main/java/refinedstorage/tile/config/ICompareConfig.java b/src/main/java/refinedstorage/tile/config/IComparable.java similarity index 76% rename from src/main/java/refinedstorage/tile/config/ICompareConfig.java rename to src/main/java/refinedstorage/tile/config/IComparable.java index 6a3f53110..509845221 100755 --- a/src/main/java/refinedstorage/tile/config/ICompareConfig.java +++ b/src/main/java/refinedstorage/tile/config/IComparable.java @@ -7,17 +7,17 @@ import refinedstorage.tile.data.ITileDataProducer; import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; -public interface ICompareConfig { - static TileDataParameter createConfigParameter() { +public interface IComparable { + static TileDataParameter createParameter() { return TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { @Override public Integer getValue(T tile) { - return ((ICompareConfig) tile).getCompare(); + return ((IComparable) tile).getCompare(); } }, new ITileDataConsumer() { @Override public void setValue(T tile, Integer value) { - ((ICompareConfig) tile).setCompare(value); + ((IComparable) tile).setCompare(value); } }); } diff --git a/src/main/java/refinedstorage/tile/config/IFilterable.java b/src/main/java/refinedstorage/tile/config/IFilterable.java new file mode 100755 index 000000000..230d8b490 --- /dev/null +++ b/src/main/java/refinedstorage/tile/config/IFilterable.java @@ -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 TileDataParameter createParameter() { + return TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @Override + public Integer getValue(T tile) { + return ((IFilterable) tile).getMode(); + } + }, new ITileDataConsumer() { + @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(); +} diff --git a/src/main/java/refinedstorage/tile/config/IModeConfig.java b/src/main/java/refinedstorage/tile/config/IModeConfig.java deleted file mode 100755 index b64dfdc52..000000000 --- a/src/main/java/refinedstorage/tile/config/IModeConfig.java +++ /dev/null @@ -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 TileDataParameter createConfigParameter() { - return TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { - @Override - public Integer getValue(T tile) { - return ((IModeConfig) tile).getMode(); - } - }, new ITileDataConsumer() { - @Override - public void setValue(T tile, Integer value) { - if (value == WHITELIST || value == BLACKLIST) { - ((IModeConfig) tile).setMode(value); - } - } - }); - } - - void setMode(int mode); - - int getMode(); -} diff --git a/src/main/java/refinedstorage/tile/config/IPrioritizable.java b/src/main/java/refinedstorage/tile/config/IPrioritizable.java index 568fdb310..bd6bd3842 100755 --- a/src/main/java/refinedstorage/tile/config/IPrioritizable.java +++ b/src/main/java/refinedstorage/tile/config/IPrioritizable.java @@ -8,7 +8,7 @@ import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; public interface IPrioritizable { - static TileDataParameter createConfigParameter() { + static TileDataParameter createParameter() { return TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { @Override public Integer getValue(T tile) { diff --git a/src/main/java/refinedstorage/tile/config/IRedstoneModeConfig.java b/src/main/java/refinedstorage/tile/config/IRedstoneConfigurable.java similarity index 74% rename from src/main/java/refinedstorage/tile/config/IRedstoneModeConfig.java rename to src/main/java/refinedstorage/tile/config/IRedstoneConfigurable.java index 21d0dcd58..6a4e4d830 100755 --- a/src/main/java/refinedstorage/tile/config/IRedstoneModeConfig.java +++ b/src/main/java/refinedstorage/tile/config/IRedstoneConfigurable.java @@ -1,6 +1,6 @@ package refinedstorage.tile.config; -public interface IRedstoneModeConfig { +public interface IRedstoneConfigurable { RedstoneMode getRedstoneMode(); void setRedstoneMode(RedstoneMode mode); diff --git a/src/main/java/refinedstorage/tile/config/ModeFilter.java b/src/main/java/refinedstorage/tile/config/ModeFilter.java deleted file mode 100755 index 7fa90f9a5..000000000 --- a/src/main/java/refinedstorage/tile/config/ModeFilter.java +++ /dev/null @@ -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; - } -} diff --git a/src/main/java/refinedstorage/tile/config/RedstoneMode.java b/src/main/java/refinedstorage/tile/config/RedstoneMode.java index 7586df4f0..c2b212a72 100755 --- a/src/main/java/refinedstorage/tile/config/RedstoneMode.java +++ b/src/main/java/refinedstorage/tile/config/RedstoneMode.java @@ -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 TileDataParameter createParameter() { + return TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @Override + public Integer getValue(T tile) { + return ((IRedstoneConfigurable) tile).getRedstoneMode().ordinal(); + } + }, new ITileDataConsumer() { + @Override + public void setValue(T tile, Integer value) { + ((IRedstoneConfigurable) tile).setRedstoneMode(RedstoneMode.getById(value)); + } + }); } } diff --git a/src/main/java/refinedstorage/tile/externalstorage/DeepStorageUnitStorage.java b/src/main/java/refinedstorage/tile/externalstorage/DeepStorageUnitStorage.java index d95498851..77672cb07 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/DeepStorageUnitStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/DeepStorageUnitStorage.java @@ -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()) { diff --git a/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java b/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java index 4649b2442..6572a4681 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java @@ -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(); diff --git a/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java b/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java index 5ad983092..3f1e5943e 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java @@ -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); } diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index bebd2d650..d75034b0f 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -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() { @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 storages = new ArrayList(); private int lastDrawerCount;