From 825567c1229cafbcc06b0e7bf934c7f8b30e0245 Mon Sep 17 00:00:00 2001 From: thatsIch Date: Mon, 15 Dec 2014 22:10:26 +0100 Subject: [PATCH] Closes #593 Updating RF Integration to use version 1.7.10R1.0.2 The new update contained a split of the IEnergyHandler into the IEnergyReceiver and IEnergyProvider. Since all tiles in AE2 are basically IEnergyReceivers we use them and changed the detection of opposing tile entities from IEnergyHandler to IEnergyReceiver --- build.properties | 2 +- src/main/java/appeng/core/Registration.java | 2 +- .../java/appeng/integration/modules/RF.java | 2 + .../modules/helpers/NullRFHandler.java | 24 ++- .../parts/layers/LayerIEnergyHandler.java | 35 ++-- .../java/appeng/parts/p2p/PartP2PRFPower.java | 162 +++++++++--------- .../appeng/tile/powersink/RedstoneFlux.java | 40 ++--- 7 files changed, 133 insertions(+), 134 deletions(-) diff --git a/build.properties b/build.properties index 7d593e33b..1ad1bb072 100644 --- a/build.properties +++ b/build.properties @@ -36,6 +36,6 @@ api_mekansim_version=1 api_mfr_version=1 api_railcraft_version=1 api_rblocks_version=1 -api_rf_version=1 +api_rf_version=2 api_rotarycraft_version=1 dev_buildcraft_version=1 diff --git a/src/main/java/appeng/core/Registration.java b/src/main/java/appeng/core/Registration.java index db6d43e22..265fea924 100644 --- a/src/main/java/appeng/core/Registration.java +++ b/src/main/java/appeng/core/Registration.java @@ -560,7 +560,7 @@ public class Registration ph.registerNewLayer( "appeng.parts.layers.LayerIBatteryProvider", "buildcraft.api.mj.IBatteryProvider" ); if ( AppEng.instance.isIntegrationEnabled( IntegrationType.RF ) ) - ph.registerNewLayer( "appeng.parts.layers.LayerIEnergyHandler", "cofh.api.energy.IEnergyHandler" ); + ph.registerNewLayer( "appeng.parts.layers.LayerIEnergyHandler", "cofh.api.energy.IEnergyReceiver" ); FMLCommonHandler.instance().bus().register( TickHandler.instance ); MinecraftForge.EVENT_BUS.register( TickHandler.instance ); diff --git a/src/main/java/appeng/integration/modules/RF.java b/src/main/java/appeng/integration/modules/RF.java index e1f3b7eed..8e82bfc15 100644 --- a/src/main/java/appeng/integration/modules/RF.java +++ b/src/main/java/appeng/integration/modules/RF.java @@ -31,6 +31,8 @@ public class RF extends BaseModule public static RF instance; public RF() { + TestClass( cofh.api.energy.IEnergyReceiver.class ); + TestClass( cofh.api.energy.IEnergyProvider.class ); TestClass( cofh.api.energy.IEnergyHandler.class ); TestClass( cofh.api.energy.IEnergyConnection.class ); } diff --git a/src/main/java/appeng/integration/modules/helpers/NullRFHandler.java b/src/main/java/appeng/integration/modules/helpers/NullRFHandler.java index 16975aa3c..2621bf3b6 100644 --- a/src/main/java/appeng/integration/modules/helpers/NullRFHandler.java +++ b/src/main/java/appeng/integration/modules/helpers/NullRFHandler.java @@ -18,40 +18,36 @@ package appeng.integration.modules.helpers; -import net.minecraftforge.common.util.ForgeDirection; -import cofh.api.energy.IEnergyHandler; -public class NullRFHandler implements IEnergyHandler +import net.minecraftforge.common.util.ForgeDirection; + +import cofh.api.energy.IEnergyReceiver; + + +public class NullRFHandler implements IEnergyReceiver { @Override - public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate) + public int receiveEnergy( ForgeDirection from, int maxReceive, boolean simulate ) { return 0; } @Override - public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate) + public int getEnergyStored( ForgeDirection from ) { return 0; } @Override - public int getEnergyStored(ForgeDirection from) + public int getMaxEnergyStored( ForgeDirection from ) { return 0; } @Override - public int getMaxEnergyStored(ForgeDirection from) - { - return 0; - } - - @Override - public boolean canConnectEnergy(ForgeDirection from) + public boolean canConnectEnergy( ForgeDirection from ) { return true; } - } diff --git a/src/main/java/appeng/parts/layers/LayerIEnergyHandler.java b/src/main/java/appeng/parts/layers/LayerIEnergyHandler.java index 2cc2321ef..622a6d678 100644 --- a/src/main/java/appeng/parts/layers/LayerIEnergyHandler.java +++ b/src/main/java/appeng/parts/layers/LayerIEnergyHandler.java @@ -21,7 +21,12 @@ package appeng.parts.layers; import net.minecraftforge.common.util.ForgeDirection; import appeng.api.parts.IPart; import appeng.api.parts.LayerBase; + +import cofh.api.energy.IEnergyConnection; import cofh.api.energy.IEnergyHandler; +import cofh.api.energy.IEnergyProvider; +import cofh.api.energy.IEnergyReceiver; + public class LayerIEnergyHandler extends LayerBase implements IEnergyHandler { @@ -29,9 +34,9 @@ public class LayerIEnergyHandler extends LayerBase implements IEnergyHandler @Override public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate) { - IPart part = getPart( from ); - if ( part instanceof IEnergyHandler ) - return ((IEnergyHandler) part).receiveEnergy( from, maxReceive, simulate ); + IPart part = this.getPart( from ); + if ( part instanceof IEnergyReceiver ) + return ((IEnergyReceiver) part).receiveEnergy( from, maxReceive, simulate ); return 0; } @@ -39,9 +44,9 @@ public class LayerIEnergyHandler extends LayerBase implements IEnergyHandler @Override public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate) { - IPart part = getPart( from ); - if ( part instanceof IEnergyHandler ) - return ((IEnergyHandler) part).extractEnergy( from, maxExtract, simulate ); + IPart part = this.getPart( from ); + if ( part instanceof IEnergyProvider ) + return ((IEnergyProvider) part).extractEnergy( from, maxExtract, simulate ); return 0; } @@ -49,9 +54,9 @@ public class LayerIEnergyHandler extends LayerBase implements IEnergyHandler @Override public int getEnergyStored(ForgeDirection from) { - IPart part = getPart( from ); - if ( part instanceof IEnergyHandler ) - return ((IEnergyHandler) part).getEnergyStored( from ); + IPart part = this.getPart( from ); + if ( part instanceof IEnergyProvider ) + return ((IEnergyProvider) part).getEnergyStored( from ); return 0; } @@ -59,9 +64,9 @@ public class LayerIEnergyHandler extends LayerBase implements IEnergyHandler @Override public int getMaxEnergyStored(ForgeDirection from) { - IPart part = getPart( from ); - if ( part instanceof IEnergyHandler ) - return ((IEnergyHandler) part).getMaxEnergyStored( from ); + IPart part = this.getPart( from ); + if ( part instanceof IEnergyProvider ) + return ((IEnergyProvider) part).getMaxEnergyStored( from ); return 0; } @@ -69,9 +74,9 @@ public class LayerIEnergyHandler extends LayerBase implements IEnergyHandler @Override public boolean canConnectEnergy(ForgeDirection from) { - IPart part = getPart( from ); - if ( part instanceof IEnergyHandler ) - return ((IEnergyHandler) part).canConnectEnergy( from ); + IPart part = this.getPart( from ); + if ( part instanceof IEnergyConnection ) + return ((IEnergyConnection) part).canConnectEnergy( from ); return false; } diff --git a/src/main/java/appeng/parts/p2p/PartP2PRFPower.java b/src/main/java/appeng/parts/p2p/PartP2PRFPower.java index 927066147..c3404a881 100644 --- a/src/main/java/appeng/parts/p2p/PartP2PRFPower.java +++ b/src/main/java/appeng/parts/p2p/PartP2PRFPower.java @@ -18,6 +18,7 @@ package appeng.parts.p2p; + import java.util.Stack; import net.minecraft.init.Blocks; @@ -25,6 +26,12 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; import net.minecraftforge.common.util.ForgeDirection; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +import cofh.api.energy.IEnergyReceiver; + import appeng.api.config.PowerUnits; import appeng.api.config.TunnelType; import appeng.core.AppEng; @@ -34,18 +41,28 @@ import appeng.me.GridAccessException; import appeng.transformer.annotations.integration.Interface; import appeng.transformer.annotations.integration.InterfaceList; import appeng.util.Platform; -import cofh.api.energy.IEnergyHandler; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -@InterfaceList(value = { @Interface(iface = "cofh.api.energy.IEnergyHandler", iname = "RF") }) -public class PartP2PRFPower extends PartP2PTunnel implements cofh.api.energy.IEnergyHandler + +@InterfaceList( value = { @Interface( iface = "cofh.api.energy.IEnergyReceiver", iname = "RF" ) } ) +public class PartP2PRFPower extends PartP2PTunnel implements IEnergyReceiver { + private static final ThreadLocal> THREAD_STACK = new ThreadLocal>(); + /** + * Default element based on the null element pattern + */ + private static final IEnergyReceiver NULL_HANDLER = new NullRFHandler(); + private boolean cachedTarget = false; + private IEnergyReceiver outputTarget; - private static final IEnergyHandler myNullHandler = new NullRFHandler(); + public PartP2PRFPower( ItemStack is ) + { + super( is ); - boolean cachedTarget = false; - IEnergyHandler outputTarget; + if ( !AppEng.instance.isIntegrationEnabled( IntegrationType.RF ) ) + { + throw new RuntimeException( "RF Not installed!" ); + } + } @Override public TunnelType getTunnelType() @@ -53,61 +70,38 @@ public class PartP2PRFPower extends PartP2PTunnel implements cof return TunnelType.RF_POWER; } - public PartP2PRFPower(ItemStack is) { - super( is ); - - if ( !AppEng.instance.isIntegrationEnabled( IntegrationType.RF ) ) - throw new RuntimeException( "RF Not installed!" ); - } - @Override - public void onNeighborChanged() + public void onTunnelNetworkChange() { - super.onNeighborChanged(); - cachedTarget = false; + this.getHost().notifyNeighbors(); } @Override - @SideOnly(Side.CLIENT) + @SideOnly( Side.CLIENT ) public IIcon getTypeTexture() { return Blocks.iron_block.getBlockTextureFromSide( 0 ); } @Override - public void onTunnelNetworkChange() + public void onNeighborChanged() { - getHost().notifyNeighbors(); - } + super.onNeighborChanged(); - public float getPowerDrainPerTick() - { - return 0.5f; - } - - static final ThreadLocal> depth = new ThreadLocal>(); - - private Stack getDepth() - { - Stack s = depth.get(); - - if ( s == null ) - depth.set( s = new Stack() ); - - return s; + this.cachedTarget = false; } @Override - public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate) + public int receiveEnergy( ForgeDirection from, int maxReceive, boolean simulate ) { - if ( output ) + if ( this.output ) return 0; - if ( isActive() ) + if ( this.isActive() ) { - Stack stack = getDepth(); + Stack stack = this.getDepth(); - for (PartP2PRFPower t : stack) + for ( PartP2PRFPower t : stack ) if ( t == this ) return 0; @@ -117,7 +111,7 @@ public class PartP2PRFPower extends PartP2PTunnel implements cof try { - for (PartP2PRFPower t : getOutputs()) + for ( PartP2PRFPower t : this.getOutputs() ) { if ( Platform.getRandomInt() % 2 > 0 ) { @@ -132,7 +126,7 @@ public class PartP2PRFPower extends PartP2PTunnel implements cof if ( maxReceive > 0 ) { - for (PartP2PRFPower t : getOutputs()) + for ( PartP2PRFPower t : this.getOutputs() ) { int receiver = t.getOutput().receiveEnergy( t.side.getOpposite(), maxReceive, simulate ); maxReceive -= receiver; @@ -143,9 +137,9 @@ public class PartP2PRFPower extends PartP2PTunnel implements cof } } - QueueTunnelDrain( PowerUnits.RF, total ); + this.QueueTunnelDrain( PowerUnits.RF, total ); } - catch (GridAccessException ignored) + catch ( GridAccessException ignored ) { } @@ -158,23 +152,47 @@ public class PartP2PRFPower extends PartP2PTunnel implements cof return 0; } - @Override - public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate) + private Stack getDepth() { - return 0; + Stack s = THREAD_STACK.get(); + + if ( s == null ) + THREAD_STACK.set( s = new Stack() ); + + return s; + } + + private IEnergyReceiver getOutput() + { + if ( this.output ) + { + if ( !this.cachedTarget ) + { + TileEntity self = this.getTile(); + TileEntity te = self.getWorldObj().getTileEntity( self.xCoord + this.side.offsetX, self.yCoord + this.side.offsetY, self.zCoord + this.side.offsetZ ); + this.outputTarget = te instanceof IEnergyReceiver ? ( IEnergyReceiver ) te : null; + this.cachedTarget = true; + } + + if ( this.outputTarget == null || !this.outputTarget.canConnectEnergy( this.side.getOpposite() ) ) + return NULL_HANDLER; + + return this.outputTarget; + } + return NULL_HANDLER; } @Override - public int getEnergyStored(ForgeDirection from) + public int getEnergyStored( ForgeDirection from ) { - if ( output || !isActive() ) + if ( this.output || !this.isActive() ) return 0; int total = 0; - Stack stack = getDepth(); + Stack stack = this.getDepth(); - for (PartP2PRFPower t : stack) + for ( PartP2PRFPower t : stack ) if ( t == this ) return 0; @@ -182,12 +200,12 @@ public class PartP2PRFPower extends PartP2PTunnel implements cof try { - for (PartP2PRFPower t : getOutputs()) + for ( PartP2PRFPower t : this.getOutputs() ) { total += t.getOutput().getEnergyStored( t.side.getOpposite() ); } } - catch (GridAccessException e) + catch ( GridAccessException e ) { return 0; } @@ -199,16 +217,16 @@ public class PartP2PRFPower extends PartP2PTunnel implements cof } @Override - public int getMaxEnergyStored(ForgeDirection from) + public int getMaxEnergyStored( ForgeDirection from ) { - if ( output || !isActive() ) + if ( this.output || !this.isActive() ) return 0; int total = 0; - Stack stack = getDepth(); + Stack stack = this.getDepth(); - for (PartP2PRFPower t : stack) + for ( PartP2PRFPower t : stack ) if ( t == this ) return 0; @@ -216,12 +234,12 @@ public class PartP2PRFPower extends PartP2PTunnel implements cof try { - for (PartP2PRFPower t : getOutputs()) + for ( PartP2PRFPower t : this.getOutputs() ) { total += t.getOutput().getMaxEnergyStored( t.side.getOpposite() ); } } - catch (GridAccessException e) + catch ( GridAccessException e ) { return 0; } @@ -232,28 +250,8 @@ public class PartP2PRFPower extends PartP2PTunnel implements cof return total; } - private IEnergyHandler getOutput() - { - if ( output ) - { - if ( !cachedTarget ) - { - TileEntity self = getTile(); - TileEntity te = self.getWorldObj().getTileEntity( self.xCoord + side.offsetX, self.yCoord + side.offsetY, self.zCoord + side.offsetZ ); - outputTarget = te instanceof IEnergyHandler ? (IEnergyHandler) te : null; - cachedTarget = true; - } - - if ( outputTarget == null || !outputTarget.canConnectEnergy( side.getOpposite() ) ) - return myNullHandler; - - return outputTarget; - } - return myNullHandler; - } - @Override - public boolean canConnectEnergy(ForgeDirection from) + public boolean canConnectEnergy( ForgeDirection from ) { return true; } diff --git a/src/main/java/appeng/tile/powersink/RedstoneFlux.java b/src/main/java/appeng/tile/powersink/RedstoneFlux.java index 98c0521a6..7386b32a8 100644 --- a/src/main/java/appeng/tile/powersink/RedstoneFlux.java +++ b/src/main/java/appeng/tile/powersink/RedstoneFlux.java @@ -18,49 +18,47 @@ package appeng.tile.powersink; + import net.minecraftforge.common.util.ForgeDirection; + +import cofh.api.energy.IEnergyReceiver; + import appeng.api.config.PowerUnits; import appeng.transformer.annotations.integration.Interface; -import cofh.api.energy.IEnergyHandler; -@Interface(iname = "RF", iface = "cofh.api.energy.IEnergyHandler") -public abstract class RedstoneFlux extends RotaryCraft implements IEnergyHandler + +@Interface( iname = "RF", iface = "cofh.api.energy.IEnergyReceiver" ) +public abstract class RedstoneFlux extends RotaryCraft implements IEnergyReceiver { @Override - final public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate) + final public int receiveEnergy( ForgeDirection from, int maxReceive, boolean simulate ) { - final int networkRFDemand = (int) Math.floor( this.getExternalPowerDemand( PowerUnits.RF, maxReceive ) ); + final int networkRFDemand = ( int ) Math.floor( this.getExternalPowerDemand( PowerUnits.RF, maxReceive ) ); final int usedRF = Math.min( maxReceive, networkRFDemand ); if ( !simulate ) { this.injectExternalPower( PowerUnits.RF, usedRF ); } - + return usedRF; } @Override - final public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate) + final public int getEnergyStored( ForgeDirection from ) { - return 0; + return ( int ) Math.floor( PowerUnits.AE.convertTo( PowerUnits.RF, this.getAECurrentPower() ) ); } @Override - final public boolean canConnectEnergy(ForgeDirection from) + final public int getMaxEnergyStored( ForgeDirection from ) + { + return ( int ) Math.floor( PowerUnits.AE.convertTo( PowerUnits.RF, this.getAEMaxPower() ) ); + } + + @Override + final public boolean canConnectEnergy( ForgeDirection from ) { return this.getPowerSides().contains( from ); } - - @Override - final public int getEnergyStored(ForgeDirection from) - { - return (int) Math.floor( PowerUnits.AE.convertTo( PowerUnits.RF, this.getAECurrentPower() ) ); - } - - @Override - final public int getMaxEnergyStored(ForgeDirection from) - { - return (int) Math.floor( PowerUnits.AE.convertTo( PowerUnits.RF, this.getAEMaxPower() ) ); - } }