Auto Reflection Based TileEvents.

This commit is contained in:
AlgorithmX2
2014-08-28 02:39:52 -05:00
parent d2f2316adb
commit 489d6e4262
38 changed files with 935 additions and 1152 deletions
+6 -19
View File
@@ -12,7 +12,7 @@ import net.minecraftforge.common.ForgeChunkManager.Type;
import appeng.core.AELog; import appeng.core.AELog;
import appeng.core.AppEng; import appeng.core.AppEng;
import appeng.tile.AEBaseTile; import appeng.tile.AEBaseTile;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.util.Platform; import appeng.util.Platform;
import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.FMLCommonHandler;
@@ -23,27 +23,14 @@ public class TileChunkLoader extends AEBaseTile
boolean requestTicket = true; boolean requestTicket = true;
Ticket ct; Ticket ct;
class ChunkLoaderHandler extends AETileEventHandler @TileEvent(TileEventType.TICK)
public void Tick_TileChunkLoader()
{ {
if ( requestTicket )
public ChunkLoaderHandler() {
super( TileEventType.TICK );
}
@Override
public void Tick()
{ {
if ( requestTicket ) requestTicket = false;
{ initTicket();
requestTicket = false;
initTicket();
}
} }
};
public TileChunkLoader() {
addNewHandler( new ChunkLoaderHandler() );
} }
void initTicket() void initTicket()
@@ -1,17 +1,12 @@
package appeng.integration.abstraction.helpers; package appeng.integration.abstraction.helpers;
import appeng.tile.events.AETileEventHandler; import net.minecraft.nbt.NBTTagCompound;
import appeng.tile.events.TileEventType;
import appeng.transformer.annotations.integration.Method; import appeng.transformer.annotations.integration.Method;
import buildcraft.api.power.PowerHandler.PowerReceiver; import buildcraft.api.power.PowerHandler.PowerReceiver;
public abstract class BaseMJperdition extends AETileEventHandler public abstract class BaseMJperdition
{ {
public BaseMJperdition() {
super( TileEventType.TICK, TileEventType.WORLD_NBT );
}
@Method(iname = "MJ5") @Method(iname = "MJ5")
public abstract PowerReceiver getPowerReceiver(); public abstract PowerReceiver getPowerReceiver();
@@ -21,4 +16,10 @@ public abstract class BaseMJperdition extends AETileEventHandler
public abstract void configure(int i, int j, float f, int k); public abstract void configure(int i, int j, float f, int k);
public abstract void writeToNBT(NBTTagCompound tag);
public abstract void readFromNBT(NBTTagCompound tag);
public abstract void Tick();
} }
+25 -32
View File
@@ -8,7 +8,6 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
import appeng.block.AEBaseBlock; import appeng.block.AEBaseBlock;
import appeng.tile.events.AETileEventHandler;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.tile.inventory.IAEAppEngInventory; import appeng.tile.inventory.IAEAppEngInventory;
import appeng.tile.inventory.InvOperation; import appeng.tile.inventory.InvOperation;
@@ -16,38 +15,32 @@ import appeng.tile.inventory.InvOperation;
public abstract class AEBaseInvTile extends AEBaseTile implements ISidedInventory, IAEAppEngInventory public abstract class AEBaseInvTile extends AEBaseTile implements ISidedInventory, IAEAppEngInventory
{ {
public AEBaseInvTile() { @TileEvent(TileEventType.WORLD_NBT_READ)
addNewHandler( new AETileEventHandler( TileEventType.WORLD_NBT ) { public void readFromNBT_AEBaseInvTile(net.minecraft.nbt.NBTTagCompound data)
{
IInventory inv = getInternalInventory();
NBTTagCompound opt = data.getCompoundTag( "inv" );
for (int x = 0; x < inv.getSizeInventory(); x++)
{
NBTTagCompound item = opt.getCompoundTag( "item" + x );
inv.setInventorySlotContents( x, ItemStack.loadItemStackFromNBT( item ) );
}
}
@Override @TileEvent(TileEventType.WORLD_NBT_WRITE)
public void readFromNBT(net.minecraft.nbt.NBTTagCompound data) public void writeToNBT_AEBaseInvTile(net.minecraft.nbt.NBTTagCompound data)
{ {
IInventory inv = getInternalInventory(); IInventory inv = getInternalInventory();
NBTTagCompound opt = data.getCompoundTag( "inv" ); NBTTagCompound opt = new NBTTagCompound();
for (int x = 0; x < inv.getSizeInventory(); x++) for (int x = 0; x < inv.getSizeInventory(); x++)
{ {
NBTTagCompound item = opt.getCompoundTag( "item" + x ); NBTTagCompound item = new NBTTagCompound();
inv.setInventorySlotContents( x, ItemStack.loadItemStackFromNBT( item ) ); ItemStack is = getStackInSlot( x );
} if ( is != null )
} is.writeToNBT( item );
opt.setTag( "item" + x, item );
@Override }
public void writeToNBT(net.minecraft.nbt.NBTTagCompound data) data.setTag( "inv", opt );
{
IInventory inv = getInternalInventory();
NBTTagCompound opt = new NBTTagCompound();
for (int x = 0; x < inv.getSizeInventory(); x++)
{
NBTTagCompound item = new NBTTagCompound();
ItemStack is = getStackInSlot( x );
if ( is != null )
is.writeToNBT( item );
opt.setTag( "item" + x, item );
}
data.setTag( "inv", opt );
}
} );
} }
@Override @Override
+47 -23
View File
@@ -3,9 +3,9 @@ package appeng.tile;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled; import io.netty.buffer.Unpooled;
import java.lang.reflect.Method;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.EnumSet;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
@@ -38,8 +38,8 @@ import appeng.util.SettingsFrom;
public class AEBaseTile extends TileEntity implements IOrientable, ICommonTile, ICustomNameObject public class AEBaseTile extends TileEntity implements IOrientable, ICommonTile, ICustomNameObject
{ {
private final EnumMap<TileEventType, List<AETileEventHandler>> handlers = new EnumMap<TileEventType, List<AETileEventHandler>>( TileEventType.class ); static private final HashMap<Class, EnumMap<TileEventType, List<AETileEventHandler>>> handlers = new HashMap<Class, EnumMap<TileEventType, List<AETileEventHandler>>>();
private final static HashMap<Class, ItemStackSrc> myItem = new HashMap(); static private final HashMap<Class, ItemStackSrc> myItem = new HashMap();
private ForgeDirection forward = ForgeDirection.UNKNOWN; private ForgeDirection forward = ForgeDirection.UNKNOWN;
private ForgeDirection up = ForgeDirection.UNKNOWN; private ForgeDirection up = ForgeDirection.UNKNOWN;
@@ -73,26 +73,45 @@ public class AEBaseTile extends TileEntity implements IOrientable, ICommonTile,
protected boolean hasHandlerFor(TileEventType type) protected boolean hasHandlerFor(TileEventType type)
{ {
List<AETileEventHandler> list = handlers.get( type ); List<AETileEventHandler> list = getHandlerListFor( type );
return list != null; return list != null;
} }
protected List<AETileEventHandler> getHandlerListFor(TileEventType type) protected List<AETileEventHandler> getHandlerListFor(TileEventType type)
{ {
List<AETileEventHandler> list = handlers.get( type ); Class clz = getClass();
EnumMap<TileEventType, List<AETileEventHandler>> handlerSet = handlers.get( clz );
if ( handlerSet == null )
{
handlers.put( clz, handlerSet = new EnumMap<TileEventType, List<AETileEventHandler>>( TileEventType.class ) );
for (Method m : clz.getMethods())
{
TileEvent te = m.getAnnotation( TileEvent.class );
if ( te != null )
{
addHandler( handlerSet, te.value(), m );
}
}
}
List<AETileEventHandler> list = handlerSet.get( type );
if ( list == null ) if ( list == null )
handlers.put( type, list = new LinkedList<AETileEventHandler>() ); handlerSet.put( type, list = new LinkedList<AETileEventHandler>() );
return list; return list;
} }
protected void addNewHandler(AETileEventHandler handler) private void addHandler(EnumMap<TileEventType, List<AETileEventHandler>> handlerSet, TileEventType value, Method m)
{ {
EnumSet<TileEventType> types = handler.getSubscribedEvents(); List<AETileEventHandler> list = handlerSet.get( value );
for (TileEventType type : types) if ( list == null )
getHandlerListFor( type ).add( handler ); handlerSet.put( value, list = new ArrayList() );
list.add( new AETileEventHandler( m, value ) );
} }
@Override @Override
@@ -101,11 +120,16 @@ public class AEBaseTile extends TileEntity implements IOrientable, ICommonTile,
return hasHandlerFor( TileEventType.TICK ); return hasHandlerFor( TileEventType.TICK );
} }
final public void Tick()
{
}
@Override @Override
final public void updateEntity() final public void updateEntity()
{ {
for (AETileEventHandler h : getHandlerListFor( TileEventType.TICK )) for (AETileEventHandler h : getHandlerListFor( TileEventType.TICK ))
h.Tick(); h.Tick( this );
} }
@Override @Override
@@ -126,7 +150,7 @@ public class AEBaseTile extends TileEntity implements IOrientable, ICommonTile,
@Override @Override
// NOTE: WAS FINAL, changed for Immibis // NOTE: WAS FINAL, changed for Immibis
public void writeToNBT(NBTTagCompound data) final public void writeToNBT(NBTTagCompound data)
{ {
super.writeToNBT( data ); super.writeToNBT( data );
@@ -139,13 +163,13 @@ public class AEBaseTile extends TileEntity implements IOrientable, ICommonTile,
if ( customName != null ) if ( customName != null )
data.setString( "customName", customName ); data.setString( "customName", customName );
for (AETileEventHandler h : getHandlerListFor( TileEventType.WORLD_NBT )) for (AETileEventHandler h : getHandlerListFor( TileEventType.WORLD_NBT_WRITE ))
h.writeToNBT( data ); h.writeToNBT( this, data );
} }
@Override @Override
// NOTE: WAS FINAL, changed for Immibis // NOTE: WAS FINAL, changed for Immibis
public void readFromNBT(NBTTagCompound data) final public void readFromNBT(NBTTagCompound data)
{ {
super.readFromNBT( data ); super.readFromNBT( data );
@@ -166,9 +190,9 @@ public class AEBaseTile extends TileEntity implements IOrientable, ICommonTile,
{ {
} }
for (AETileEventHandler h : getHandlerListFor( TileEventType.WORLD_NBT )) for (AETileEventHandler h : getHandlerListFor( TileEventType.WORLD_NBT_READ ))
{ {
h.readFromNBT( data ); h.readFromNBT( this, data );
} }
} }
@@ -182,8 +206,8 @@ public class AEBaseTile extends TileEntity implements IOrientable, ICommonTile,
data.writeByte( orientation ); data.writeByte( orientation );
} }
for (AETileEventHandler h : getHandlerListFor( TileEventType.NETWORK )) for (AETileEventHandler h : getHandlerListFor( TileEventType.NETWORK_WRITE ))
h.writeToStream( data ); h.writeToStream( this, data );
} }
catch (Throwable t) catch (Throwable t)
{ {
@@ -191,7 +215,7 @@ public class AEBaseTile extends TileEntity implements IOrientable, ICommonTile,
} }
} }
final public boolean readfromStream(ByteBuf data) final public boolean readFromStream(ByteBuf data)
{ {
boolean output = false; boolean output = false;
@@ -211,8 +235,8 @@ public class AEBaseTile extends TileEntity implements IOrientable, ICommonTile,
} }
renderFragment = 100; renderFragment = 100;
for (AETileEventHandler h : getHandlerListFor( TileEventType.NETWORK )) for (AETileEventHandler h : getHandlerListFor( TileEventType.NETWORK_READ ))
if ( h.readFromStream( data ) ) if ( h.readFromStream( this, data ) )
output = true; output = true;
if ( (renderFragment & 1) == 1 ) if ( (renderFragment & 1) == 1 )
@@ -296,7 +320,7 @@ public class AEBaseTile extends TileEntity implements IOrientable, ICommonTile,
if ( pkt.func_148853_f() == 64 ) if ( pkt.func_148853_f() == 64 )
{ {
ByteBuf stream = Unpooled.copiedBuffer( pkt.func_148857_g().getByteArray( "X" ) ); ByteBuf stream = Unpooled.copiedBuffer( pkt.func_148857_g().getByteArray( "X" ) );
if ( readfromStream( stream ) ) if ( readFromStream( stream ) )
markForUpdate(); markForUpdate();
} }
} }
+13
View File
@@ -0,0 +1,13 @@
package appeng.tile;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import appeng.tile.events.TileEventType;
@Retention(RetentionPolicy.RUNTIME)
public @interface TileEvent {
TileEventType value();
}
+36 -49
View File
@@ -10,7 +10,7 @@ import net.minecraftforge.common.util.ForgeDirection;
import appeng.api.implementations.tiles.IColorableTile; import appeng.api.implementations.tiles.IColorableTile;
import appeng.api.storage.data.IAEItemStack; import appeng.api.storage.data.IAEItemStack;
import appeng.api.util.AEColor; import appeng.api.util.AEColor;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.util.item.AEItemStack; import appeng.util.item.AEItemStack;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
@@ -28,61 +28,48 @@ public class TileCraftingMonitorTile extends TileCraftingTile implements IColora
IAEItemStack dspPlay; IAEItemStack dspPlay;
AEColor paintedColor = AEColor.Transparent; AEColor paintedColor = AEColor.Transparent;
class CraftingMonitorHandler extends AETileEventHandler @TileEvent(TileEventType.NETWORK_READ)
public boolean readFromStream_TileCraftingMonitorTile(ByteBuf data) throws IOException
{ {
AEColor oldPaintedColor = paintedColor;
paintedColor = AEColor.values()[data.readByte()];
public CraftingMonitorHandler() { boolean hasItem = data.readBoolean();
super( TileEventType.NETWORK, TileEventType.WORLD_NBT );
}
@Override if ( hasItem )
public boolean readFromStream(ByteBuf data) throws IOException dspPlay = AEItemStack.loadItemStackFromPacket( data );
else
dspPlay = null;
updateList = true;
return oldPaintedColor != paintedColor; // tesr!
}
@TileEvent(TileEventType.NETWORK_WRITE)
public void writeToStream_TileCraftingMonitorTile(ByteBuf data) throws IOException
{
data.writeByte( paintedColor.ordinal() );
if ( dspPlay == null )
data.writeBoolean( false );
else
{ {
AEColor oldPaintedColor = paintedColor; data.writeBoolean( true );
paintedColor = AEColor.values()[data.readByte()]; dspPlay.writeToPacket( data );
boolean hasItem = data.readBoolean();
if ( hasItem )
dspPlay = AEItemStack.loadItemStackFromPacket( data );
else
dspPlay = null;
updateList = true;
return oldPaintedColor != paintedColor; // tesr!
} }
}
@Override @TileEvent(TileEventType.WORLD_NBT_READ)
public void writeToStream(ByteBuf data) throws IOException public void readFromNBT_TileCraftingMonitorTile(NBTTagCompound data)
{ {
data.writeByte( paintedColor.ordinal() ); if ( data.hasKey( "paintedColor" ) )
paintedColor = AEColor.values()[data.getByte( "paintedColor" )];
}
if ( dspPlay == null ) @TileEvent(TileEventType.WORLD_NBT_WRITE)
data.writeBoolean( false ); public void writeToNBT_TileCraftingMonitorTile(NBTTagCompound data)
else {
{ data.setByte( "paintedColor", (byte) paintedColor.ordinal() );
data.writeBoolean( true );
dspPlay.writeToPacket( data );
}
}
@Override
public void readFromNBT(NBTTagCompound data)
{
if ( data.hasKey( "paintedColor" ) )
paintedColor = AEColor.values()[data.getByte( "paintedColor" )];
}
@Override
public void writeToNBT(NBTTagCompound data)
{
data.setByte( "paintedColor", (byte) paintedColor.ordinal() );
}
};
public TileCraftingMonitorTile() {
addNewHandler( new CraftingMonitorHandler() );
} }
public boolean isAccelerator() public boolean isAccelerator()
+17 -27
View File
@@ -28,7 +28,7 @@ import appeng.me.cluster.implementations.CraftingCPUCalculator;
import appeng.me.cluster.implementations.CraftingCPUCluster; import appeng.me.cluster.implementations.CraftingCPUCluster;
import appeng.me.helpers.AENetworkProxy; import appeng.me.helpers.AENetworkProxy;
import appeng.me.helpers.AENetworkProxyMultiblock; import appeng.me.helpers.AENetworkProxyMultiblock;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.tile.grid.AENetworkTile; import appeng.tile.grid.AENetworkTile;
import appeng.util.Platform; import appeng.util.Platform;
@@ -78,38 +78,28 @@ public class TileCraftingTile extends AENetworkTile implements IAEMultiBlock, IP
clust.updateName(); clust.updateName();
} }
private class CraftingHandler extends AETileEventHandler @TileEvent(TileEventType.WORLD_NBT_WRITE)
public void writeToNBT_TileCraftingTile(NBTTagCompound data)
{ {
data.setBoolean( "core", isCoreBlock );
if ( isCoreBlock && clust != null )
clust.writeToNBT( data );
}
public CraftingHandler() { @TileEvent(TileEventType.WORLD_NBT_READ)
super( TileEventType.WORLD_NBT ); public void readFromNBT_TileCraftingTile(NBTTagCompound data)
} {
isCoreBlock = data.getBoolean( "core" );
@Override if ( isCoreBlock )
public void writeToNBT(NBTTagCompound data)
{ {
data.setBoolean( "core", isCoreBlock ); if ( clust != null )
if ( isCoreBlock && clust != null ) clust.readFromNBT( data );
clust.writeToNBT( data ); else
previousState = (NBTTagCompound) data.copy();
} }
}
@Override
public void readFromNBT(NBTTagCompound data)
{
isCoreBlock = data.getBoolean( "core" );
if ( isCoreBlock )
{
if ( clust != null )
clust.readFromNBT( data );
else
previousState = (NBTTagCompound) data.copy();
}
}
};
public TileCraftingTile() { public TileCraftingTile() {
addNewHandler( new CraftingHandler() );
gridProxy.setFlags( GridFlags.MULTIBLOCK, GridFlags.REQUIRE_CHANNEL ); gridProxy.setFlags( GridFlags.MULTIBLOCK, GridFlags.REQUIRE_CHANNEL );
gridProxy.setValidSides( EnumSet.noneOf( ForgeDirection.class ) ); gridProxy.setValidSides( EnumSet.noneOf( ForgeDirection.class ) );
} }
+51 -61
View File
@@ -41,7 +41,7 @@ import appeng.core.sync.packets.PacketAssemblerAnimation;
import appeng.items.misc.ItemEncodedPattern; import appeng.items.misc.ItemEncodedPattern;
import appeng.me.GridAccessException; import appeng.me.GridAccessException;
import appeng.parts.automation.UpgradeInventory; import appeng.parts.automation.UpgradeInventory;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.tile.grid.AENetworkInvTile; import appeng.tile.grid.AENetworkInvTile;
import appeng.tile.inventory.AppEngInternalInventory; import appeng.tile.inventory.AppEngInternalInventory;
@@ -175,81 +175,71 @@ public class TileMolecularAssembler extends AENetworkInvTile implements IAEAppEn
return 5; return 5;
} }
private class TileMolecularAssemblerHandler extends AETileEventHandler @TileEvent(TileEventType.NETWORK_READ)
public boolean readFromStream_TileMolecularAssembler(ByteBuf data) throws IOException
{ {
boolean oldPower = isPowered;
isPowered = data.readBoolean();
return isPowered != oldPower;
}
public TileMolecularAssemblerHandler() { @TileEvent(TileEventType.NETWORK_WRITE)
super( TileEventType.WORLD_NBT, TileEventType.NETWORK ); public void writeToStream_TileMolecularAssembler(ByteBuf data) throws IOException
} {
data.writeBoolean( isPowered );
}
@Override @TileEvent(TileEventType.WORLD_NBT_WRITE)
public boolean readFromStream(ByteBuf data) throws IOException public void writeToNBT_TileMolecularAssembler(NBTTagCompound data)
{
if ( forcePlan && myPlan != null )
{ {
boolean oldPower = isPowered; ItemStack pattern = myPlan.getPattern();
isPowered = data.readBoolean(); if ( pattern != null )
return isPowered != oldPower;
}
@Override
public void writeToStream(ByteBuf data) throws IOException
{
data.writeBoolean( isPowered );
}
@Override
public void writeToNBT(NBTTagCompound data)
{
if ( forcePlan && myPlan != null )
{ {
ItemStack pattern = myPlan.getPattern(); NBTTagCompound pdata = new NBTTagCompound();
if ( pattern != null ) pattern.writeToNBT( pdata );
data.setTag( "myPlan", pdata );
data.setInteger( "pushDirection", pushDirection.ordinal() );
}
}
upgrades.writeToNBT( data, "upgrades" );
inv.writeToNBT( data, "inv" );
settings.writeToNBT( data );
}
@TileEvent(TileEventType.WORLD_NBT_READ)
public void readFromNBT_TileMolecularAssembler(NBTTagCompound data)
{
if ( data.hasKey( "myPlan" ) )
{
ItemStack myPat = ItemStack.loadItemStackFromNBT( data.getCompoundTag( "myPlan" ) );
if ( myPat != null && myPat.getItem() instanceof ItemEncodedPattern )
{
World w = getWorldObj();
ItemEncodedPattern iep = (ItemEncodedPattern) myPat.getItem();
ICraftingPatternDetails ph = iep.getPatternForItem( myPat, w );
if ( ph != null && ph.isCraftable() )
{ {
NBTTagCompound pdata = new NBTTagCompound(); forcePlan = true;
pattern.writeToNBT( pdata ); myPlan = ph;
data.setTag( "myPlan", pdata ); pushDirection = ForgeDirection.getOrientation( data.getInteger( "pushDirection" ) );
data.setInteger( "pushDirection", pushDirection.ordinal() );
} }
} }
upgrades.writeToNBT( data, "upgrades" );
inv.writeToNBT( data, "inv" );
settings.writeToNBT( data );
} }
@Override upgrades.readFromNBT( data, "upgrades" );
public void readFromNBT(NBTTagCompound data) inv.readFromNBT( data, "inv" );
{ settings.readFromNBT( data );
if ( data.hasKey( "myPlan" ) ) recalculatePlan();
{ }
ItemStack myPat = ItemStack.loadItemStackFromNBT( data.getCompoundTag( "myPlan" ) );
if ( myPat != null && myPat.getItem() instanceof ItemEncodedPattern )
{
World w = getWorldObj();
ItemEncodedPattern iep = (ItemEncodedPattern) myPat.getItem();
ICraftingPatternDetails ph = iep.getPatternForItem( myPat, w );
if ( ph != null && ph.isCraftable() )
{
forcePlan = true;
myPlan = ph;
pushDirection = ForgeDirection.getOrientation( data.getInteger( "pushDirection" ) );
}
}
}
upgrades.readFromNBT( data, "upgrades" );
inv.readFromNBT( data, "inv" );
settings.readFromNBT( data );
recalculatePlan();
}
};
public TileMolecularAssembler() { public TileMolecularAssembler() {
settings.registerSetting( Settings.REDSTONE_CONTROLLED, RedstoneMode.IGNORE ); settings.registerSetting( Settings.REDSTONE_CONTROLLED, RedstoneMode.IGNORE );
inv.setMaxStackSize( 1 ); inv.setMaxStackSize( 1 );
gridProxy.setIdlePowerUsage( 0.0 ); gridProxy.setIdlePowerUsage( 0.0 );
addNewHandler( new TileMolecularAssemblerHandler() );
} }
@Override @Override
+94 -18
View File
@@ -3,46 +3,107 @@ package appeng.tile.events;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import java.io.IOException; import java.io.IOException;
import java.util.EnumSet; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import appeng.tile.AEBaseTile;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.SideOnly;
public abstract class AETileEventHandler public class AETileEventHandler
{ {
final EnumSet<TileEventType> supportedEvents; private final Method method;
private final TileEventType type;
public AETileEventHandler(TileEventType... events) { public AETileEventHandler(Method m, TileEventType which) {
supportedEvents = EnumSet.noneOf( TileEventType.class ); method = m;
for (TileEventType t : events) type = which;
supportedEvents.add( t );
}
public EnumSet<TileEventType> getSubscribedEvents()
{
return supportedEvents;
} }
// TICK // TICK
public void Tick() public void Tick(AEBaseTile tile)
{ {
try
{
method.invoke( tile );
}
catch (IllegalAccessException e)
{
throw new RuntimeException( e );
}
catch (IllegalArgumentException e)
{
throw new RuntimeException( e );
}
catch (InvocationTargetException e)
{
throw new RuntimeException( e );
}
} }
// WORLD_NBT // WORLD_NBT
public void writeToNBT(NBTTagCompound data) public void writeToNBT(AEBaseTile tile, NBTTagCompound data)
{ {
try
{
method.invoke( tile, data );
}
catch (IllegalAccessException e)
{
throw new RuntimeException( e );
}
catch (IllegalArgumentException e)
{
throw new RuntimeException( e );
}
catch (InvocationTargetException e)
{
throw new RuntimeException( e );
}
} }
// WORLD NBT // WORLD NBT
public void readFromNBT(NBTTagCompound data) public void readFromNBT(AEBaseTile tile, NBTTagCompound data)
{ {
try
{
method.invoke( tile, data );
}
catch (IllegalAccessException e)
{
throw new RuntimeException( e );
}
catch (IllegalArgumentException e)
{
throw new RuntimeException( e );
}
catch (InvocationTargetException e)
{
throw new RuntimeException( e );
}
} }
// NETWORK // NETWORK
public void writeToStream(ByteBuf data) throws IOException public void writeToStream(AEBaseTile tile, ByteBuf data) throws IOException
{ {
try
{
method.invoke( tile, data );
}
catch (IllegalAccessException e)
{
throw new RuntimeException( e );
}
catch (IllegalArgumentException e)
{
throw new RuntimeException( e );
}
catch (InvocationTargetException e)
{
throw new RuntimeException( e );
}
} }
// NETWORK // NETWORK
@@ -54,9 +115,24 @@ public abstract class AETileEventHandler
* @throws IOException * @throws IOException
*/ */
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public boolean readFromStream(ByteBuf data) throws IOException public boolean readFromStream(AEBaseTile tile, ByteBuf data) throws IOException
{ {
return false; try
{
return (Boolean) method.invoke( tile, data );
}
catch (IllegalAccessException e)
{
throw new RuntimeException( e );
}
catch (IllegalArgumentException e)
{
throw new RuntimeException( e );
}
catch (InvocationTargetException e)
{
throw new RuntimeException( e );
}
} }
} }
+5 -1
View File
@@ -2,5 +2,9 @@ package appeng.tile.events;
public enum TileEventType public enum TileEventType
{ {
TICK, WORLD_NBT, NETWORK TICK,
WORLD_NBT_READ, WORLD_NBT_WRITE,
NETWORK_READ, NETWORK_WRITE
} }
+9 -22
View File
@@ -7,35 +7,22 @@ import appeng.api.networking.security.IActionHost;
import appeng.me.helpers.AENetworkProxy; import appeng.me.helpers.AENetworkProxy;
import appeng.me.helpers.IGridProxyable; import appeng.me.helpers.IGridProxyable;
import appeng.tile.AEBaseInvTile; import appeng.tile.AEBaseInvTile;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
public abstract class AENetworkInvTile extends AEBaseInvTile implements IActionHost, IGridProxyable public abstract class AENetworkInvTile extends AEBaseInvTile implements IActionHost, IGridProxyable
{ {
class AENetworkInvTileHandler extends AETileEventHandler @TileEvent(TileEventType.WORLD_NBT_READ)
public void readFromNBT_AENetwork(NBTTagCompound data)
{ {
gridProxy.readFromNBT( data );
}
public AENetworkInvTileHandler() { @TileEvent(TileEventType.WORLD_NBT_WRITE)
super( TileEventType.WORLD_NBT ); public void writeToNBT_AENetwork(NBTTagCompound data)
} {
gridProxy.writeToNBT( data );
@Override
public void readFromNBT(NBTTagCompound data)
{
gridProxy.readFromNBT( data );
}
@Override
public void writeToNBT(NBTTagCompound data)
{
gridProxy.writeToNBT( data );
}
};
public AENetworkInvTile() {
addNewHandler( new AENetworkInvTileHandler() );
} }
protected AENetworkProxy gridProxy = new AENetworkProxy( this, "proxy", getItemFromTile( this ), true ); protected AENetworkProxy gridProxy = new AENetworkProxy( this, "proxy", getItemFromTile( this ), true );
+9 -22
View File
@@ -8,36 +8,23 @@ import appeng.api.util.AECableType;
import appeng.api.util.DimensionalCoord; import appeng.api.util.DimensionalCoord;
import appeng.me.helpers.AENetworkProxy; import appeng.me.helpers.AENetworkProxy;
import appeng.me.helpers.IGridProxyable; import appeng.me.helpers.IGridProxyable;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.tile.powersink.AEBasePoweredTile; import appeng.tile.powersink.AEBasePoweredTile;
public abstract class AENetworkPowerTile extends AEBasePoweredTile implements IActionHost, IGridProxyable public abstract class AENetworkPowerTile extends AEBasePoweredTile implements IActionHost, IGridProxyable
{ {
class AENetworkPowerTileHandler extends AETileEventHandler @TileEvent(TileEventType.WORLD_NBT_READ)
public void readFromNBT_AENetwork(NBTTagCompound data)
{ {
gridProxy.readFromNBT( data );
}
public AENetworkPowerTileHandler() { @TileEvent(TileEventType.WORLD_NBT_WRITE)
super( TileEventType.WORLD_NBT ); public void writeToNBT_AENetwork(NBTTagCompound data)
} {
gridProxy.writeToNBT( data );
@Override
public void readFromNBT(NBTTagCompound data)
{
gridProxy.readFromNBT( data );
}
@Override
public void writeToNBT(NBTTagCompound data)
{
gridProxy.writeToNBT( data );
}
};
public AENetworkPowerTile() {
addNewHandler( new AENetworkPowerTileHandler() );
} }
protected AENetworkProxy gridProxy = new AENetworkProxy( this, "proxy", getItemFromTile( this ), true ); protected AENetworkProxy gridProxy = new AENetworkProxy( this, "proxy", getItemFromTile( this ), true );
+9 -22
View File
@@ -9,35 +9,22 @@ import appeng.api.util.DimensionalCoord;
import appeng.me.helpers.AENetworkProxy; import appeng.me.helpers.AENetworkProxy;
import appeng.me.helpers.IGridProxyable; import appeng.me.helpers.IGridProxyable;
import appeng.tile.AEBaseTile; import appeng.tile.AEBaseTile;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
public class AENetworkTile extends AEBaseTile implements IActionHost, IGridProxyable public class AENetworkTile extends AEBaseTile implements IActionHost, IGridProxyable
{ {
class AENetworkTileHandler extends AETileEventHandler @TileEvent(TileEventType.WORLD_NBT_READ)
public void readFromNBT_AENetwork(NBTTagCompound data)
{ {
gridProxy.readFromNBT( data );
}
public AENetworkTileHandler() { @TileEvent(TileEventType.WORLD_NBT_WRITE)
super( TileEventType.WORLD_NBT ); public void writeToNBT_AENetwork(NBTTagCompound data)
} {
gridProxy.writeToNBT( data );
@Override
public void readFromNBT(NBTTagCompound data)
{
gridProxy.readFromNBT( data );
}
@Override
public void writeToNBT(NBTTagCompound data)
{
gridProxy.writeToNBT( data );
}
};
public AENetworkTile() {
addNewHandler( new AENetworkTileHandler() );
} }
final protected AENetworkProxy gridProxy = createProxy(); final protected AENetworkProxy gridProxy = createProxy();
+26 -32
View File
@@ -13,7 +13,7 @@ import net.minecraftforge.common.util.ForgeDirection;
import appeng.api.implementations.tiles.ICrankable; import appeng.api.implementations.tiles.ICrankable;
import appeng.helpers.ICustomCollision; import appeng.helpers.ICustomCollision;
import appeng.tile.AEBaseTile; import appeng.tile.AEBaseTile;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.util.Platform; import appeng.util.Platform;
@@ -29,42 +29,36 @@ public class TileCrank extends AEBaseTile implements ICustomCollision
public int hits = 0; public int hits = 0;
public int rotation = 0; public int rotation = 0;
public TileCrank() { @TileEvent(TileEventType.TICK)
addNewHandler( new AETileEventHandler( TileEventType.NETWORK, TileEventType.TICK ) { public void Tick_TileCrank()
{
@Override if ( rotation > 0 )
public void Tick() {
visibleRotation -= 360 / (ticksPerRoation);
charge++;
if ( charge >= ticksPerRoation )
{ {
if ( rotation > 0 ) charge -= ticksPerRoation;
{ ICrankable g = getGrinder();
visibleRotation -= 360 / (ticksPerRoation); if ( g != null )
charge++; g.applyTurn();
if ( charge >= ticksPerRoation )
{
charge -= ticksPerRoation;
ICrankable g = getGrinder();
if ( g != null )
g.applyTurn();
}
rotation--;
}
} }
@Override rotation--;
public boolean readFromStream(ByteBuf data) throws java.io.IOException }
{ }
rotation = data.readInt();
return false;
}
@Override @TileEvent(TileEventType.NETWORK_READ)
public void writeToStream(ByteBuf data) throws java.io.IOException public boolean readFromStream_TileCrank(ByteBuf data) throws java.io.IOException
{ {
data.writeInt( rotation ); rotation = data.readInt();
} return false;
}
} ); @TileEvent(TileEventType.NETWORK_WRITE)
public void writeToStream_TileCrank(ByteBuf data) throws java.io.IOException
{
data.writeInt( rotation );
} }
public ICrankable getGrinder() public ICrankable getGrinder()
+13 -23
View File
@@ -14,7 +14,7 @@ import appeng.api.storage.ICellWorkbenchItem;
import appeng.api.util.IConfigManager; import appeng.api.util.IConfigManager;
import appeng.api.util.IConfigureableObject; import appeng.api.util.IConfigureableObject;
import appeng.tile.AEBaseTile; import appeng.tile.AEBaseTile;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.tile.inventory.AppEngInternalAEInventory; import appeng.tile.inventory.AppEngInternalAEInventory;
import appeng.tile.inventory.AppEngInternalInventory; import appeng.tile.inventory.AppEngInternalInventory;
@@ -75,33 +75,23 @@ public class TileCellWorkbench extends AEBaseTile implements IUpgradeableHost, I
return cacheConfig; return cacheConfig;
} }
class TileCellWorkbenchHandler extends AETileEventHandler @TileEvent(TileEventType.WORLD_NBT_WRITE)
public void writeToNBT_TileCellWorkbench(NBTTagCompound data)
{ {
cell.writeToNBT( data, "cell" );
config.writeToNBT( data, "config" );
cm.writeToNBT( data );
}
public TileCellWorkbenchHandler() { @TileEvent(TileEventType.WORLD_NBT_READ)
super( TileEventType.WORLD_NBT ); public void readFromNBT_TileCellWorkbench(NBTTagCompound data)
} {
cell.readFromNBT( data, "cell" );
@Override config.readFromNBT( data, "config" );
public void writeToNBT(NBTTagCompound data) cm.readFromNBT( data );
{
cell.writeToNBT( data, "cell" );
config.writeToNBT( data, "config" );
cm.writeToNBT( data );
}
@Override
public void readFromNBT(NBTTagCompound data)
{
cell.readFromNBT( data, "cell" );
config.readFromNBT( data, "config" );
cm.readFromNBT( data );
}
} }
public TileCellWorkbench() { public TileCellWorkbench() {
addNewHandler( new TileCellWorkbenchHandler() );
cm.registerSetting( Settings.COPY_MODE, CopyMode.CLEAR_ON_REMOVE ); cm.registerSetting( Settings.COPY_MODE, CopyMode.CLEAR_ON_REMOVE );
cell.enableClientEvents = true; cell.enableClientEvents = true;
} }
+67 -77
View File
@@ -21,7 +21,7 @@ import appeng.api.storage.data.IAEItemStack;
import appeng.api.util.AECableType; import appeng.api.util.AECableType;
import appeng.me.GridAccessException; import appeng.me.GridAccessException;
import appeng.server.AccessType; import appeng.server.AccessType;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.tile.grid.AENetworkPowerTile; import appeng.tile.grid.AENetworkPowerTile;
import appeng.tile.inventory.AppEngInternalInventory; import appeng.tile.inventory.AppEngInternalInventory;
@@ -45,105 +45,95 @@ public class TileCharger extends AENetworkPowerTile implements ICrankable
return AECableType.COVERED; return AECableType.COVERED;
} }
private class TileChargerHandler extends AETileEventHandler @TileEvent(TileEventType.NETWORK_READ)
public boolean readFromStream_TileCharger(ByteBuf data) throws IOException
{ {
try
public TileChargerHandler() { {
super( TileEventType.TICK, TileEventType.NETWORK ); IAEItemStack item = AEItemStack.loadItemStackFromPacket( data );
ItemStack is = item.getItemStack();
inv.setInventorySlotContents( 0, is );
} }
catch (Throwable t)
{
inv.setInventorySlotContents( 0, null );
}
return false; // TESR dosn't need updates!
}
@Override @TileEvent(TileEventType.NETWORK_WRITE)
public boolean readFromStream(ByteBuf data) throws IOException public void writeToStream_TileCharger(ByteBuf data) throws IOException
{
AEItemStack is = AEItemStack.create( getStackInSlot( 0 ) );
if ( is != null )
is.writeToPacket( data );
}
@TileEvent(TileEventType.TICK)
public void Tick_TileCharger()
{
if ( lastUpdate > 60 && requiresUpdate )
{
requiresUpdate = false;
markForUpdate();
lastUpdate = 0;
}
lastUpdate++;
tickTickTimer++;
if ( tickTickTimer < 20 )
return;
tickTickTimer = 0;
ItemStack myItem = getStackInSlot( 0 );
// charge from the network!
if ( internalCurrentPower < 1499 )
{ {
try try
{ {
IAEItemStack item = AEItemStack.loadItemStackFromPacket( data ); injectExternalPower( PowerUnits.AE,
ItemStack is = item.getItemStack(); gridProxy.getEnergy().extractAEPower( Math.min( 150.0, 1500.0 - internalCurrentPower ), Actionable.MODULATE, PowerMultiplier.ONE ) );
inv.setInventorySlotContents( 0, is ); tickTickTimer = 20; // keep tickin...
} }
catch (Throwable t) catch (GridAccessException e)
{ {
inv.setInventorySlotContents( 0, null ); // continue!
} }
return false; // TESR dosn't need updates!
} }
@Override if ( myItem == null )
public void writeToStream(ByteBuf data) throws IOException return;
if ( internalCurrentPower > 149 && Platform.isChargeable( myItem ) )
{ {
AEItemStack is = AEItemStack.create( getStackInSlot( 0 ) ); IAEItemPowerStorage ps = (IAEItemPowerStorage) myItem.getItem();
if ( is != null ) if ( ps.getAEMaxPower( myItem ) > ps.getAECurrentPower( myItem ) )
is.writeToPacket( data ); {
} double oldPower = internalCurrentPower;
@Override double adjustment = ps.injectAEPower( myItem, extractAEPower( 150.0, Actionable.MODULATE, PowerMultiplier.CONFIG ) );
public void Tick() internalCurrentPower += adjustment;
if ( oldPower > internalCurrentPower )
requiresUpdate = true;
tickTickTimer = 20; // keep tickin...
}
}
else if ( internalCurrentPower > 1499 && AEApi.instance().materials().materialCertusQuartzCrystal.sameAsStack( myItem ) )
{ {
if ( lastUpdate > 60 && requiresUpdate ) if ( Platform.getRandomFloat() > 0.8f ) // simulate wait
{ {
requiresUpdate = false; extractAEPower( internalMaxPower, Actionable.MODULATE, PowerMultiplier.CONFIG );// 1500
markForUpdate(); setInventorySlotContents( 0, AEApi.instance().materials().materialCertusQuartzCrystalCharged.stack( myItem.stackSize ) );
lastUpdate = 0;
}
lastUpdate++;
tickTickTimer++;
if ( tickTickTimer < 20 )
return;
tickTickTimer = 0;
ItemStack myItem = getStackInSlot( 0 );
// charge from the network!
if ( internalCurrentPower < 1499 )
{
try
{
injectExternalPower( PowerUnits.AE,
gridProxy.getEnergy().extractAEPower( Math.min( 150.0, 1500.0 - internalCurrentPower ), Actionable.MODULATE, PowerMultiplier.ONE ) );
tickTickTimer = 20; // keep tickin...
}
catch (GridAccessException e)
{
// continue!
}
}
if ( myItem == null )
return;
if ( internalCurrentPower > 149 && Platform.isChargeable( myItem ) )
{
IAEItemPowerStorage ps = (IAEItemPowerStorage) myItem.getItem();
if ( ps.getAEMaxPower( myItem ) > ps.getAECurrentPower( myItem ) )
{
double oldPower = internalCurrentPower;
double adjustment = ps.injectAEPower( myItem, extractAEPower( 150.0, Actionable.MODULATE, PowerMultiplier.CONFIG ) );
internalCurrentPower += adjustment;
if ( oldPower > internalCurrentPower )
requiresUpdate = true;
tickTickTimer = 20; // keep tickin...
}
}
else if ( internalCurrentPower > 1499 && AEApi.instance().materials().materialCertusQuartzCrystal.sameAsStack( myItem ) )
{
if ( Platform.getRandomFloat() > 0.8f ) // simulate wait
{
extractAEPower( internalMaxPower, Actionable.MODULATE, PowerMultiplier.CONFIG );// 1500
setInventorySlotContents( 0, AEApi.instance().materials().materialCertusQuartzCrystalCharged.stack( myItem.stackSize ) );
}
} }
} }
}
};
public TileCharger() { public TileCharger() {
gridProxy.setValidSides( EnumSet.noneOf( ForgeDirection.class ) ); gridProxy.setValidSides( EnumSet.noneOf( ForgeDirection.class ) );
gridProxy.setFlags(); gridProxy.setFlags();
internalMaxPower = 1500; internalMaxPower = 1500;
gridProxy.setIdlePowerUsage( 0 ); gridProxy.setIdlePowerUsage( 0 );
addNewHandler( new TileChargerHandler() );
} }
@Override @Override
+12 -22
View File
@@ -15,7 +15,7 @@ import appeng.api.implementations.items.IStorageComponent;
import appeng.api.util.IConfigManager; import appeng.api.util.IConfigManager;
import appeng.api.util.IConfigureableObject; import appeng.api.util.IConfigureableObject;
import appeng.tile.AEBaseInvTile; import appeng.tile.AEBaseInvTile;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.tile.inventory.AppEngInternalInventory; import appeng.tile.inventory.AppEngInternalInventory;
import appeng.tile.inventory.IAEAppEngInventory; import appeng.tile.inventory.IAEAppEngInventory;
@@ -34,31 +34,21 @@ public class TileCondenser extends AEBaseInvTile implements IAEAppEngInventory,
public double storedPower = 0; public double storedPower = 0;
private class TileCondenserHandler extends AETileEventHandler @TileEvent(TileEventType.WORLD_NBT_WRITE)
public void writeToNBT_TileCondenser(NBTTagCompound data)
{ {
cm.writeToNBT( data );
data.setDouble( "storedPower", storedPower );
}
public TileCondenserHandler() { @TileEvent(TileEventType.WORLD_NBT_READ)
super( TileEventType.WORLD_NBT ); public void readFromNBT_TileCondenser(NBTTagCompound data)
} {
cm.readFromNBT( data );
@Override storedPower = data.getDouble( "storedPower" );
public void writeToNBT(NBTTagCompound data) }
{
cm.writeToNBT( data );
data.setDouble( "storedPower", storedPower );
}
@Override
public void readFromNBT(NBTTagCompound data)
{
cm.readFromNBT( data );
storedPower = data.getDouble( "storedPower" );
}
};
public TileCondenser() { public TileCondenser() {
addNewHandler( new TileCondenserHandler() );
cm.registerSetting( Settings.CONDENSER_OUTPUT, CondenserOuput.TRASH ); cm.registerSetting( Settings.CONDENSER_OUTPUT, CondenserOuput.TRASH );
} }
+45 -55
View File
@@ -23,7 +23,7 @@ import appeng.core.settings.TickRates;
import appeng.me.GridAccessException; import appeng.me.GridAccessException;
import appeng.recipes.handlers.Inscribe; import appeng.recipes.handlers.Inscribe;
import appeng.recipes.handlers.Inscribe.InscriberRecipe; import appeng.recipes.handlers.Inscribe.InscriberRecipe;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.tile.grid.AENetworkPowerTile; import appeng.tile.grid.AENetworkPowerTile;
import appeng.tile.inventory.AppEngInternalInventory; import appeng.tile.inventory.AppEngInternalInventory;
@@ -57,73 +57,64 @@ public class TileInscriber extends AENetworkPowerTile implements IGridTickable
return AECableType.COVERED; return AECableType.COVERED;
} }
private class TileInscriberHandler extends AETileEventHandler @TileEvent(TileEventType.WORLD_NBT_WRITE)
public void writeToNBT_TileInscriber(NBTTagCompound data)
{ {
inv.writeToNBT( data, "inscriberInv" );
}
public TileInscriberHandler() { @TileEvent(TileEventType.WORLD_NBT_READ)
super( TileEventType.WORLD_NBT, TileEventType.NETWORK ); public void readFromNBT_TileInscriber(NBTTagCompound data)
{
inv.readFromNBT( data, "inscriberInv" );
}
@TileEvent(TileEventType.NETWORK_READ)
public boolean readFromStream_TileInscriber(ByteBuf data) throws IOException
{
int slot = data.readByte();
boolean oldSmash = smash;
boolean newSmash = (slot & 64) == 64;
if ( oldSmash != newSmash && newSmash )
{
smash = true;
clientStart = System.currentTimeMillis();
} }
@Override for (int num = 0; num < inv.getSizeInventory(); num++)
public void writeToNBT(NBTTagCompound data)
{ {
inv.writeToNBT( data, "inscriberInv" ); if ( (slot & (1 << num)) > 0 )
inv.setInventorySlotContents( num, AEItemStack.loadItemStackFromPacket( data ).getItemStack() );
else
inv.setInventorySlotContents( num, null );
} }
@Override return false;
public void readFromNBT(NBTTagCompound data) }
@TileEvent(TileEventType.NETWORK_WRITE)
public void writeToStream_TileInscriber(ByteBuf data) throws IOException
{
int slot = smash ? 64 : 0;
for (int num = 0; num < inv.getSizeInventory(); num++)
{ {
inv.readFromNBT( data, "inscriberInv" ); if ( inv.getStackInSlot( num ) != null )
slot = slot | (1 << num);
} }
@Override data.writeByte( slot );
public boolean readFromStream(ByteBuf data) throws IOException for (int num = 0; num < inv.getSizeInventory(); num++)
{ {
int slot = data.readByte(); if ( (slot & (1 << num)) > 0 )
boolean oldSmash = smash;
boolean newSmash = (slot & 64) == 64;
if ( oldSmash != newSmash && newSmash )
{ {
smash = true; AEItemStack st = AEItemStack.create( inv.getStackInSlot( num ) );
clientStart = System.currentTimeMillis(); st.writeToPacket( data );
}
for (int num = 0; num < inv.getSizeInventory(); num++)
{
if ( (slot & (1 << num)) > 0 )
inv.setInventorySlotContents( num, AEItemStack.loadItemStackFromPacket( data ).getItemStack() );
else
inv.setInventorySlotContents( num, null );
}
return false;
}
@Override
public void writeToStream(ByteBuf data) throws IOException
{
int slot = smash ? 64 : 0;
for (int num = 0; num < inv.getSizeInventory(); num++)
{
if ( inv.getStackInSlot( num ) != null )
slot = slot | (1 << num);
}
data.writeByte( slot );
for (int num = 0; num < inv.getSizeInventory(); num++)
{
if ( (slot & (1 << num)) > 0 )
{
AEItemStack st = AEItemStack.create( inv.getStackInSlot( num ) );
st.writeToPacket( data );
}
} }
} }
}
};
@Override @Override
public boolean requiresTESR() public boolean requiresTESR()
@@ -135,7 +126,6 @@ public class TileInscriber extends AENetworkPowerTile implements IGridTickable
gridProxy.setValidSides( EnumSet.noneOf( ForgeDirection.class ) ); gridProxy.setValidSides( EnumSet.noneOf( ForgeDirection.class ) );
internalMaxPower = 1500; internalMaxPower = 1500;
gridProxy.setIdlePowerUsage( 0 ); gridProxy.setIdlePowerUsage( 0 );
addNewHandler( new TileInscriberHandler() );
} }
@Override @Override
+15 -27
View File
@@ -36,7 +36,7 @@ import appeng.api.util.IConfigureableObject;
import appeng.helpers.DualityInterface; import appeng.helpers.DualityInterface;
import appeng.helpers.IInterfaceHost; import appeng.helpers.IInterfaceHost;
import appeng.helpers.IPriorityHost; import appeng.helpers.IPriorityHost;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.tile.grid.AENetworkInvTile; import appeng.tile.grid.AENetworkInvTile;
import appeng.tile.inventory.InvOperation; import appeng.tile.inventory.InvOperation;
@@ -100,36 +100,24 @@ public class TileInterface extends AENetworkInvTile implements IGridTickable, IS
duality.gridChanged(); duality.gridChanged();
} }
class TileInterfaceHandler extends AETileEventHandler @TileEvent(TileEventType.WORLD_NBT_WRITE)
public void writeToNBT_TileInterface(NBTTagCompound data)
{ {
data.setInteger( "pointAt", pointAt.ordinal() );
duality.writeToNBT( data );
}
public TileInterfaceHandler() { @TileEvent(TileEventType.WORLD_NBT_READ)
super( TileEventType.WORLD_NBT ); public void readFromNBT_TileInterface(NBTTagCompound data)
} {
int val = data.getInteger( "pointAt" );
@Override if ( val >= 0 && val < ForgeDirection.values().length )
public void writeToNBT(NBTTagCompound data) pointAt = ForgeDirection.values()[val];
{ else
data.setInteger( "pointAt", pointAt.ordinal() ); pointAt = ForgeDirection.UNKNOWN;
duality.writeToNBT( data );
}
@Override duality.readFromNBT( data );
public void readFromNBT(NBTTagCompound data)
{
int val = data.getInteger( "pointAt" );
if ( val >= 0 && val < ForgeDirection.values().length )
pointAt = ForgeDirection.values()[val];
else
pointAt = ForgeDirection.UNKNOWN;
duality.readFromNBT( data );
}
};
public TileInterface() {
addNewHandler( new TileInterfaceHandler() );
} }
@Override @Override
+7 -20
View File
@@ -1,7 +1,7 @@
package appeng.tile.misc; package appeng.tile.misc;
import appeng.tile.AEBaseTile; import appeng.tile.AEBaseTile;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.util.Platform; import appeng.util.Platform;
@@ -16,28 +16,15 @@ public class TileLightDetector extends AEBaseTile
return lastLight > 0; return lastLight > 0;
} }
class LightDetectorHandler extends AETileEventHandler @TileEvent(TileEventType.TICK)
public void Tick_TileLightDetector()
{ {
lastCheck++;
public LightDetectorHandler() { if ( lastCheck > 30 )
super( TileEventType.TICK );
}
@Override
public void Tick()
{ {
lastCheck++; lastCheck = 0;
if ( lastCheck > 30 ) updateLight();
{
lastCheck = 0;
updateLight();
}
} }
};
public TileLightDetector() {
addNewHandler( new LightDetectorHandler() );
} }
public void updateLight() public void updateLight()
+25 -37
View File
@@ -19,7 +19,7 @@ import appeng.api.util.AEColor;
import appeng.helpers.Splot; import appeng.helpers.Splot;
import appeng.items.misc.ItemPaintBall; import appeng.items.misc.ItemPaintBall;
import appeng.tile.AEBaseTile; import appeng.tile.AEBaseTile;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
@@ -73,45 +73,33 @@ public class TilePaint extends AEBaseTile
maxLit(); maxLit();
} }
class PaintHandler extends AETileEventHandler @TileEvent(TileEventType.WORLD_NBT_WRITE)
public void writeToNBT_TilePaint(NBTTagCompound data)
{ {
ByteBuf myDat = Unpooled.buffer();
public PaintHandler() { writeBuffer( myDat );
super( TileEventType.NETWORK, TileEventType.WORLD_NBT ); if ( myDat.hasArray() )
} data.setByteArray( "dots", myDat.array() );
@Override
public void writeToNBT(NBTTagCompound data)
{
ByteBuf myDat = Unpooled.buffer();
writeBuffer( myDat );
if ( myDat.hasArray() )
data.setByteArray( "dots", myDat.array() );
}
@Override
public void readFromNBT(NBTTagCompound data)
{
if ( data.hasKey( "dots" ) )
readBuffer( Unpooled.copiedBuffer( data.getByteArray( "dots" ) ) );
}
@Override
public void writeToStream(ByteBuf data) throws IOException
{
writeBuffer( data );
}
@Override
public boolean readFromStream(ByteBuf data) throws IOException
{
readBuffer( data );
return true;
}
} }
public TilePaint() { @TileEvent(TileEventType.WORLD_NBT_READ)
addNewHandler( new PaintHandler() ); public void readFromNBT_TilePaint(NBTTagCompound data)
{
if ( data.hasKey( "dots" ) )
readBuffer( Unpooled.copiedBuffer( data.getByteArray( "dots" ) ) );
}
@TileEvent(TileEventType.NETWORK_WRITE)
public void writeToStream_TilePaint(ByteBuf data) throws IOException
{
writeBuffer( data );
}
@TileEvent(TileEventType.NETWORK_READ)
public boolean readFromStream_TilePaint(ByteBuf data) throws IOException
{
readBuffer( data );
return true;
} }
public void onNeighborBlockChange() public void onNeighborBlockChange()
+15 -25
View File
@@ -11,7 +11,7 @@ import appeng.api.networking.events.MENetworkEventSubscribe;
import appeng.api.networking.events.MENetworkPowerStatusChange; import appeng.api.networking.events.MENetworkPowerStatusChange;
import appeng.api.util.AECableType; import appeng.api.util.AECableType;
import appeng.me.GridAccessException; import appeng.me.GridAccessException;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.tile.grid.AENetworkTile; import appeng.tile.grid.AENetworkTile;
import appeng.util.Platform; import appeng.util.Platform;
@@ -33,41 +33,31 @@ public class TileQuartzGrowthAccelerator extends AENetworkTile implements IPower
return AECableType.COVERED; return AECableType.COVERED;
} }
private class TileChargerHandler extends AETileEventHandler @TileEvent(TileEventType.NETWORK_READ)
public boolean readFromStream_TileQuartzGrowthAccelerator(ByteBuf data) throws IOException
{ {
boolean hadPower = hasPower;
hasPower = data.readBoolean();
return hasPower != hadPower;
}
public TileChargerHandler() { @TileEvent(TileEventType.NETWORK_WRITE)
super( TileEventType.NETWORK ); public void writeToStream_TileQuartzGrowthAccelerator(ByteBuf data) throws IOException
} {
try
@Override
public boolean readFromStream(ByteBuf data) throws IOException
{ {
boolean hadPower = hasPower; data.writeBoolean( gridProxy.getEnergy().isNetworkPowered() );
hasPower = data.readBoolean();
return hasPower != hadPower;
} }
catch (GridAccessException e)
@Override
public void writeToStream(ByteBuf data) throws IOException
{ {
try data.writeBoolean( false );
{
data.writeBoolean( gridProxy.getEnergy().isNetworkPowered() );
}
catch (GridAccessException e)
{
data.writeBoolean( false );
}
} }
}
};
public TileQuartzGrowthAccelerator() { public TileQuartzGrowthAccelerator() {
gridProxy.setValidSides( EnumSet.noneOf( ForgeDirection.class ) ); gridProxy.setValidSides( EnumSet.noneOf( ForgeDirection.class ) );
gridProxy.setFlags(); gridProxy.setFlags();
gridProxy.setIdlePowerUsage( 8 ); gridProxy.setIdlePowerUsage( 8 );
addNewHandler( new TileChargerHandler() );
} }
@Override @Override
+54 -63
View File
@@ -47,7 +47,7 @@ import appeng.api.util.IConfigManager;
import appeng.helpers.PlayerSecuirtyWrapper; import appeng.helpers.PlayerSecuirtyWrapper;
import appeng.me.GridAccessException; import appeng.me.GridAccessException;
import appeng.me.storage.SecurityInventory; import appeng.me.storage.SecurityInventory;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.tile.grid.AENetworkTile; import appeng.tile.grid.AENetworkTile;
import appeng.tile.inventory.AppEngInternalInventory; import appeng.tile.inventory.AppEngInternalInventory;
@@ -122,75 +122,67 @@ public class TileSecurity extends AENetworkTile implements ITerminalHost, IAEApp
isActive = false; isActive = false;
} }
class SecurityHandler extends AETileEventHandler @TileEvent(TileEventType.NETWORK_READ)
public boolean readFromStream_TileSecurity(ByteBuf data) throws IOException
{ {
boolean wasActive = isActive;
isActive = data.readBoolean();
public SecurityHandler() { AEColor oldPaintedColor = paintedColor;
super( TileEventType.WORLD_NBT, TileEventType.NETWORK ); paintedColor = AEColor.values()[data.readByte()];
return oldPaintedColor != paintedColor || wasActive != isActive;
}
@TileEvent(TileEventType.NETWORK_WRITE)
public void writeToStream_TileSecurity(ByteBuf data) throws IOException
{
data.writeBoolean( gridProxy.isActive() );
data.writeByte( paintedColor.ordinal() );
}
@TileEvent(TileEventType.WORLD_NBT_WRITE)
public void writeToNBT_TileSecurity(NBTTagCompound data)
{
cm.writeToNBT( data );
data.setByte( "paintedColor", (byte) paintedColor.ordinal() );
data.setLong( "securityKey", securityKey );
configSlot.writeToNBT( data, "config" );
NBTTagCompound storedItems = new NBTTagCompound();
int offset = 0;
for (IAEItemStack ais : inventory.storedItems)
{
NBTTagCompound it = new NBTTagCompound();
ais.getItemStack().writeToNBT( it );
storedItems.setTag( "" + (offset++), it );
} }
@Override data.setTag( "storedItems", storedItems );
public boolean readFromStream(ByteBuf data) throws IOException }
@TileEvent(TileEventType.WORLD_NBT_READ)
public void readFromNBT_TileSecurity(NBTTagCompound data)
{
cm.readFromNBT( data );
if ( data.hasKey( "paintedColor" ) )
paintedColor = AEColor.values()[data.getByte( "paintedColor" )];
securityKey = data.getLong( "securityKey" );
configSlot.readFromNBT( data, "config" );
NBTTagCompound storedItems = data.getCompoundTag( "storedItems" );
for (Object key : storedItems.func_150296_c())
{ {
boolean wasActive = isActive; NBTBase obj = storedItems.getTag( (String) key );
isActive = data.readBoolean(); if ( obj instanceof NBTTagCompound )
AEColor oldPaintedColor = paintedColor;
paintedColor = AEColor.values()[data.readByte()];
return oldPaintedColor != paintedColor || wasActive != isActive;
}
@Override
public void writeToStream(ByteBuf data) throws IOException
{
data.writeBoolean( gridProxy.isActive() );
data.writeByte( paintedColor.ordinal() );
}
@Override
public void writeToNBT(NBTTagCompound data)
{
cm.writeToNBT( data );
data.setByte( "paintedColor", (byte) paintedColor.ordinal() );
data.setLong( "securityKey", securityKey );
configSlot.writeToNBT( data, "config" );
NBTTagCompound storedItems = new NBTTagCompound();
int offset = 0;
for (IAEItemStack ais : inventory.storedItems)
{ {
NBTTagCompound it = new NBTTagCompound(); inventory.storedItems.add( AEItemStack.create( ItemStack.loadItemStackFromNBT( (NBTTagCompound) obj ) ) );
ais.getItemStack().writeToNBT( it );
storedItems.setTag( "" + (offset++), it );
}
data.setTag( "storedItems", storedItems );
}
@Override
public void readFromNBT(NBTTagCompound data)
{
cm.readFromNBT( data );
if ( data.hasKey( "paintedColor" ) )
paintedColor = AEColor.values()[data.getByte( "paintedColor" )];
securityKey = data.getLong( "securityKey" );
configSlot.readFromNBT( data, "config" );
NBTTagCompound storedItems = data.getCompoundTag( "storedItems" );
for (Object key : storedItems.func_150296_c())
{
NBTBase obj = storedItems.getTag( (String) key );
if ( obj instanceof NBTTagCompound )
{
inventory.storedItems.add( AEItemStack.create( ItemStack.loadItemStackFromNBT( (NBTTagCompound) obj ) ) );
}
} }
} }
}; }
public void inventoryChanged() public void inventoryChanged()
{ {
@@ -243,7 +235,6 @@ public class TileSecurity extends AENetworkTile implements ITerminalHost, IAEApp
} }
public TileSecurity() { public TileSecurity() {
addNewHandler( new SecurityHandler() );
gridProxy.setFlags( GridFlags.REQUIRE_CHANNEL ); gridProxy.setFlags( GridFlags.REQUIRE_CHANNEL );
gridProxy.setIdlePowerUsage( 2.0 ); gridProxy.setIdlePowerUsage( 2.0 );
diffrence++; diffrence++;
+26 -36
View File
@@ -19,7 +19,7 @@ import appeng.api.util.AECableType;
import appeng.api.util.DimensionalCoord; import appeng.api.util.DimensionalCoord;
import appeng.core.settings.TickRates; import appeng.core.settings.TickRates;
import appeng.me.GridAccessException; import appeng.me.GridAccessException;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.tile.grid.AENetworkInvTile; import appeng.tile.grid.AENetworkInvTile;
import appeng.tile.inventory.AppEngInternalInventory; import appeng.tile.inventory.AppEngInternalInventory;
@@ -46,49 +46,39 @@ public class TileVibrationChamber extends AENetworkInvTile implements IGridTicka
return AECableType.COVERED; return AECableType.COVERED;
} }
private class TileVibrationChamberHandler extends AETileEventHandler @TileEvent(TileEventType.NETWORK_READ)
public boolean readFromStream_TileVibrationChamber(ByteBuf data) throws IOException
{ {
boolean wasOn = isOn;
isOn = data.readBoolean();
return wasOn != isOn; // TESR dosn't need updates!
}
public TileVibrationChamberHandler() { @TileEvent(TileEventType.NETWORK_WRITE)
super( TileEventType.NETWORK, TileEventType.WORLD_NBT ); public void writeToStream_TileVibrationChamber(ByteBuf data) throws IOException
} {
data.writeBoolean( burnTime > 0 );
}
@Override @TileEvent(TileEventType.WORLD_NBT_WRITE)
public boolean readFromStream(ByteBuf data) throws IOException public void writeToNBT_TileVibrationChamber(NBTTagCompound data)
{ {
boolean wasOn = isOn; data.setDouble( "burnTime", burnTime );
isOn = data.readBoolean(); data.setDouble( "maxBurnTime", maxBurnTime );
return wasOn != isOn; // TESR dosn't need updates! data.setInteger( "burnSpeed", burnSpeed );
} }
@Override @TileEvent(TileEventType.WORLD_NBT_READ)
public void writeToStream(ByteBuf data) throws IOException public void readFromNBT_TileVibrationChamber(NBTTagCompound data)
{ {
data.writeBoolean( burnTime > 0 ); burnTime = data.getDouble( "burnTime" );
} maxBurnTime = data.getDouble( "maxBurnTime" );
burnSpeed = data.getInteger( "burnSpeed" );
@Override }
public void writeToNBT(NBTTagCompound data)
{
data.setDouble( "burnTime", burnTime );
data.setDouble( "maxBurnTime", maxBurnTime );
data.setInteger( "burnSpeed", burnSpeed );
}
@Override
public void readFromNBT(NBTTagCompound data)
{
burnTime = data.getDouble( "burnTime" );
maxBurnTime = data.getDouble( "maxBurnTime" );
burnSpeed = data.getInteger( "burnSpeed" );
}
};
public TileVibrationChamber() { public TileVibrationChamber() {
gridProxy.setIdlePowerUsage( 0 ); gridProxy.setIdlePowerUsage( 0 );
gridProxy.setFlags(); gridProxy.setFlags();
addNewHandler( new TileVibrationChamberHandler() );
} }
@Override @Override
+28 -41
View File
@@ -33,7 +33,7 @@ import appeng.integration.IntegrationType;
import appeng.integration.abstraction.IImmibisMicroblocks; import appeng.integration.abstraction.IImmibisMicroblocks;
import appeng.parts.CableBusContainer; import appeng.parts.CableBusContainer;
import appeng.tile.AEBaseTile; import appeng.tile.AEBaseTile;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.util.Platform; import appeng.util.Platform;
@@ -43,49 +43,40 @@ public class TileCableBus extends AEBaseTile implements AEMultiTile, ICustomColl
public CableBusContainer cb = new CableBusContainer( this ); public CableBusContainer cb = new CableBusContainer( this );
private int oldLV = -1; // on re-calculate light when it changes private int oldLV = -1; // on re-calculate light when it changes
class CableBusHandler extends AETileEventHandler @TileEvent(TileEventType.WORLD_NBT_READ)
public void readFromNBT_TileCableBus(NBTTagCompound data)
{ {
cb.readFromNBT( data );
}
public CableBusHandler() { @TileEvent(TileEventType.WORLD_NBT_WRITE)
super( TileEventType.NETWORK, TileEventType.WORLD_NBT ); public void writeToNBT_TileCableBus(NBTTagCompound data)
} {
cb.writeToNBT( data );
}
@Override @TileEvent(TileEventType.NETWORK_READ)
public void readFromNBT(NBTTagCompound data) public boolean readFromStream_TileCableBus(ByteBuf data) throws IOException
{
boolean ret = cb.readFromStream( data );
int newLV = cb.getLightValue();
if ( newLV != oldLV )
{ {
cb.readFromNBT( data ); oldLV = newLV;
worldObj.func_147451_t( xCoord, yCoord, zCoord );
// worldObj.updateAllLightTypes( xCoord, yCoord, zCoord );
} }
@Override updateTileSetting();
public void writeToNBT(NBTTagCompound data) return ret;
{ }
cb.writeToNBT( data );
}
@Override @TileEvent(TileEventType.NETWORK_WRITE)
public boolean readFromStream(ByteBuf data) throws IOException public void writeToStream_TileCableBus(ByteBuf data) throws IOException
{ {
boolean ret = cb.readFromStream( data ); cb.writeToStream( 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;
}
@Override
public void writeToStream(ByteBuf data) throws IOException
{
cb.writeToStream( data );
}
};
@Override @Override
public boolean isInWorld() public boolean isInWorld()
@@ -171,10 +162,6 @@ public class TileCableBus extends AEBaseTile implements AEMultiTile, ICustomColl
cb.getDrops( drops ); cb.getDrops( drops );
} }
public TileCableBus() {
addNewHandler( new CableBusHandler() );
}
@Override @Override
public IGridNode getGridNode(ForgeDirection dir) public IGridNode getGridNode(ForgeDirection dir)
{ {
+15 -24
View File
@@ -8,7 +8,7 @@ import appeng.api.config.PowerMultiplier;
import appeng.api.networking.energy.IEnergyGrid; import appeng.api.networking.energy.IEnergyGrid;
import appeng.api.util.AECableType; import appeng.api.util.AECableType;
import appeng.me.GridAccessException; import appeng.me.GridAccessException;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.tile.grid.AENetworkPowerTile; import appeng.tile.grid.AENetworkPowerTile;
import appeng.tile.inventory.AppEngInternalInventory; import appeng.tile.inventory.AppEngInternalInventory;
@@ -26,36 +26,28 @@ public class TileEnergyAcceptor extends AENetworkPowerTile
return AECableType.COVERED; return AECableType.COVERED;
} }
private class TilePowerRelayHandler extends AETileEventHandler @TileEvent(TileEventType.TICK)
public void Tick_TileEnergyAcceptor()
{ {
if ( internalCurrentPower > 0 )
public TilePowerRelayHandler() {
super( TileEventType.TICK );
}
@Override
public void Tick()
{ {
if ( internalCurrentPower > 0 ) try
{ {
try IEnergyGrid eg = gridProxy.getEnergy();
{ double powerRequested = internalCurrentPower - eg.injectPower( internalCurrentPower, Actionable.SIMULATE );
IEnergyGrid eg = gridProxy.getEnergy();
double powerRequested = internalCurrentPower - eg.injectPower( internalCurrentPower, Actionable.SIMULATE );
if ( powerRequested > 0 ) if ( powerRequested > 0 )
{
eg.injectPower( extractAEPower( powerRequested, Actionable.MODULATE, PowerMultiplier.ONE ), Actionable.MODULATE );
}
}
catch (GridAccessException e)
{ {
// null net, probably bads. eg.injectPower( extractAEPower( powerRequested, Actionable.MODULATE, PowerMultiplier.ONE ), Actionable.MODULATE );
} }
} }
catch (GridAccessException e)
{
// null net, probably bads.
}
} }
}; }
@Override @Override
protected double getFunnelPowerDemand(double maxRequired) protected double getFunnelPowerDemand(double maxRequired)
@@ -90,7 +82,6 @@ public class TileEnergyAcceptor extends AENetworkPowerTile
public TileEnergyAcceptor() { public TileEnergyAcceptor() {
gridProxy.setIdlePowerUsage( 0.0 ); gridProxy.setIdlePowerUsage( 0.0 );
addNewHandler( new TilePowerRelayHandler() );
internalMaxPower = 100; internalMaxPower = 100;
} }
+11 -21
View File
@@ -10,7 +10,7 @@ import appeng.api.networking.events.MENetworkPowerStorage;
import appeng.api.networking.events.MENetworkPowerStorage.PowerEventType; import appeng.api.networking.events.MENetworkPowerStorage.PowerEventType;
import appeng.api.util.AECableType; import appeng.api.util.AECableType;
import appeng.me.GridAccessException; import appeng.me.GridAccessException;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.tile.grid.AENetworkTile; import appeng.tile.grid.AENetworkTile;
import appeng.util.SettingsFrom; import appeng.util.SettingsFrom;
@@ -48,31 +48,21 @@ public class TileEnergyCell extends AENetworkTile implements IAEPowerStorage
} }
} }
private class TileEnergyCellHandler extends AETileEventHandler @TileEvent(TileEventType.WORLD_NBT_WRITE)
public void writeToNBT_TileEnergyCell(NBTTagCompound data)
{ {
if ( !worldObj.isRemote )
data.setDouble( "internalCurrentPower", internalCurrentPower );
}
public TileEnergyCellHandler() { @TileEvent(TileEventType.WORLD_NBT_READ)
super( TileEventType.WORLD_NBT ); public void readFromNBT_TileEnergyCell(NBTTagCompound data)
} {
internalCurrentPower = data.getDouble( "internalCurrentPower" );
@Override }
public void writeToNBT(NBTTagCompound data)
{
if ( !worldObj.isRemote )
data.setDouble( "internalCurrentPower", internalCurrentPower );
}
@Override
public void readFromNBT(NBTTagCompound data)
{
internalCurrentPower = data.getDouble( "internalCurrentPower" );
}
};
public TileEnergyCell() { public TileEnergyCell() {
gridProxy.setIdlePowerUsage( 0 ); gridProxy.setIdlePowerUsage( 0 );
addNewHandler( new TileEnergyCellHandler() );
} }
@Override @Override
+21 -33
View File
@@ -19,7 +19,7 @@ import appeng.api.util.AECableType;
import appeng.api.util.DimensionalCoord; import appeng.api.util.DimensionalCoord;
import appeng.core.AEConfig; import appeng.core.AEConfig;
import appeng.me.GridAccessException; import appeng.me.GridAccessException;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.tile.grid.AENetworkInvTile; import appeng.tile.grid.AENetworkInvTile;
import appeng.tile.inventory.AppEngInternalInventory; import appeng.tile.inventory.AppEngInternalInventory;
@@ -40,7 +40,6 @@ public class TileWireless extends AENetworkInvTile implements IWirelessAccessPoi
public TileWireless() { public TileWireless() {
gridProxy.setFlags( GridFlags.REQUIRE_CHANNEL ); gridProxy.setFlags( GridFlags.REQUIRE_CHANNEL );
gridProxy.setValidSides( EnumSet.noneOf( ForgeDirection.class ) ); gridProxy.setValidSides( EnumSet.noneOf( ForgeDirection.class ) );
addNewHandler( new TileWirelessHandler() );
} }
@Override @Override
@@ -62,45 +61,34 @@ public class TileWireless extends AENetworkInvTile implements IWirelessAccessPoi
markForUpdate(); markForUpdate();
} }
class TileWirelessHandler extends AETileEventHandler @TileEvent(TileEventType.NETWORK_READ)
public boolean readFromStream_TileWireless(ByteBuf data) throws IOException
{ {
int old = clientFlags;
clientFlags = data.readByte();
public TileWirelessHandler() { return old != clientFlags;
super( TileEventType.NETWORK ); }
}
@Override @TileEvent(TileEventType.NETWORK_WRITE)
public boolean readFromStream(ByteBuf data) throws IOException public void writeToStream_TileWireless(ByteBuf data) throws IOException
{
clientFlags = 0;
try
{ {
boolean eh = super.readFromStream( data ); if ( gridProxy.getEnergy().isNetworkPowered() )
clientFlags |= POWERED_FLAG;
int old = clientFlags; if ( gridProxy.getNode().meetsChannelRequirements() )
clientFlags = data.readByte(); clientFlags |= CHANNEL_FLAG;
return eh || old != clientFlags;
} }
catch (GridAccessException e)
@Override
public void writeToStream(ByteBuf data) throws IOException
{ {
// meh
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 );
} }
data.writeByte( (byte) clientFlags );
} }
@Override @Override
+9 -22
View File
@@ -11,7 +11,7 @@ import appeng.api.config.PowerUnits;
import appeng.api.networking.energy.IAEPowerStorage; import appeng.api.networking.energy.IAEPowerStorage;
import appeng.api.networking.events.MENetworkPowerStorage.PowerEventType; import appeng.api.networking.events.MENetworkPowerStorage.PowerEventType;
import appeng.tile.AEBaseInvTile; import appeng.tile.AEBaseInvTile;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
public abstract class AERootPoweredTile extends AEBaseInvTile implements IAEPowerStorage public abstract class AERootPoweredTile extends AEBaseInvTile implements IAEPowerStorage
@@ -40,29 +40,16 @@ public abstract class AERootPoweredTile extends AEBaseInvTile implements IAEPowe
return internalPowerSides.clone(); return internalPowerSides.clone();
} }
private class AEPoweredRootHandler extends AETileEventHandler @TileEvent(TileEventType.WORLD_NBT_WRITE)
public void writeToNBT_AERootPoweredTile(NBTTagCompound data)
{ {
data.setDouble( "internalCurrentPower", internalCurrentPower );
}
public AEPoweredRootHandler() { @TileEvent(TileEventType.WORLD_NBT_READ)
super( TileEventType.WORLD_NBT ); public void readFromNBT_AERootPoweredTile(NBTTagCompound data)
} {
internalCurrentPower = data.getDouble( "internalCurrentPower" );
@Override
public void writeToNBT(NBTTagCompound data)
{
data.setDouble( "internalCurrentPower", internalCurrentPower );
}
@Override
public void readFromNBT(NBTTagCompound data)
{
internalCurrentPower = data.getDouble( "internalCurrentPower" );
}
};
public AERootPoweredTile() {
addNewHandler( new AEPoweredRootHandler() );
} }
final protected double getExternalPowerDemand(PowerUnits externalUnit, double maxPowerRequired) final protected double getExternalPowerDemand(PowerUnits externalUnit, double maxPowerRequired)
+11 -1
View File
@@ -7,6 +7,8 @@ import appeng.core.AppEng;
import appeng.integration.IntegrationType; import appeng.integration.IntegrationType;
import appeng.integration.abstraction.IMJ5; import appeng.integration.abstraction.IMJ5;
import appeng.integration.abstraction.helpers.BaseMJperdition; import appeng.integration.abstraction.helpers.BaseMJperdition;
import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType;
import appeng.transformer.annotations.integration.Interface; import appeng.transformer.annotations.integration.Interface;
import appeng.transformer.annotations.integration.Method; import appeng.transformer.annotations.integration.Method;
import appeng.util.Platform; import appeng.util.Platform;
@@ -20,6 +22,14 @@ public abstract class MinecraftJoules5 extends AERootPoweredTile implements IPow
BaseMJperdition bcPowerWrapper; BaseMJperdition bcPowerWrapper;
@Method(iname = "MJ5")
@TileEvent(TileEventType.TICK)
public void Tick_MinecraftJoules5()
{
if ( bcPowerWrapper != null )
bcPowerWrapper.Tick();
}
public MinecraftJoules5() { public MinecraftJoules5() {
if ( Platform.isServer() ) if ( Platform.isServer() )
{ {
@@ -30,7 +40,7 @@ public abstract class MinecraftJoules5 extends AERootPoweredTile implements IPow
IMJ5 mjIntegration = (IMJ5) AppEng.instance.getIntegration( IntegrationType.MJ5 ); IMJ5 mjIntegration = (IMJ5) AppEng.instance.getIntegration( IntegrationType.MJ5 );
if ( mjIntegration != null ) if ( mjIntegration != null )
{ {
addNewHandler( bcPowerWrapper = (BaseMJperdition) mjIntegration.createPerdition( this ) ); bcPowerWrapper = (BaseMJperdition) mjIntegration.createPerdition( this );
if ( bcPowerWrapper != null ) if ( bcPowerWrapper != null )
bcPowerWrapper.configure( 1, 380, 1.0f / 5.0f, 1000 ); bcPowerWrapper.configure( 1, 380, 1.0f / 5.0f, 1000 );
} }
+7 -19
View File
@@ -3,9 +3,10 @@ package appeng.tile.powersink;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
import Reika.RotaryCraft.API.ShaftPowerReceiver; import Reika.RotaryCraft.API.ShaftPowerReceiver;
import appeng.api.config.PowerUnits; import appeng.api.config.PowerUnits;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.transformer.annotations.integration.Interface; import appeng.transformer.annotations.integration.Interface;
import appeng.transformer.annotations.integration.Method;
import appeng.util.Platform; import appeng.util.Platform;
@Interface(iname = "RotaryCraft", iface = "Reika.RotaryCraft.API.ShaftPowerReceiver") @Interface(iname = "RotaryCraft", iface = "Reika.RotaryCraft.API.ShaftPowerReceiver")
@@ -17,25 +18,12 @@ public abstract class RotaryCraft extends IC2 implements ShaftPowerReceiver
private long power = 0; private long power = 0;
private int alpha = 0; private int alpha = 0;
class RotaryCraftHandler extends AETileEventHandler @TileEvent(TileEventType.TICK)
@Method(iname = "RotaryCraft")
public void Tick_RotaryCraft()
{ {
if ( worldObj != null && !worldObj.isRemote && power > 0 )
public RotaryCraftHandler() { injectExternalPower( PowerUnits.WA, power );
super( TileEventType.TICK );
}
@Override
public void Tick()
{
if ( power > 0 )
injectExternalPower( PowerUnits.WA, power );
}
};
public RotaryCraft() {
if ( Platform.isServer() )
addNewHandler( new RotaryCraftHandler() );
} }
@Override @Override
+30 -41
View File
@@ -21,7 +21,7 @@ import appeng.me.cluster.IAECluster;
import appeng.me.cluster.IAEMultiBlock; import appeng.me.cluster.IAEMultiBlock;
import appeng.me.cluster.implementations.QuantumCalculator; import appeng.me.cluster.implementations.QuantumCalculator;
import appeng.me.cluster.implementations.QuantumCluster; import appeng.me.cluster.implementations.QuantumCluster;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.tile.grid.AENetworkInvTile; import appeng.tile.grid.AENetworkInvTile;
import appeng.tile.inventory.AppEngInternalInventory; import appeng.tile.inventory.AppEngInternalInventory;
@@ -50,57 +50,46 @@ public class TileQuantumBridge extends AENetworkInvTile implements IAEMultiBlock
private boolean updateStatus = false; private boolean updateStatus = false;
class QBridgeHandler extends AETileEventHandler @TileEvent(TileEventType.TICK)
public void Tick_TileQuantumBridge()
{ {
if ( updateStatus )
public QBridgeHandler() {
super( TileEventType.NETWORK, TileEventType.TICK );
gridProxy.setValidSides( EnumSet.noneOf( ForgeDirection.class ) );
gridProxy.setFlags( GridFlags.DENSE_CAPACITY );
gridProxy.setIdlePowerUsage( 22 );
inv.setMaxStackSize( 1 );
}
@Override
public void Tick()
{ {
if ( updateStatus ) updateStatus = false;
{ if ( clust != null )
updateStatus = false; clust.updateStatus( true );
if ( clust != null ) markForUpdate();
clust.updateStatus( true );
markForUpdate();
}
} }
}
@Override @TileEvent(TileEventType.NETWORK_WRITE)
public void writeToStream(ByteBuf data) throws IOException public void writeToStream_TileQuantumBridge(ByteBuf data) throws IOException
{ {
int out = xdex; int out = xdex;
if ( getStackInSlot( 0 ) != null && xdex != -1 ) if ( getStackInSlot( 0 ) != null && xdex != -1 )
out = out | hasSingularity; out = out | hasSingularity;
if ( gridProxy.isActive() && xdex != -1 ) if ( gridProxy.isActive() && xdex != -1 )
out = out | powered; out = out | powered;
data.writeByte( (byte) out ); data.writeByte( (byte) out );
} }
@Override @TileEvent(TileEventType.NETWORK_READ)
public boolean readFromStream(ByteBuf data) throws IOException public boolean readFromStream_TileQuantumBridge(ByteBuf data) throws IOException
{ {
int oldValue = xdex; int oldValue = xdex;
xdex = data.readByte(); xdex = data.readByte();
bridgePowered = (xdex | powered) == powered; bridgePowered = (xdex | powered) == powered;
return xdex != oldValue; return xdex != oldValue;
} }
};
public TileQuantumBridge() { public TileQuantumBridge() {
addNewHandler( new QBridgeHandler() ); gridProxy.setValidSides( EnumSet.noneOf( ForgeDirection.class ) );
gridProxy.setFlags( GridFlags.DENSE_CAPACITY ); gridProxy.setFlags( GridFlags.DENSE_CAPACITY );
gridProxy.setIdlePowerUsage( 22 );
inv.setMaxStackSize( 1 );
} }
public IInventory getInternalInventory() public IInventory getInternalInventory()
+11 -20
View File
@@ -22,7 +22,7 @@ import appeng.api.util.DimensionalCoord;
import appeng.hooks.TickHandler; import appeng.hooks.TickHandler;
import appeng.items.storage.ItemSpatialStorageCell; import appeng.items.storage.ItemSpatialStorageCell;
import appeng.me.cache.SpatialPylonCache; import appeng.me.cache.SpatialPylonCache;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.tile.grid.AENetworkInvTile; import appeng.tile.grid.AENetworkInvTile;
import appeng.tile.inventory.AppEngInternalInventory; import appeng.tile.inventory.AppEngInternalInventory;
@@ -36,29 +36,20 @@ public class TileSpatialIOPort extends AENetworkInvTile implements Callable
AppEngInternalInventory inv = new AppEngInternalInventory( this, 2 ); AppEngInternalInventory inv = new AppEngInternalInventory( this, 2 );
YesNo lastRedstoneState = YesNo.UNDECIDED; YesNo lastRedstoneState = YesNo.UNDECIDED;
class SpatialTileIOPortHandler extends AETileEventHandler @TileEvent(TileEventType.WORLD_NBT_WRITE)
public void writeToNBT_TileSpatialIOPort(NBTTagCompound data)
{ {
data.setInteger( "lastRedstoneState", lastRedstoneState.ordinal() );
}
public SpatialTileIOPortHandler() { @TileEvent(TileEventType.WORLD_NBT_READ)
super( TileEventType.WORLD_NBT ); public void readFromNBT_TileSpatialIOPort(NBTTagCompound data)
} {
if ( data.hasKey( "lastRedstoneState" ) )
@Override lastRedstoneState = YesNo.values()[data.getInteger( "lastRedstoneState" )];
public void writeToNBT(NBTTagCompound data) }
{
data.setInteger( "lastRedstoneState", lastRedstoneState.ordinal() );
}
@Override
public void readFromNBT(NBTTagCompound data)
{
if ( data.hasKey( "lastRedstoneState" ) )
lastRedstoneState = YesNo.values()[data.getInteger( "lastRedstoneState" )];
}
};
public TileSpatialIOPort() { public TileSpatialIOPort() {
addNewHandler( new SpatialTileIOPortHandler() );
gridProxy.setFlags( GridFlags.REQUIRE_CHANNEL ); gridProxy.setFlags( GridFlags.REQUIRE_CHANNEL );
} }
+14 -24
View File
@@ -16,7 +16,7 @@ import appeng.me.cluster.implementations.SpatialPylonCalculator;
import appeng.me.cluster.implementations.SpatialPylonCluster; import appeng.me.cluster.implementations.SpatialPylonCluster;
import appeng.me.helpers.AENetworkProxy; import appeng.me.helpers.AENetworkProxy;
import appeng.me.helpers.AENetworkProxyMultiblock; import appeng.me.helpers.AENetworkProxyMultiblock;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.tile.grid.AENetworkTile; import appeng.tile.grid.AENetworkTile;
@@ -53,34 +53,24 @@ public class TileSpatialPylon extends AENetworkTile implements IAEMultiBlock
return false; return false;
} }
private class TileSpatialPylonHandler extends AETileEventHandler @TileEvent(TileEventType.NETWORK_READ)
public boolean readFromStream_TileSpatialPylon(ByteBuf data) throws IOException
{ {
int old = displayBits;
displayBits = data.readByte();
return old != displayBits;
}
public TileSpatialPylonHandler() { @TileEvent(TileEventType.NETWORK_WRITE)
super( TileEventType.NETWORK ); public void writeToStream_TileSpatialPylon(ByteBuf data) throws IOException
} {
data.writeByte( displayBits );
@Override }
public boolean readFromStream(ByteBuf data) throws IOException
{
int old = displayBits;
displayBits = data.readByte();
return old != displayBits;
}
@Override
public void writeToStream(ByteBuf data) throws IOException
{
data.writeByte( displayBits );
}
};
public TileSpatialPylon() { public TileSpatialPylon() {
gridProxy.setFlags( GridFlags.REQUIRE_CHANNEL, GridFlags.MULTIBLOCK ); gridProxy.setFlags( GridFlags.REQUIRE_CHANNEL, GridFlags.MULTIBLOCK );
gridProxy.setIdlePowerUsage( 0.5 ); gridProxy.setIdlePowerUsage( 0.5 );
gridProxy.setValidSides( EnumSet.noneOf( ForgeDirection.class ) ); gridProxy.setValidSides( EnumSet.noneOf( ForgeDirection.class ) );
addNewHandler( new TileSpatialPylonHandler() );
} }
@Override @Override
@@ -127,14 +117,14 @@ public class TileSpatialPylon extends AENetworkTile implements IAEMultiBlock
@Override @Override
public void invalidate() public void invalidate()
{ {
disconnect(false); disconnect( false );
super.invalidate(); super.invalidate();
} }
@Override @Override
public void onChunkUnload() public void onChunkUnload()
{ {
disconnect(false); disconnect( false );
super.onChunkUnload(); super.onChunkUnload();
} }
+80 -90
View File
@@ -57,7 +57,7 @@ import appeng.api.util.IConfigManager;
import appeng.helpers.IPriorityHost; import appeng.helpers.IPriorityHost;
import appeng.me.GridAccessException; import appeng.me.GridAccessException;
import appeng.me.storage.MEInventoryHandler; import appeng.me.storage.MEInventoryHandler;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.tile.grid.AENetworkPowerTile; import appeng.tile.grid.AENetworkPowerTile;
import appeng.tile.inventory.AppEngInternalInventory; import appeng.tile.inventory.AppEngInternalInventory;
@@ -143,114 +143,105 @@ public class TileChest extends AENetworkPowerTile implements IMEChest, IFluidHan
recalculateDisplay(); recalculateDisplay();
} }
private class invManger extends AETileEventHandler @TileEvent(TileEventType.TICK)
public void Tick_TileChest()
{ {
if ( worldObj.isRemote )
return;
public invManger() { double idleUsage = gridProxy.getIdlePowerUsage();
super( TileEventType.TICK, TileEventType.NETWORK, TileEventType.WORLD_NBT );
}
@Override try
public void Tick()
{ {
if ( worldObj.isRemote ) if ( !gridProxy.getEnergy().isNetworkPowered() )
return;
double idleUsage = gridProxy.getIdlePowerUsage();
try
{ {
if ( !gridProxy.getEnergy().isNetworkPowered() ) double powerUsed = extractAEPower( idleUsage, Actionable.MODULATE, PowerMultiplier.CONFIG ); // drain
{
double powerUsed = extractAEPower( idleUsage, Actionable.MODULATE, PowerMultiplier.CONFIG ); // drain
if ( powerUsed + 0.1 >= idleUsage != (state & 0x40) > 0 )
recalculateDisplay();
}
}
catch (GridAccessException e)
{
double powerUsed = extractAEPower( gridProxy.getIdlePowerUsage(), Actionable.MODULATE, PowerMultiplier.CONFIG ); // drain
if ( powerUsed + 0.1 >= idleUsage != (state & 0x40) > 0 ) if ( powerUsed + 0.1 >= idleUsage != (state & 0x40) > 0 )
recalculateDisplay(); recalculateDisplay();
} }
if ( inv.getStackInSlot( 0 ) != null )
{
tryToStoreContents();
}
} }
catch (GridAccessException e)
@Override
public void writeToStream(ByteBuf data) throws IOException
{ {
if ( worldObj.getTotalWorldTime() - lastStateChange > 8 ) double powerUsed = extractAEPower( gridProxy.getIdlePowerUsage(), Actionable.MODULATE, PowerMultiplier.CONFIG ); // drain
state = 0; if ( powerUsed + 0.1 >= idleUsage != (state & 0x40) > 0 )
else recalculateDisplay();
state &= 0x24924924; // just keep the blinks...
for (int x = 0; x < getCellCount(); x++)
state |= (getCellStatus( x ) << (3 * x));
if ( isPowered() )
state |= 0x40;
else
state &= ~0x40;
data.writeByte( state );
data.writeByte( paintedColor.ordinal() );
ItemStack is = inv.getStackInSlot( 1 );
if ( is == null )
{
data.writeInt( 0 );
}
else
{
data.writeInt( (is.getItemDamage() << Platform.DEF_OFFSET) | Item.getIdFromItem( is.getItem() ) );
}
} }
@Override if ( inv.getStackInSlot( 0 ) != null )
public boolean readFromStream(ByteBuf data) throws IOException
{ {
int oldState = state; tryToStoreContents();
ItemStack oldType = storageType;
state = data.readByte();
AEColor oldPaintedColor = paintedColor;
paintedColor = AEColor.values()[data.readByte()];
int item = data.readInt();
if ( item == 0 )
storageType = null;
else
storageType = new ItemStack( Item.getItemById( item & 0xffff ), 1, item >> Platform.DEF_OFFSET );
lastStateChange = worldObj.getTotalWorldTime();
return oldPaintedColor != paintedColor || (state & 0xDB6DB6DB) != (oldState & 0xDB6DB6DB) || !Platform.isSameItemPrecise( oldType, storageType );
} }
}
@Override @TileEvent(TileEventType.NETWORK_WRITE)
public void readFromNBT(NBTTagCompound data) public void writeToStream_TileChest(ByteBuf data) throws IOException
{
if ( worldObj.getTotalWorldTime() - lastStateChange > 8 )
state = 0;
else
state &= 0x24924924; // just keep the blinks...
for (int x = 0; x < getCellCount(); x++)
state |= (getCellStatus( x ) << (3 * x));
if ( isPowered() )
state |= 0x40;
else
state &= ~0x40;
data.writeByte( state );
data.writeByte( paintedColor.ordinal() );
ItemStack is = inv.getStackInSlot( 1 );
if ( is == null )
{ {
config.readFromNBT( data ); data.writeInt( 0 );
priority = data.getInteger( "priority" );
if ( data.hasKey( "paintedColor" ) )
paintedColor = AEColor.values()[data.getByte( "paintedColor" )];
} }
else
@Override
public void writeToNBT(NBTTagCompound data)
{ {
config.writeToNBT( data ); data.writeInt( (is.getItemDamage() << Platform.DEF_OFFSET) | Item.getIdFromItem( is.getItem() ) );
data.setInteger( "priority", priority );
data.setByte( "paintedColor", (byte) paintedColor.ordinal() );
} }
}
}; @TileEvent(TileEventType.NETWORK_READ)
public boolean readFromStream_TileChest(ByteBuf data) throws IOException
{
int oldState = state;
ItemStack oldType = storageType;
state = data.readByte();
AEColor oldPaintedColor = paintedColor;
paintedColor = AEColor.values()[data.readByte()];
int item = data.readInt();
if ( item == 0 )
storageType = null;
else
storageType = new ItemStack( Item.getItemById( item & 0xffff ), 1, item >> Platform.DEF_OFFSET );
lastStateChange = worldObj.getTotalWorldTime();
return oldPaintedColor != paintedColor || (state & 0xDB6DB6DB) != (oldState & 0xDB6DB6DB) || !Platform.isSameItemPrecise( oldType, storageType );
}
@TileEvent(TileEventType.WORLD_NBT_READ)
public void readFromNBT_TileChest(NBTTagCompound data)
{
config.readFromNBT( data );
priority = data.getInteger( "priority" );
if ( data.hasKey( "paintedColor" ) )
paintedColor = AEColor.values()[data.getByte( "paintedColor" )];
}
@TileEvent(TileEventType.WORLD_NBT_WRITE)
public void writeToNBT_TileChest(NBTTagCompound data)
{
config.writeToNBT( data );
data.setInteger( "priority", priority );
data.setByte( "paintedColor", (byte) paintedColor.ordinal() );
}
@MENetworkEventSubscribe @MENetworkEventSubscribe
public void powerRender(MENetworkPowerStatusChange c) public void powerRender(MENetworkPowerStatusChange c)
@@ -267,7 +258,6 @@ public class TileChest extends AENetworkPowerTile implements IMEChest, IFluidHan
public TileChest() { public TileChest() {
internalMaxPower = PowerMultiplier.CONFIG.multiply( 40 ); internalMaxPower = PowerMultiplier.CONFIG.multiply( 40 );
gridProxy.setFlags( GridFlags.REQUIRE_CHANNEL ); gridProxy.setFlags( GridFlags.REQUIRE_CHANNEL );
addNewHandler( new invManger() );
config.registerSetting( Settings.SORT_BY, SortOrder.NAME ); config.registerSetting( Settings.SORT_BY, SortOrder.NAME );
config.registerSetting( Settings.VIEW_MODE, ViewItems.ALL ); config.registerSetting( Settings.VIEW_MODE, ViewItems.ALL );
config.registerSetting( Settings.SORT_DIRECTION, SortDir.ASCENDING ); config.registerSetting( Settings.SORT_DIRECTION, SortDir.ASCENDING );
+34 -44
View File
@@ -32,7 +32,7 @@ import appeng.helpers.IPriorityHost;
import appeng.me.GridAccessException; import appeng.me.GridAccessException;
import appeng.me.storage.DriveWatcher; import appeng.me.storage.DriveWatcher;
import appeng.me.storage.MEInventoryHandler; import appeng.me.storage.MEInventoryHandler;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.tile.grid.AENetworkInvTile; import appeng.tile.grid.AENetworkInvTile;
import appeng.tile.inventory.AppEngInternalInventory; import appeng.tile.inventory.AppEngInternalInventory;
@@ -87,55 +87,46 @@ public class TileDrive extends AENetworkInvTile implements IChestOrDrive, IPrior
markForUpdate(); markForUpdate();
} }
private class invManger extends AETileEventHandler @TileEvent(TileEventType.NETWORK_WRITE)
public void writeToStream_TileDrive(ByteBuf data) throws IOException
{ {
if ( worldObj.getTotalWorldTime() - lastStateChange > 8 )
state = 0;
else
state &= 0x24924924; // just keep the blinks...
public invManger() { if ( gridProxy.isActive() )
super( TileEventType.WORLD_NBT, TileEventType.NETWORK ); state |= 0x80000000;
} else
state &= ~0x80000000;
@Override for (int x = 0; x < getCellCount(); x++)
public void writeToStream(ByteBuf data) throws IOException state |= (getCellStatus( x ) << (3 * x));
{
if ( worldObj.getTotalWorldTime() - lastStateChange > 8 )
state = 0;
else
state &= 0x24924924; // just keep the blinks...
if ( gridProxy.isActive() ) data.writeInt( state );
state |= 0x80000000; }
else
state &= ~0x80000000;
for (int x = 0; x < getCellCount(); x++) @TileEvent(TileEventType.NETWORK_READ)
state |= (getCellStatus( x ) << (3 * x)); public boolean readFromStream_TileDrive(ByteBuf data) throws IOException
{
int oldState = state;
state = data.readInt();
lastStateChange = worldObj.getTotalWorldTime();
return (state & 0xDB6DB6DB) != (oldState & 0xDB6DB6DB);
}
data.writeInt( state ); @TileEvent(TileEventType.WORLD_NBT_READ)
} public void readFromNBT_TileDrive(NBTTagCompound data)
{
isCached = false;
priority = data.getInteger( "priority" );
}
@Override @TileEvent(TileEventType.WORLD_NBT_WRITE)
public boolean readFromStream(ByteBuf data) throws IOException public void writeToNBT_TileDrive(NBTTagCompound data)
{ {
int oldState = state; data.setInteger( "priority", priority );
state = data.readInt(); }
lastStateChange = worldObj.getTotalWorldTime();
return (state & 0xDB6DB6DB) != (oldState & 0xDB6DB6DB);
}
@Override
public void readFromNBT(NBTTagCompound data)
{
isCached = false;
priority = data.getInteger( "priority" );
}
@Override
public void writeToNBT(NBTTagCompound data)
{
data.setInteger( "priority", priority );
}
};
@MENetworkEventSubscribe @MENetworkEventSubscribe
public void powerRender(MENetworkPowerStatusChange c) public void powerRender(MENetworkPowerStatusChange c)
@@ -152,7 +143,6 @@ public class TileDrive extends AENetworkInvTile implements IChestOrDrive, IPrior
public TileDrive() { public TileDrive() {
mySrc = new MachineSource( this ); mySrc = new MachineSource( this );
gridProxy.setFlags( GridFlags.REQUIRE_CHANNEL ); gridProxy.setFlags( GridFlags.REQUIRE_CHANNEL );
addNewHandler( new invManger() );
} }
@Override @Override
+17 -26
View File
@@ -34,7 +34,7 @@ import appeng.api.util.IConfigManager;
import appeng.core.settings.TickRates; import appeng.core.settings.TickRates;
import appeng.me.GridAccessException; import appeng.me.GridAccessException;
import appeng.parts.automation.UpgradeInventory; import appeng.parts.automation.UpgradeInventory;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.tile.grid.AENetworkInvTile; import appeng.tile.grid.AENetworkInvTile;
import appeng.tile.inventory.AppEngInternalInventory; import appeng.tile.inventory.AppEngInternalInventory;
@@ -62,35 +62,26 @@ public class TileIOPort extends AENetworkInvTile implements IUpgradeableHost, IC
YesNo lastRedstoneState = YesNo.UNDECIDED; YesNo lastRedstoneState = YesNo.UNDECIDED;
class TileIOPortHandler extends AETileEventHandler @TileEvent(TileEventType.WORLD_NBT_WRITE)
public void writeToNBT_TileIOPort(NBTTagCompound data)
{ {
cm.writeToNBT( data );
cells.writeToNBT( data, "cells" );
upgrades.writeToNBT( data, "upgrades" );
data.setInteger( "lastRedstoneState", lastRedstoneState.ordinal() );
}
public TileIOPortHandler() { @TileEvent(TileEventType.WORLD_NBT_READ)
super( TileEventType.WORLD_NBT ); public void readFromNBT_TileIOPort(NBTTagCompound data)
} {
cm.readFromNBT( data );
@Override cells.readFromNBT( data, "cells" );
public void writeToNBT(NBTTagCompound data) upgrades.readFromNBT( data, "upgrades" );
{ if ( data.hasKey( "lastRedstoneState" ) )
cm.writeToNBT( data ); lastRedstoneState = YesNo.values()[data.getInteger( "lastRedstoneState" )];
cells.writeToNBT( data, "cells" ); }
upgrades.writeToNBT( data, "upgrades" );
data.setInteger( "lastRedstoneState", lastRedstoneState.ordinal() );
}
@Override
public void readFromNBT(NBTTagCompound data)
{
cm.readFromNBT( data );
cells.readFromNBT( data, "cells" );
upgrades.readFromNBT( data, "upgrades" );
if ( data.hasKey( "lastRedstoneState" ) )
lastRedstoneState = YesNo.values()[data.getInteger( "lastRedstoneState" )];
}
};
public TileIOPort() { public TileIOPort() {
addNewHandler( new TileIOPortHandler() );
gridProxy.setFlags( GridFlags.REQUIRE_CHANNEL ); gridProxy.setFlags( GridFlags.REQUIRE_CHANNEL );
cm.registerSetting( Settings.REDSTONE_CONTROLLED, RedstoneMode.IGNORE ); cm.registerSetting( Settings.REDSTONE_CONTROLLED, RedstoneMode.IGNORE );
cm.registerSetting( Settings.FULLNESS_MODE, FullnessMode.EMPTY ); cm.registerSetting( Settings.FULLNESS_MODE, FullnessMode.EMPTY );
+13 -26
View File
@@ -8,7 +8,7 @@ import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
import appeng.tile.AEBaseInvTile; import appeng.tile.AEBaseInvTile;
import appeng.tile.events.AETileEventHandler; import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType; import appeng.tile.events.TileEventType;
import appeng.tile.inventory.AppEngInternalInventory; import appeng.tile.inventory.AppEngInternalInventory;
import appeng.tile.inventory.InvOperation; import appeng.tile.inventory.InvOperation;
@@ -20,35 +20,22 @@ public class TileSkyChest extends AEBaseInvTile
final int sides[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35 }; final int sides[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35 };
final AppEngInternalInventory inv = new AppEngInternalInventory( this, 9 * 4 ); final AppEngInternalInventory inv = new AppEngInternalInventory( this, 9 * 4 );
class SkyChestHnadler extends AETileEventHandler @TileEvent(TileEventType.NETWORK_WRITE)
public void writeToStream_TileSkyChest(ByteBuf data) throws IOException
{ {
data.writeBoolean( playerOpen > 0 );
}
public SkyChestHnadler() { @TileEvent(TileEventType.NETWORK_READ)
super( TileEventType.NETWORK ); public boolean readFromStream_TileSkyChest(ByteBuf data) throws IOException
} {
int wasOpen = playerOpen;
playerOpen = data.readBoolean() ? 1 : 0;
@Override if ( wasOpen != playerOpen )
public void writeToStream(ByteBuf data) throws IOException lastEvent = System.currentTimeMillis();
{
data.writeBoolean( playerOpen > 0 );
}
@Override return false; // TESR yo!
public boolean readFromStream(ByteBuf data) throws IOException
{
int wasOpen = playerOpen;
playerOpen = data.readBoolean() ? 1 : 0;
if ( wasOpen != playerOpen )
lastEvent = System.currentTimeMillis();
return false; // TESR yo!
}
};
public TileSkyChest() {
addNewHandler( new SkyChestHnadler() );
} }
// server // server