diff options
Diffstat (limited to 'src/main/java/gregtech/api/util/GT_CircuitryBehavior.java')
-rw-r--r-- | src/main/java/gregtech/api/util/GT_CircuitryBehavior.java | 321 |
1 files changed, 162 insertions, 159 deletions
diff --git a/src/main/java/gregtech/api/util/GT_CircuitryBehavior.java b/src/main/java/gregtech/api/util/GT_CircuitryBehavior.java index 6cda3c202f..4adf7e0f26 100644 --- a/src/main/java/gregtech/api/util/GT_CircuitryBehavior.java +++ b/src/main/java/gregtech/api/util/GT_CircuitryBehavior.java @@ -1,178 +1,181 @@ package gregtech.api.util; -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.IRedstoneCircuitBlock; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTech_API; +import gregtech.api.interfaces.IRedstoneCircuitBlock; /** * Redstone Circuit Control Code - * + * <p/> * This should make everything possible what a Redstone Computer or BuildCraft Gate could do. * It is intended to use this similar to BC-Gates (for acquiring Data) and RP Logic Gates. * You could write an extremely specified and complex Logic Gate, which works only for you Setup, like * with ComputerCraft, but you would have to write an extra Mod to add that, as it doesn't work Ingame. - * + * <p/> * One can make use of the fact, that ItemStacks can be stored as Integer, so that you can scan * Inventories for specific Items using that. Luckily the Buttons in the GUI enable Copy/Paste of * ItemID+MetaData to Integer, including the WildCard Damage Value when you use rightclick to place it. * You just need to use @GT_Utility.stackToInt(ItemStack aStack) to get it. - * + * <p/> * All Functions run usually in a seperate try/catch Block, so that failed Logic won't crash the TileEntity. */ public abstract class GT_CircuitryBehavior { - /** - * @param aIndex 0 - 1023 are my own Indices, so use other Numbers! - */ - public GT_CircuitryBehavior(int aIndex) { - GregTech_API.sCircuitryBehaviors.put(aIndex, this); - } - - /** - * Initializes the Parameters of this Circuit, all Parameters have been set to 0 right before calling this - * @param aCircuitData, The Data Storage you can use (8 Slots) - * @param aRedstoneCircuitBlock, The Circuit Block MetaTileEntity itself - */ - public abstract void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock); - - /** - * Validates the Parameters of this Circuit when a value has been changed by the GUI - * Also called right after @initParameters and when the Chunk reloads - * @param aCircuitData, The Data Storage you can use (8 Slots and only the first 4 are User definable) - * @param aRedstoneCircuitBlock, The Circuit Block MetaTileEntity itself - */ - public abstract void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock); - - /** - * Called every tick if the Block has enough Energy and if the Block is Active - * @param aCircuitData, The Data Storage you can use (8 Slots) - * @param aRedstoneCircuitBlock, The Circuit Block MetaTileEntity itself - */ - public abstract void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock); - - /** - * If the ItemStack should be displayed. Parameters are between 0 and 3. - */ - public abstract boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex); - - /***************** - * GUI Functions * - *****************/ - - /** - * The Name of the Gate for the GUI - */ - @SideOnly(Side.CLIENT) - public abstract String getName(); - - /** - * The Description of the Gate for the GUI - */ - @SideOnly(Side.CLIENT) - public abstract String getDescription(); - - /** - * The Description of the Data Field for the GUI - */ - @SideOnly(Side.CLIENT) - public abstract String getDataDescription(int[] aCircuitData, int aCircuitDataIndex); - - /** - * How the Integer should be displayed in the GUI. - * null means, that it just displays as regular Number. - */ - @SideOnly(Side.CLIENT) - public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex) { - return null; - } - - - /**************************** - * Useful Utility Functions * - ****************************/ - - /** - * returns if there is Redstone applied to any of the valid Inputs (OR) - */ - public static final boolean getAnyRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) { - for (byte i = 0; i < 6; i++) { - if (i != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(i).letsRedstoneGoIn(i, aRedstoneCircuitBlock.getCoverID(i), aRedstoneCircuitBlock.getCoverVariable(i), aRedstoneCircuitBlock.getOwnTileEntity())) { - if (aRedstoneCircuitBlock.getInputRedstone(i) > 0) { - return true; - } - } - } - return false; - } - - /** - * returns if there is Redstone applied to all the valid Inputs (AND) - */ - public static final boolean getAllRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) { - for (byte i = 0; i < 6; i++) { - if (i != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(i).letsRedstoneGoIn(i, aRedstoneCircuitBlock.getCoverID(i), aRedstoneCircuitBlock.getCoverVariable(i), aRedstoneCircuitBlock.getOwnTileEntity())) { - if (aRedstoneCircuitBlock.getInputRedstone(i) == 0) { - return false; - } - } - } - return true; - } - - /** - * returns if there is Redstone applied to exactly one of the valid Inputs (XOR) - */ - public static final boolean getOneRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) { - int tRedstoneAmount = 0; - for (byte i = 0; i < 6; i++) { - if (i != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(i).letsRedstoneGoIn(i, aRedstoneCircuitBlock.getCoverID(i), aRedstoneCircuitBlock.getCoverVariable(i), aRedstoneCircuitBlock.getOwnTileEntity())) { - if (aRedstoneCircuitBlock.getInputRedstone(i) > 0) { - tRedstoneAmount++; - } - } - } - return tRedstoneAmount == 1; - } - - /** - * returns the strongest incoming RS-Power - */ - public static final byte getStrongestRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) { - byte tRedstoneAmount = 0; - for (byte i = 0; i < 6; i++) { - if (i != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(i).letsRedstoneGoIn(i, aRedstoneCircuitBlock.getCoverID(i), aRedstoneCircuitBlock.getCoverVariable(i), aRedstoneCircuitBlock.getOwnTileEntity())) { - tRedstoneAmount = (byte)Math.max(tRedstoneAmount, aRedstoneCircuitBlock.getInputRedstone(i)); - } - } - return tRedstoneAmount; - } - - /** - * returns the weakest incoming non-zero RS-Power - */ - public static final byte getWeakestNonZeroRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) { - if (!getAnyRedstone(aRedstoneCircuitBlock)) return 0; - byte tRedstoneAmount = 15; - for (byte i = 0; i < 6; i++) { - if (i != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(i).letsRedstoneGoIn(i, aRedstoneCircuitBlock.getCoverID(i), aRedstoneCircuitBlock.getCoverVariable(i), aRedstoneCircuitBlock.getOwnTileEntity())) { - if (aRedstoneCircuitBlock.getInputRedstone(i) > 0) - tRedstoneAmount = (byte)Math.min(tRedstoneAmount, aRedstoneCircuitBlock.getInputRedstone(i)); - } - } - return tRedstoneAmount; - } - - /** - * returns the weakest incoming RS-Power - */ - public static final byte getWeakestRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) { - if (!getAnyRedstone(aRedstoneCircuitBlock)) return 0; - byte tRedstoneAmount = 15; - for (byte i = 0; i < 6; i++) { - if (i != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(i).letsRedstoneGoIn(i, aRedstoneCircuitBlock.getCoverID(i), aRedstoneCircuitBlock.getCoverVariable(i), aRedstoneCircuitBlock.getOwnTileEntity())) { - tRedstoneAmount = (byte)Math.min(tRedstoneAmount, aRedstoneCircuitBlock.getInputRedstone(i)); - } - } - return tRedstoneAmount; - } + /** + * @param aIndex 0 - 1023 are my own Indices, so use other Numbers! + */ + public GT_CircuitryBehavior(int aIndex) { + GregTech_API.sCircuitryBehaviors.put(aIndex, this); + } + + /** + * returns if there is Redstone applied to any of the valid Inputs (OR) + */ + public static final boolean getAnyRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) { + for (byte i = 0; i < 6; i++) { + if (i != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(i).letsRedstoneGoIn(i, aRedstoneCircuitBlock.getCoverID(i), aRedstoneCircuitBlock.getCoverVariable(i), aRedstoneCircuitBlock.getOwnTileEntity())) { + if (aRedstoneCircuitBlock.getInputRedstone(i) > 0) { + return true; + } + } + } + return false; + } + + /** + * returns if there is Redstone applied to all the valid Inputs (AND) + */ + public static final boolean getAllRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) { + for (byte i = 0; i < 6; i++) { + if (i != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(i).letsRedstoneGoIn(i, aRedstoneCircuitBlock.getCoverID(i), aRedstoneCircuitBlock.getCoverVariable(i), aRedstoneCircuitBlock.getOwnTileEntity())) { + if (aRedstoneCircuitBlock.getInputRedstone(i) == 0) { + return false; + } + } + } + return true; + } + + /** + * returns if there is Redstone applied to exactly one of the valid Inputs (XOR) + */ + public static final boolean getOneRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) { + int tRedstoneAmount = 0; + for (byte i = 0; i < 6; i++) { + if (i != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(i).letsRedstoneGoIn(i, aRedstoneCircuitBlock.getCoverID(i), aRedstoneCircuitBlock.getCoverVariable(i), aRedstoneCircuitBlock.getOwnTileEntity())) { + if (aRedstoneCircuitBlock.getInputRedstone(i) > 0) { + tRedstoneAmount++; + } + } + } + return tRedstoneAmount == 1; + } + + /** + * returns the strongest incoming RS-Power + */ + public static final byte getStrongestRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) { + byte tRedstoneAmount = 0; + for (byte i = 0; i < 6; i++) { + if (i != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(i).letsRedstoneGoIn(i, aRedstoneCircuitBlock.getCoverID(i), aRedstoneCircuitBlock.getCoverVariable(i), aRedstoneCircuitBlock.getOwnTileEntity())) { + tRedstoneAmount = (byte) Math.max(tRedstoneAmount, aRedstoneCircuitBlock.getInputRedstone(i)); + } + } + return tRedstoneAmount; + } + + /***************** + * GUI Functions * + *****************/ + + /** + * returns the weakest incoming non-zero RS-Power + */ + public static final byte getWeakestNonZeroRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) { + if (!getAnyRedstone(aRedstoneCircuitBlock)) return 0; + byte tRedstoneAmount = 15; + for (byte i = 0; i < 6; i++) { + if (i != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(i).letsRedstoneGoIn(i, aRedstoneCircuitBlock.getCoverID(i), aRedstoneCircuitBlock.getCoverVariable(i), aRedstoneCircuitBlock.getOwnTileEntity())) { + if (aRedstoneCircuitBlock.getInputRedstone(i) > 0) + tRedstoneAmount = (byte) Math.min(tRedstoneAmount, aRedstoneCircuitBlock.getInputRedstone(i)); + } + } + return tRedstoneAmount; + } + + /** + * returns the weakest incoming RS-Power + */ + public static final byte getWeakestRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) { + if (!getAnyRedstone(aRedstoneCircuitBlock)) return 0; + byte tRedstoneAmount = 15; + for (byte i = 0; i < 6; i++) { + if (i != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(i).letsRedstoneGoIn(i, aRedstoneCircuitBlock.getCoverID(i), aRedstoneCircuitBlock.getCoverVariable(i), aRedstoneCircuitBlock.getOwnTileEntity())) { + tRedstoneAmount = (byte) Math.min(tRedstoneAmount, aRedstoneCircuitBlock.getInputRedstone(i)); + } + } + return tRedstoneAmount; + } + + /** + * Initializes the Parameters of this Circuit, all Parameters have been set to 0 right before calling this + * + * @param aCircuitData, The Data Storage you can use (8 Slots) + * @param aRedstoneCircuitBlock, The Circuit Block MetaTileEntity itself + */ + public abstract void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock); + + /** + * Validates the Parameters of this Circuit when a value has been changed by the GUI + * Also called right after @initParameters and when the Chunk reloads + * + * @param aCircuitData, The Data Storage you can use (8 Slots and only the first 4 are User definable) + * @param aRedstoneCircuitBlock, The Circuit Block MetaTileEntity itself + */ + public abstract void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock); + + + /**************************** + * Useful Utility Functions * + ****************************/ + + /** + * Called every tick if the Block has enough Energy and if the Block is Active + * + * @param aCircuitData, The Data Storage you can use (8 Slots) + * @param aRedstoneCircuitBlock, The Circuit Block MetaTileEntity itself + */ + public abstract void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock); + + /** + * If the ItemStack should be displayed. Parameters are between 0 and 3. + */ + public abstract boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex); + + /** + * The Name of the Gate for the GUI + */ + @SideOnly(Side.CLIENT) + public abstract String getName(); + + /** + * The Description of the Gate for the GUI + */ + @SideOnly(Side.CLIENT) + public abstract String getDescription(); + + /** + * The Description of the Data Field for the GUI + */ + @SideOnly(Side.CLIENT) + public abstract String getDataDescription(int[] aCircuitData, int aCircuitDataIndex); + + /** + * How the Integer should be displayed in the GUI. + * null means, that it just displays as regular Number. + */ + @SideOnly(Side.CLIENT) + public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex) { + return null; + } }
\ No newline at end of file |