Relocate Source to proper directory.

This commit is contained in:
AlgorithmX2
2014-09-23 19:26:27 -05:00
parent fe927ce65d
commit 386d18a059
785 changed files with 35585 additions and 35580 deletions
@@ -0,0 +1,356 @@
package appeng.tile.networking;
import io.netty.buffer.ByteBuf;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import appeng.api.networking.IGridNode;
import appeng.api.parts.IFacadeContainer;
import appeng.api.parts.IPart;
import appeng.api.parts.LayerFlags;
import appeng.api.parts.SelectedPart;
import appeng.api.util.AECableType;
import appeng.api.util.AEColor;
import appeng.api.util.DimensionalCoord;
import appeng.block.networking.BlockCableBus;
import appeng.core.AppEng;
import appeng.helpers.AEMultiTile;
import appeng.helpers.ICustomCollision;
import appeng.hooks.TickHandler;
import appeng.integration.IntegrationType;
import appeng.integration.abstraction.IImmibisMicroblocks;
import appeng.parts.CableBusContainer;
import appeng.tile.AEBaseTile;
import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType;
import appeng.util.Platform;
public class TileCableBus extends AEBaseTile implements AEMultiTile, ICustomCollision
{
public CableBusContainer cb = new CableBusContainer( this );
private int oldLV = -1; // on re-calculate light when it changes
@TileEvent(TileEventType.WORLD_NBT_READ)
public void readFromNBT_TileCableBus(NBTTagCompound data)
{
cb.readFromNBT( data );
}
@TileEvent(TileEventType.WORLD_NBT_WRITE)
public void writeToNBT_TileCableBus(NBTTagCompound data)
{
cb.writeToNBT( data );
}
@TileEvent(TileEventType.NETWORK_READ)
public boolean readFromStream_TileCableBus(ByteBuf data) throws IOException
{
boolean ret = cb.readFromStream( data );
int newLV = cb.getLightValue();
if ( newLV != oldLV )
{
oldLV = newLV;
worldObj.func_147451_t( xCoord, yCoord, zCoord );
// worldObj.updateAllLightTypes( xCoord, yCoord, zCoord );
}
updateTileSetting();
return ret;
}
@TileEvent(TileEventType.NETWORK_WRITE)
public void writeToStream_TileCableBus(ByteBuf data) throws IOException
{
cb.writeToStream( data );
}
@Override
public boolean isInWorld()
{
return cb.isInWorld();
}
protected void updateTileSetting()
{
if ( cb.requiresDynamicRender )
{
TileCableBus tcb;
try
{
tcb = (TileCableBus) BlockCableBus.tesrTile.newInstance();
tcb.copyFrom( this );
getWorldObj().setTileEntity( xCoord, yCoord, zCoord, tcb );
}
catch (Throwable t)
{
}
}
}
protected void copyFrom(TileCableBus oldTile)
{
CableBusContainer tmpCB = cb;
cb = oldTile.cb;
oldLV = oldTile.oldLV;
oldTile.cb = tmpCB;
}
@Override
public void onReady()
{
super.onReady();
if ( cb.isEmpty() )
{
if ( worldObj.getTileEntity( xCoord, yCoord, zCoord ) == this )
worldObj.func_147480_a( xCoord, yCoord, zCoord, true );
}
else
cb.addToWorld();
}
@Override
public void onChunkUnload()
{
super.onChunkUnload();
cb.removeFromWorld();
}
@Override
public void validate()
{
super.validate();
TickHandler.instance.addInit( this );
}
@Override
public void invalidate()
{
super.invalidate();
cb.removeFromWorld();
}
@Override
public boolean canBeRotated()
{
return false;
}
@Override
public double getMaxRenderDistanceSquared()
{
return 900.0;
}
@Override
public void getDrops(World w, int x, int y, int z, ArrayList drops)
{
cb.getDrops( drops );
}
public void getNoDrops(World w, int x, int y, int z, ArrayList<ItemStack> drops)
{
cb.getNoDrops( drops );
}
@Override
public IGridNode getGridNode(ForgeDirection dir)
{
return cb.getGridNode( dir );
}
@Override
public boolean canAddPart(ItemStack is, ForgeDirection side)
{
return cb.canAddPart( is, side );
}
@Override
public ForgeDirection addPart(ItemStack is, ForgeDirection side, EntityPlayer player)
{
return cb.addPart( is, side, player );
}
@Override
public void removePart(ForgeDirection side, boolean suppressUpdate)
{
cb.removePart( side, suppressUpdate );
}
@Override
public IPart getPart(ForgeDirection side)
{
return cb.getPart( side );
}
@Override
public DimensionalCoord getLocation()
{
return new DimensionalCoord( this );
}
@Override
public TileEntity getTile()
{
return this;
}
@Override
public Iterable<AxisAlignedBB> getSelectedBoundingBoxesFromPool(World w, int x, int y, int z, Entity e, boolean visual)
{
return cb.getSelectedBoundingBoxsFromPool( false, true, e, visual );
}
@Override
public void addCollidingBlockToList(World w, int x, int y, int z, AxisAlignedBB bb, List out, Entity e)
{
for (AxisAlignedBB bx : getSelectedBoundingBoxesFromPool( w, x, y, z, e, false ))
out.add( AxisAlignedBB.getBoundingBox( bx.minX, bx.minY, bx.minZ, bx.maxX, bx.maxY, bx.maxZ ) );
}
@Override
public AECableType getCableConnectionType(ForgeDirection side)
{
return cb.getCableConnectionType( side );
}
@Override
public AEColor getColor()
{
return cb.getColor();
}
@Override
public IFacadeContainer getFacadeContainer()
{
return cb.getFacadeContainer();
}
@Override
public void clearContainer()
{
cb = new CableBusContainer( this );
}
@Override
public boolean isBlocked(ForgeDirection side)
{
return !ImmibisMicroblocks_isSideOpen( side.ordinal() );
}
@Override
public void markForUpdate()
{
if ( worldObj == null )
return;
int newLV = cb.getLightValue();
if ( newLV != oldLV )
{
oldLV = newLV;
worldObj.func_147451_t( xCoord, yCoord, zCoord );
// worldObj.updateAllLightTypes( xCoord, yCoord, zCoord );
}
super.markForUpdate();
}
@Override
public SelectedPart selectPart(Vec3 pos)
{
return cb.selectPart( pos );
}
@Override
public void partChanged()
{
notifyNeighbors();
}
@Override
public void notifyNeighbors()
{
if ( worldObj != null && worldObj.blockExists( xCoord, yCoord, zCoord ) && !CableBusContainer.isLoading() )
Platform.notifyBlocksOfNeighbors( worldObj, xCoord, yCoord, zCoord );
}
@Override
public void markForSave()
{
super.markDirty();
}
@Override
public boolean hasRedstone(ForgeDirection side)
{
return cb.hasRedstone( side );
}
@Override
public boolean isEmpty()
{
return cb.isEmpty();
}
@Override
public boolean requiresTESR()
{
return cb.requiresDynamicRender;
}
@Override
public Set<LayerFlags> getLayerFlags()
{
return cb.getLayerFlags();
}
@Override
public void cleanup()
{
if ( AppEng.instance.isIntegrationEnabled( IntegrationType.ImmibisMicroblocks ) )
{
IImmibisMicroblocks imb = (IImmibisMicroblocks) AppEng.instance.getIntegration( IntegrationType.ImmibisMicroblocks );
if ( imb != null && imb.leaveParts( this ) )
return;
}
getWorldObj().setBlock( xCoord, yCoord, zCoord, Platform.air );
}
/**
* Immibis MB Support
*/
boolean ImmibisMicroblocks_TransformableTileEntityMarker = true;
public boolean ImmibisMicroblocks_isSideOpen(int side)
{
return true;
}
public void ImmibisMicroblocks_onMicroblocksChanged()
{
cb.updateConnections();
}
@Override
public boolean recolourBlock(ForgeDirection side, AEColor colour, EntityPlayer who)
{
return cb.recolourBlock( side, colour, who );
}
}
@@ -0,0 +1,27 @@
package appeng.tile.networking;
import appeng.block.networking.BlockCableBus;
public class TileCableBusTESR extends TileCableBus
{
@Override
protected void updateTileSetting()
{
if ( !cb.requiresDynamicRender )
{
TileCableBus tcb;
try
{
tcb = (TileCableBus) BlockCableBus.noTesrTile.newInstance();
tcb.copyFrom( this );
getWorldObj().setTileEntity( xCoord, yCoord, zCoord, tcb );
}
catch (Throwable t)
{
}
}
}
}
@@ -0,0 +1,178 @@
package appeng.tile.networking;
import java.util.EnumSet;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection;
import appeng.api.config.Actionable;
import appeng.api.networking.GridFlags;
import appeng.api.networking.energy.IAEPowerStorage;
import appeng.api.networking.events.MENetworkControllerChange;
import appeng.api.networking.events.MENetworkEventSubscribe;
import appeng.api.networking.events.MENetworkPowerStatusChange;
import appeng.api.networking.events.MENetworkPowerStorage;
import appeng.api.networking.events.MENetworkPowerStorage.PowerEventType;
import appeng.api.networking.pathing.ControllerState;
import appeng.api.util.AECableType;
import appeng.me.GridAccessException;
import appeng.tile.grid.AENetworkPowerTile;
import appeng.tile.inventory.AppEngInternalInventory;
import appeng.tile.inventory.InvOperation;
public class TileController extends AENetworkPowerTile implements IAEPowerStorage
{
boolean isValid = false;
public TileController() {
internalMaxPower = 8000;
internalPublicPowerStorage = true;
gridProxy.setIdlePowerUsage( 3 );
gridProxy.setFlags( GridFlags.CANNOT_CARRY, GridFlags.DENSE_CAPACITY );
}
@Override
public AECableType getCableConnectionType(ForgeDirection dir)
{
return AECableType.DENSE;
}
@Override
protected double getFunnelPowerDemand(double maxReceived)
{
try
{
return gridProxy.getEnergy().getEnergyDemand( 8000 );
}
catch (GridAccessException e)
{
// no grid? use local...
return super.getFunnelPowerDemand( maxReceived );
}
}
@Override
protected double funnelPowerIntoStorage(double AEUnits, Actionable mode)
{
try
{
double ret = gridProxy.getEnergy().injectPower( AEUnits, mode );
if ( mode == Actionable.SIMULATE )
return ret;
return 0;
}
catch (GridAccessException e)
{
// no grid? use local...
return super.funnelPowerIntoStorage( AEUnits, mode );
}
}
@Override
protected void PowerEvent(PowerEventType x)
{
try
{
gridProxy.getGrid().postEvent( new MENetworkPowerStorage( this, x ) );
}
catch (GridAccessException e)
{
// not ready!
}
}
@MENetworkEventSubscribe
public void onControllerChange(MENetworkControllerChange status)
{
updateMeta();
}
@MENetworkEventSubscribe
public void onPowerChange(MENetworkPowerStatusChange status)
{
updateMeta();
}
@Override
public void onReady()
{
onNeighborChange( true );
super.onReady();
}
public void onNeighborChange(boolean force)
{
boolean xx = worldObj.getTileEntity( xCoord - 1, yCoord, zCoord ) instanceof TileController
&& worldObj.getTileEntity( xCoord + 1, yCoord, zCoord ) instanceof TileController;
boolean yy = worldObj.getTileEntity( xCoord, yCoord - 1, zCoord ) instanceof TileController
&& worldObj.getTileEntity( xCoord, yCoord + 1, zCoord ) instanceof TileController;
boolean zz = worldObj.getTileEntity( xCoord, yCoord, zCoord - 1 ) instanceof TileController
&& worldObj.getTileEntity( xCoord, yCoord, zCoord + 1 ) instanceof TileController;
// int meta = world.getBlockMetadata( xCoord, yCoord, zCoord );
// boolean hasPower = meta > 0;
// boolean isConflict = meta == 2;
boolean oldValid = isValid;
isValid = (xx && !yy && !zz) || (!xx && yy && !zz) || (!xx && !yy && zz) || ((xx ? 1 : 0) + (yy ? 1 : 0) + (zz ? 1 : 0) <= 1);
if ( oldValid != isValid || force )
{
if ( isValid )
gridProxy.setValidSides( EnumSet.allOf( ForgeDirection.class ) );
else
gridProxy.setValidSides( EnumSet.noneOf( ForgeDirection.class ) );
}
updateMeta();
}
private void updateMeta()
{
if ( !gridProxy.isReady() )
return;
int meta = 0;
try
{
if ( gridProxy.getEnergy().isNetworkPowered() )
{
meta = 1;
if ( gridProxy.getPath().getControllerState() == ControllerState.CONTROLLER_CONFLICT )
meta = 2;
}
}
catch (GridAccessException e)
{
meta = 0;
}
worldObj.setBlockMetadataWithNotify( xCoord, yCoord, zCoord, meta, 2 );
}
final int sides[] = new int[] {};
static final AppEngInternalInventory inv = new AppEngInternalInventory( null, 0 );
@Override
public IInventory getInternalInventory()
{
return inv;
}
@Override
public void onChangeInventory(IInventory inv, int slot, InvOperation mc, ItemStack removed, ItemStack added)
{
}
@Override
public int[] getAccessibleSlotsBySide(ForgeDirection side)
{
return sides;
}
}
@@ -0,0 +1,60 @@
package appeng.tile.networking;
import net.minecraftforge.common.util.ForgeDirection;
import appeng.api.config.AccessRestriction;
import appeng.api.config.Actionable;
import appeng.api.config.PowerMultiplier;
import appeng.api.networking.energy.IAEPowerStorage;
import appeng.api.util.AECableType;
import appeng.tile.grid.AENetworkTile;
public class TileCreativeEnergyCell extends AENetworkTile implements IAEPowerStorage
{
public TileCreativeEnergyCell() {
gridProxy.setIdlePowerUsage( 0 );
}
@Override
public AECableType getCableConnectionType(ForgeDirection dir)
{
return AECableType.COVERED;
}
@Override
public double injectAEPower(double amt, Actionable mode)
{
return 0;
}
@Override
public double extractAEPower(double amt, Actionable mode, PowerMultiplier pm)
{
return amt;
}
@Override
public double getAEMaxPower()
{
return Long.MAX_VALUE / 10000;
}
@Override
public double getAECurrentPower()
{
return Long.MAX_VALUE / 10000;
}
@Override
public boolean isAEPublicPowerStorage()
{
return true;
}
@Override
public AccessRestriction getPowerFlow()
{
return AccessRestriction.READ_WRITE;
}
}
@@ -0,0 +1,10 @@
package appeng.tile.networking;
public class TileDenseEnergyCell extends TileEnergyCell
{
public TileDenseEnergyCell() {
internalMaxPower = 200000 * 8;
}
}
@@ -0,0 +1,106 @@
package appeng.tile.networking;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection;
import appeng.api.config.Actionable;
import appeng.api.config.PowerMultiplier;
import appeng.api.networking.energy.IEnergyGrid;
import appeng.api.util.AECableType;
import appeng.me.GridAccessException;
import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType;
import appeng.tile.grid.AENetworkPowerTile;
import appeng.tile.inventory.AppEngInternalInventory;
import appeng.tile.inventory.InvOperation;
public class TileEnergyAcceptor extends AENetworkPowerTile
{
final int sides[] = new int[] {};
final static AppEngInternalInventory inv = new AppEngInternalInventory( null, 0 );
@Override
public AECableType getCableConnectionType(ForgeDirection dir)
{
return AECableType.COVERED;
}
@TileEvent(TileEventType.TICK)
public void Tick_TileEnergyAcceptor()
{
if ( internalCurrentPower > 0 )
{
try
{
IEnergyGrid eg = gridProxy.getEnergy();
double powerRequested = internalCurrentPower - eg.injectPower( internalCurrentPower, Actionable.SIMULATE );
if ( powerRequested > 0 )
{
eg.injectPower( extractAEPower( powerRequested, Actionable.MODULATE, PowerMultiplier.ONE ), Actionable.MODULATE );
}
}
catch (GridAccessException e)
{
// null net, probably bads.
}
}
}
@Override
protected double getFunnelPowerDemand(double maxRequired)
{
try
{
IEnergyGrid grid = gridProxy.getEnergy();
return grid.getEnergyDemand( maxRequired );
}
catch (GridAccessException e)
{
return super.getFunnelPowerDemand( maxRequired );
}
}
@Override
protected double funnelPowerIntoStorage(double newPower, Actionable mode)
{
try
{
IEnergyGrid grid = gridProxy.getEnergy();
double leftOver = grid.injectPower( newPower, mode );
if ( mode == Actionable.SIMULATE )
return leftOver;
return 0.0;
}
catch (GridAccessException e)
{
return super.funnelPowerIntoStorage( newPower, mode );
}
}
public TileEnergyAcceptor() {
gridProxy.setIdlePowerUsage( 0.0 );
internalMaxPower = 100;
}
@Override
public IInventory getInternalInventory()
{
return inv;
}
@Override
public void onChangeInventory(IInventory inv, int slot, InvOperation mc, ItemStack removed, ItemStack added)
{
}
@Override
public int[] getAccessibleSlotsBySide(ForgeDirection side)
{
return sides;
}
}
@@ -0,0 +1,202 @@
package appeng.tile.networking;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.common.util.ForgeDirection;
import appeng.api.config.AccessRestriction;
import appeng.api.config.Actionable;
import appeng.api.config.PowerMultiplier;
import appeng.api.networking.energy.IAEPowerStorage;
import appeng.api.networking.events.MENetworkPowerStorage;
import appeng.api.networking.events.MENetworkPowerStorage.PowerEventType;
import appeng.api.util.AECableType;
import appeng.me.GridAccessException;
import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType;
import appeng.tile.grid.AENetworkTile;
import appeng.util.SettingsFrom;
public class TileEnergyCell extends AENetworkTile implements IAEPowerStorage
{
protected double internalCurrentPower = 0.0;
protected double internalMaxPower = 200000.0;
private byte currentMeta = -1;
@Override
public AECableType getCableConnectionType(ForgeDirection dir)
{
return AECableType.COVERED;
}
private void changePowerLevel()
{
if ( notLoaded() )
return;
byte leel = (byte) (8.0 * (internalCurrentPower / internalMaxPower));
if ( leel > 7 )
leel = 7;
if ( leel < 0 )
leel = 0;
if ( currentMeta != leel )
{
currentMeta = leel;
worldObj.setBlockMetadataWithNotify( xCoord, yCoord, zCoord, currentMeta, 2 );
}
}
@TileEvent(TileEventType.WORLD_NBT_WRITE)
public void writeToNBT_TileEnergyCell(NBTTagCompound data)
{
if ( !worldObj.isRemote )
data.setDouble( "internalCurrentPower", internalCurrentPower );
}
@TileEvent(TileEventType.WORLD_NBT_READ)
public void readFromNBT_TileEnergyCell(NBTTagCompound data)
{
internalCurrentPower = data.getDouble( "internalCurrentPower" );
}
public TileEnergyCell() {
gridProxy.setIdlePowerUsage( 0 );
}
@Override
public boolean canBeRotated()
{
return false;
}
@Override
final public double injectAEPower(double amt, Actionable mode)
{
if ( mode == Actionable.SIMULATE )
{
double fakeBattery = internalCurrentPower + amt;
if ( fakeBattery > internalMaxPower )
{
return fakeBattery - internalMaxPower;
}
return 0;
}
if ( internalCurrentPower < 0.01 && amt > 0.01 )
gridProxy.getNode().getGrid().postEvent( new MENetworkPowerStorage( this, PowerEventType.PROVIDE_POWER ) );
internalCurrentPower += amt;
if ( internalCurrentPower > internalMaxPower )
{
amt = internalCurrentPower - internalMaxPower;
internalCurrentPower = internalMaxPower;
changePowerLevel();
return amt;
}
changePowerLevel();
return 0;
}
final private double extractAEPower(double amt, Actionable mode)
{
if ( mode == Actionable.SIMULATE )
{
if ( internalCurrentPower > amt )
return amt;
return internalCurrentPower;
}
boolean wasFull = internalCurrentPower >= internalMaxPower - 0.001;
if ( wasFull && amt > 0.001 )
{
try
{
gridProxy.getGrid().postEvent( new MENetworkPowerStorage( this, PowerEventType.REQUEST_POWER ) );
}
catch (GridAccessException e)
{
}
}
if ( internalCurrentPower > amt )
{
internalCurrentPower -= amt;
changePowerLevel();
return amt;
}
amt = internalCurrentPower;
internalCurrentPower = 0;
changePowerLevel();
return amt;
}
@Override
final public double extractAEPower(double amt, Actionable mode, PowerMultiplier pm)
{
return pm.divide( extractAEPower( pm.multiply( amt ), mode ) );
}
@Override
public double getAEMaxPower()
{
return internalMaxPower;
}
@Override
public double getAECurrentPower()
{
return internalCurrentPower;
}
@Override
public boolean isAEPublicPowerStorage()
{
return true;
}
@Override
public AccessRestriction getPowerFlow()
{
return AccessRestriction.READ_WRITE;
}
@Override
public void onReady()
{
super.onReady();
currentMeta = (byte) worldObj.getBlockMetadata( xCoord, yCoord, zCoord );
changePowerLevel();
}
@Override
public NBTTagCompound downloadSettings(SettingsFrom from)
{
if ( from == SettingsFrom.DISMANTLE_ITEM )
{
NBTTagCompound tag = new NBTTagCompound();
tag.setDouble( "internalCurrentPower", internalCurrentPower );
tag.setDouble( "internalMaxPower", internalMaxPower ); // used for tool tip.
return tag;
}
return null;
}
@Override
public void uploadSettings(SettingsFrom from, NBTTagCompound compound)
{
if ( from == SettingsFrom.DISMANTLE_ITEM )
{
internalCurrentPower = compound.getDouble( "internalCurrentPower" );
}
}
}
@@ -0,0 +1,182 @@
package appeng.tile.networking;
import io.netty.buffer.ByteBuf;
import java.io.IOException;
import java.util.EnumSet;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection;
import appeng.api.implementations.IPowerChannelState;
import appeng.api.implementations.tiles.IWirelessAccessPoint;
import appeng.api.networking.GridFlags;
import appeng.api.networking.IGrid;
import appeng.api.networking.events.MENetworkChannelsChanged;
import appeng.api.networking.events.MENetworkEventSubscribe;
import appeng.api.networking.events.MENetworkPowerStatusChange;
import appeng.api.util.AECableType;
import appeng.api.util.DimensionalCoord;
import appeng.core.AEConfig;
import appeng.me.GridAccessException;
import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType;
import appeng.tile.grid.AENetworkInvTile;
import appeng.tile.inventory.AppEngInternalInventory;
import appeng.tile.inventory.InvOperation;
import appeng.util.Platform;
public class TileWireless extends AENetworkInvTile implements IWirelessAccessPoint, IPowerChannelState
{
public static final int POWERED_FLAG = 1;
public static final int CHANNEL_FLAG = 2;
final int sides[] = new int[] { 0 };
AppEngInternalInventory inv = new AppEngInternalInventory( this, 1 );
public int clientFlags = 0;
public TileWireless() {
gridProxy.setFlags( GridFlags.REQUIRE_CHANNEL );
gridProxy.setValidSides( EnumSet.noneOf( ForgeDirection.class ) );
}
@Override
public void setOrientation(ForgeDirection inForward, ForgeDirection inUp)
{
super.setOrientation( inForward, inUp );
gridProxy.setValidSides( EnumSet.of( getForward().getOpposite() ) );
}
@MENetworkEventSubscribe
public void chanRender(MENetworkChannelsChanged c)
{
markForUpdate();
}
@MENetworkEventSubscribe
public void powerRender(MENetworkPowerStatusChange c)
{
markForUpdate();
}
@TileEvent(TileEventType.NETWORK_READ)
public boolean readFromStream_TileWireless(ByteBuf data) throws IOException
{
int old = clientFlags;
clientFlags = data.readByte();
return old != clientFlags;
}
@TileEvent(TileEventType.NETWORK_WRITE)
public void writeToStream_TileWireless(ByteBuf data) throws IOException
{
clientFlags = 0;
try
{
if ( gridProxy.getEnergy().isNetworkPowered() )
clientFlags |= POWERED_FLAG;
if ( gridProxy.getNode().meetsChannelRequirements() )
clientFlags |= CHANNEL_FLAG;
}
catch (GridAccessException e)
{
// meh
}
data.writeByte( (byte) clientFlags );
}
@Override
public AECableType getCableConnectionType(ForgeDirection dir)
{
return AECableType.SMART;
}
@Override
public DimensionalCoord getLocation()
{
return new DimensionalCoord( this );
}
@Override
public IInventory getInternalInventory()
{
return inv;
}
@Override
public void onReady()
{
updatePower();
super.onReady();
}
@Override
public void markDirty()
{
updatePower();
}
private void updatePower()
{
gridProxy.setIdlePowerUsage( AEConfig.instance.wireless_getPowerDrain( getBoosters() ) );
}
@Override
public int[] getAccessibleSlotsBySide(ForgeDirection side)
{
return sides;
}
@Override
public double getRange()
{
return AEConfig.instance.wireless_getMaxRange( getBoosters() );
}
@Override
public boolean isActive()
{
if ( Platform.isClient() )
return isPowered() && (CHANNEL_FLAG == (clientFlags & CHANNEL_FLAG));
return gridProxy.isActive();
}
@Override
public IGrid getGrid()
{
try
{
return gridProxy.getGrid();
}
catch (GridAccessException e)
{
return null;
}
}
private int getBoosters()
{
ItemStack boosters = inv.getStackInSlot( 0 );
return boosters == null ? 0 : boosters.stackSize;
}
@Override
public void onChangeInventory(IInventory inv, int slot, InvOperation mc, ItemStack removed, ItemStack added)
{
// :P
}
@Override
public boolean isPowered()
{
return POWERED_FLAG == (clientFlags & POWERED_FLAG);
}
}