fix GTEU energy tax evasion
fix StackOverflow crash
This commit is contained in:
@@ -2,6 +2,7 @@ package appeng.parts.p2p;
|
|||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import appeng.api.parts.IPartModel;
|
import appeng.api.parts.IPartModel;
|
||||||
import appeng.items.parts.PartModels;
|
import appeng.items.parts.PartModels;
|
||||||
import appeng.me.GridAccessException;
|
import appeng.me.GridAccessException;
|
||||||
@@ -23,7 +24,6 @@ public class PartP2PGTCEPower extends PartP2PTunnel<PartP2PGTCEPower>
|
|||||||
private static final P2PModels MODELS = new P2PModels( "part/p2p/p2p_tunnel_gteu" );
|
private static final P2PModels MODELS = new P2PModels( "part/p2p/p2p_tunnel_gteu" );
|
||||||
private static final IEnergyContainer NULL_ENERGY_STORAGE = new NullEnergyStorage();
|
private static final IEnergyContainer NULL_ENERGY_STORAGE = new NullEnergyStorage();
|
||||||
private final IEnergyContainer inputHandler = new InputEnergyStorage();
|
private final IEnergyContainer inputHandler = new InputEnergyStorage();
|
||||||
private final IEnergyContainer outputHandler = new OutputEnergyStorage();
|
|
||||||
private final Queue<PartP2PGTCEPower> outputs = new ArrayDeque<>();
|
private final Queue<PartP2PGTCEPower> outputs = new ArrayDeque<>();
|
||||||
|
|
||||||
public PartP2PGTCEPower( ItemStack is )
|
public PartP2PGTCEPower( ItemStack is )
|
||||||
@@ -67,9 +67,12 @@ public class PartP2PGTCEPower extends PartP2PTunnel<PartP2PGTCEPower>
|
|||||||
@Override
|
@Override
|
||||||
public boolean hasCapability( @Nonnull Capability<?> capability )
|
public boolean hasCapability( @Nonnull Capability<?> capability )
|
||||||
{
|
{
|
||||||
if( capability == GregtechCapabilities.CAPABILITY_ENERGY_CONTAINER )
|
if( !this.isOutput() )
|
||||||
{
|
{
|
||||||
return true;
|
if( capability == GregtechCapabilities.CAPABILITY_ENERGY_CONTAINER )
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return super.hasCapability( capability );
|
return super.hasCapability( capability );
|
||||||
}
|
}
|
||||||
@@ -82,7 +85,7 @@ public class PartP2PGTCEPower extends PartP2PTunnel<PartP2PGTCEPower>
|
|||||||
{
|
{
|
||||||
if( this.isOutput() )
|
if( this.isOutput() )
|
||||||
{
|
{
|
||||||
return (T) this.outputHandler;
|
return null;
|
||||||
}
|
}
|
||||||
return (T) this.inputHandler;
|
return (T) this.inputHandler;
|
||||||
}
|
}
|
||||||
@@ -112,7 +115,10 @@ public class PartP2PGTCEPower extends PartP2PTunnel<PartP2PGTCEPower>
|
|||||||
{
|
{
|
||||||
PartP2PGTCEPower target = outputs.poll();
|
PartP2PGTCEPower target = outputs.poll();
|
||||||
final IEnergyContainer output = target.getAttachedEnergyStorage();
|
final IEnergyContainer output = target.getAttachedEnergyStorage();
|
||||||
|
if( output == this )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
if( output == null || output.getEnergyCanBeInserted() <= 0 )
|
if( output == null || output.getEnergyCanBeInserted() <= 0 )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
@@ -140,24 +146,26 @@ public class PartP2PGTCEPower extends PartP2PTunnel<PartP2PGTCEPower>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
while ( !outputs.isEmpty() )
|
voltage = (long) ( voltage * 0.95 );
|
||||||
|
|
||||||
|
if( voltage > 0 )
|
||||||
{
|
{
|
||||||
PartP2PGTCEPower target = outputs.poll();
|
while ( !outputs.isEmpty() )
|
||||||
final IEnergyContainer output = target.getAttachedEnergyStorage();
|
|
||||||
|
|
||||||
if( output == null || !output.inputsEnergy( facing ) || output.getEnergyCanBeInserted() <= 0 )
|
|
||||||
{
|
{
|
||||||
continue;
|
PartP2PGTCEPower target = outputs.poll();
|
||||||
}
|
final IEnergyContainer output = target.getAttachedEnergyStorage();
|
||||||
|
|
||||||
|
if( output == null || !output.inputsEnergy( facing ) || output.getEnergyCanBeInserted() <= 0 )
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if( voltage > 0 )
|
|
||||||
{
|
|
||||||
amperesUsed += output.acceptEnergyFromNetwork( facing, voltage, amperage - amperesUsed );
|
amperesUsed += output.acceptEnergyFromNetwork( facing, voltage, amperage - amperesUsed );
|
||||||
}
|
|
||||||
|
|
||||||
if( amperage == amperesUsed )
|
if( amperage >= amperesUsed )
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return amperesUsed;
|
return amperesUsed;
|
||||||
@@ -200,67 +208,6 @@ public class PartP2PGTCEPower extends PartP2PTunnel<PartP2PGTCEPower>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class OutputEnergyStorage implements IEnergyContainer
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public long acceptEnergyFromNetwork( EnumFacing facing, long voltage, long amperage )
|
|
||||||
{
|
|
||||||
if( facing == getSide().getFacing() )
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
final IEnergyContainer output = getAttachedEnergyStorage();
|
|
||||||
voltage *= 0.95;
|
|
||||||
if( voltage > 0 )
|
|
||||||
{
|
|
||||||
return output.acceptEnergyFromNetwork( facing, voltage, amperage );
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean inputsEnergy( EnumFacing enumFacing )
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean outputsEnergy( EnumFacing side )
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long changeEnergy( long l )
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long getEnergyStored()
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long getEnergyCapacity()
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long getInputAmperage()
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long getInputVoltage()
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static class NullEnergyStorage implements IEnergyContainer
|
static class NullEnergyStorage implements IEnergyContainer
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user