Basic reformat, hit once, hope never again
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -18,9 +18,11 @@
|
||||
|
||||
package appeng.container;
|
||||
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Container;
|
||||
|
||||
|
||||
/*
|
||||
* Totally useless container that does nothing.
|
||||
*/
|
||||
@@ -28,9 +30,8 @@ public class ContainerNull extends Container
|
||||
{
|
||||
|
||||
@Override
|
||||
public boolean canInteractWith(EntityPlayer entityplayer)
|
||||
public boolean canInteractWith( EntityPlayer entityplayer )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,32 +18,34 @@
|
||||
|
||||
package appeng.container;
|
||||
|
||||
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
import appeng.api.parts.IPart;
|
||||
|
||||
|
||||
public class ContainerOpenContext
|
||||
{
|
||||
|
||||
final public boolean isItem;
|
||||
public World w;
|
||||
public int x;
|
||||
public int y;
|
||||
public int z;
|
||||
public ForgeDirection side;
|
||||
final public boolean isItem;
|
||||
|
||||
public ContainerOpenContext(Object myItem) {
|
||||
public ContainerOpenContext( Object myItem )
|
||||
{
|
||||
boolean isWorld = myItem instanceof IPart || myItem instanceof TileEntity;
|
||||
this.isItem = !isWorld;
|
||||
}
|
||||
|
||||
public TileEntity getTile()
|
||||
{
|
||||
if ( this.isItem )
|
||||
if( this.isItem )
|
||||
return null;
|
||||
return this.w.getTileEntity( this.x, this.y, this.z );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,12 +18,14 @@
|
||||
|
||||
package appeng.container.guisync;
|
||||
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface GuiSync {
|
||||
|
||||
@Retention( RetentionPolicy.RUNTIME )
|
||||
public @interface GuiSync
|
||||
{
|
||||
|
||||
int value();
|
||||
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
package appeng.container.guisync;
|
||||
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.EnumSet;
|
||||
@@ -31,17 +32,17 @@ import appeng.core.sync.network.NetworkHandler;
|
||||
import appeng.core.sync.packets.PacketProgressBar;
|
||||
import appeng.core.sync.packets.PacketValueConfig;
|
||||
|
||||
|
||||
public class SyncData
|
||||
{
|
||||
|
||||
private Object clientVersion;
|
||||
|
||||
private final AEBaseContainer source;
|
||||
private final Field field;
|
||||
|
||||
private final int channel;
|
||||
private Object clientVersion;
|
||||
|
||||
public SyncData(AEBaseContainer container, Field field, GuiSync annotation) {
|
||||
public SyncData( AEBaseContainer container, Field field, GuiSync annotation )
|
||||
{
|
||||
this.clientVersion = null;
|
||||
this.source = container;
|
||||
this.field = field;
|
||||
@@ -53,129 +54,48 @@ public class SyncData
|
||||
return this.channel;
|
||||
}
|
||||
|
||||
public void tick(ICrafting c)
|
||||
public void tick( ICrafting c )
|
||||
{
|
||||
try
|
||||
{
|
||||
Object val = this.field.get( this.source );
|
||||
if ( val != null && this.clientVersion == null )
|
||||
if( val != null && this.clientVersion == null )
|
||||
this.send( c, val );
|
||||
else if ( !val.equals( this.clientVersion ) )
|
||||
else if( !val.equals( this.clientVersion ) )
|
||||
this.send( c, val );
|
||||
}
|
||||
catch (IllegalArgumentException e)
|
||||
catch( IllegalArgumentException e )
|
||||
{
|
||||
AELog.error( e );
|
||||
}
|
||||
catch (IllegalAccessException e)
|
||||
catch( IllegalAccessException e )
|
||||
{
|
||||
AELog.error( e );
|
||||
}
|
||||
catch (IOException e)
|
||||
catch( IOException e )
|
||||
{
|
||||
AELog.error( e );
|
||||
}
|
||||
}
|
||||
|
||||
public void update(Object val)
|
||||
private void send( ICrafting o, Object val ) throws IOException
|
||||
{
|
||||
try
|
||||
if( val instanceof String )
|
||||
{
|
||||
Object oldValue = this.field.get( this.source );
|
||||
if ( val instanceof String )
|
||||
this.updateString( oldValue, (String) val );
|
||||
else
|
||||
this.updateValue( oldValue, (Long) val );
|
||||
}
|
||||
catch (IllegalArgumentException e)
|
||||
{
|
||||
AELog.error( e );
|
||||
}
|
||||
catch (IllegalAccessException e)
|
||||
{
|
||||
AELog.error( e );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void updateString(Object oldValue, String val)
|
||||
{
|
||||
try
|
||||
{
|
||||
this.field.set( this.source, val );
|
||||
}
|
||||
catch (IllegalArgumentException e)
|
||||
{
|
||||
AELog.error( e );
|
||||
}
|
||||
catch (IllegalAccessException e)
|
||||
{
|
||||
AELog.error( e );
|
||||
}
|
||||
}
|
||||
|
||||
private void updateValue(Object oldValue, long val)
|
||||
{
|
||||
try
|
||||
{
|
||||
if ( this.field.getType().isEnum() )
|
||||
{
|
||||
EnumSet<? extends Enum> valList = EnumSet.allOf( (Class<? extends Enum>) this.field.getType() );
|
||||
for (Enum e : valList)
|
||||
{
|
||||
if ( e.ordinal() == val )
|
||||
{
|
||||
this.field.set( this.source, e );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( this.field.getType().equals( int.class ) )
|
||||
this.field.set( this.source, (int) val );
|
||||
else if ( this.field.getType().equals( long.class ) )
|
||||
this.field.set( this.source, val );
|
||||
else if ( this.field.getType().equals( boolean.class ) )
|
||||
this.field.set( this.source, val == 1 );
|
||||
else if ( this.field.getType().equals( Integer.class ) )
|
||||
this.field.set( this.source, (int) val );
|
||||
else if ( this.field.getType().equals( Long.class ) )
|
||||
this.field.set( this.source, val );
|
||||
else if ( this.field.getType().equals( Boolean.class ) )
|
||||
this.field.set( this.source, val == 1 );
|
||||
}
|
||||
|
||||
this.source.onUpdate( this.field.getName(), oldValue, this.field.get( this.source ) );
|
||||
}
|
||||
catch (IllegalArgumentException e)
|
||||
{
|
||||
AELog.error( e );
|
||||
}
|
||||
catch (IllegalAccessException e)
|
||||
{
|
||||
AELog.error( e );
|
||||
}
|
||||
}
|
||||
|
||||
private void send(ICrafting o, Object val) throws IOException
|
||||
{
|
||||
if ( val instanceof String )
|
||||
{
|
||||
if ( o instanceof EntityPlayerMP )
|
||||
if( o instanceof EntityPlayerMP )
|
||||
NetworkHandler.instance.sendTo( new PacketValueConfig( "SyncDat." + this.channel, (String) val ), (EntityPlayerMP) o );
|
||||
}
|
||||
else if ( this.field.getType().isEnum() )
|
||||
else if( this.field.getType().isEnum() )
|
||||
{
|
||||
o.sendProgressBarUpdate( this.source, this.channel, ((Enum) val).ordinal() );
|
||||
o.sendProgressBarUpdate( this.source, this.channel, ( (Enum) val ).ordinal() );
|
||||
}
|
||||
else if ( val instanceof Long || val.getClass() == long.class )
|
||||
else if( val instanceof Long || val.getClass() == long.class )
|
||||
{
|
||||
NetworkHandler.instance.sendTo( new PacketProgressBar( this.channel, (Long) val ), (EntityPlayerMP) o );
|
||||
}
|
||||
else if ( val instanceof Boolean || val.getClass() == boolean.class )
|
||||
else if( val instanceof Boolean || val.getClass() == boolean.class )
|
||||
{
|
||||
o.sendProgressBarUpdate( this.source, this.channel, ((Boolean) val) ? 1 : 0 );
|
||||
o.sendProgressBarUpdate( this.source, this.channel, ( (Boolean) val ) ? 1 : 0 );
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -184,4 +104,84 @@ public class SyncData
|
||||
|
||||
this.clientVersion = val;
|
||||
}
|
||||
|
||||
public void update( Object val )
|
||||
{
|
||||
try
|
||||
{
|
||||
Object oldValue = this.field.get( this.source );
|
||||
if( val instanceof String )
|
||||
this.updateString( oldValue, (String) val );
|
||||
else
|
||||
this.updateValue( oldValue, (Long) val );
|
||||
}
|
||||
catch( IllegalArgumentException e )
|
||||
{
|
||||
AELog.error( e );
|
||||
}
|
||||
catch( IllegalAccessException e )
|
||||
{
|
||||
AELog.error( e );
|
||||
}
|
||||
}
|
||||
|
||||
private void updateString( Object oldValue, String val )
|
||||
{
|
||||
try
|
||||
{
|
||||
this.field.set( this.source, val );
|
||||
}
|
||||
catch( IllegalArgumentException e )
|
||||
{
|
||||
AELog.error( e );
|
||||
}
|
||||
catch( IllegalAccessException e )
|
||||
{
|
||||
AELog.error( e );
|
||||
}
|
||||
}
|
||||
|
||||
private void updateValue( Object oldValue, long val )
|
||||
{
|
||||
try
|
||||
{
|
||||
if( this.field.getType().isEnum() )
|
||||
{
|
||||
EnumSet<? extends Enum> valList = EnumSet.allOf( (Class<? extends Enum>) this.field.getType() );
|
||||
for( Enum e : valList )
|
||||
{
|
||||
if( e.ordinal() == val )
|
||||
{
|
||||
this.field.set( this.source, e );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if( this.field.getType().equals( int.class ) )
|
||||
this.field.set( this.source, (int) val );
|
||||
else if( this.field.getType().equals( long.class ) )
|
||||
this.field.set( this.source, val );
|
||||
else if( this.field.getType().equals( boolean.class ) )
|
||||
this.field.set( this.source, val == 1 );
|
||||
else if( this.field.getType().equals( Integer.class ) )
|
||||
this.field.set( this.source, (int) val );
|
||||
else if( this.field.getType().equals( Long.class ) )
|
||||
this.field.set( this.source, val );
|
||||
else if( this.field.getType().equals( Boolean.class ) )
|
||||
this.field.set( this.source, val == 1 );
|
||||
}
|
||||
|
||||
this.source.onUpdate( this.field.getName(), oldValue, this.field.get( this.source ) );
|
||||
}
|
||||
catch( IllegalArgumentException e )
|
||||
{
|
||||
AELog.error( e );
|
||||
}
|
||||
catch( IllegalAccessException e )
|
||||
{
|
||||
AELog.error( e );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
package appeng.container.implementations;
|
||||
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
@@ -45,33 +46,32 @@ import appeng.tile.misc.TileCellWorkbench;
|
||||
import appeng.util.Platform;
|
||||
import appeng.util.iterators.NullIterator;
|
||||
|
||||
|
||||
public class ContainerCellWorkbench extends ContainerUpgradeable
|
||||
{
|
||||
|
||||
final TileCellWorkbench workBench;
|
||||
final AppEngNullInventory ni = new AppEngNullInventory();
|
||||
@GuiSync( 2 )
|
||||
public CopyMode copyMode = CopyMode.CLEAR_ON_REMOVE;
|
||||
IInventory UpgradeInventoryWrapper;
|
||||
ItemStack prevStack = null;
|
||||
int lastUpgrades = 0;
|
||||
ItemStack LastCell;
|
||||
|
||||
public IInventory getCellUpgradeInventory()
|
||||
public ContainerCellWorkbench( InventoryPlayer ip, TileCellWorkbench te )
|
||||
{
|
||||
IInventory ri = this.workBench.getCellUpgradeInventory();
|
||||
return ri == null ? this.ni : ri;
|
||||
super( ip, te );
|
||||
this.workBench = te;
|
||||
}
|
||||
|
||||
public void setFuzzy(FuzzyMode valueOf)
|
||||
public void setFuzzy( FuzzyMode valueOf )
|
||||
{
|
||||
ICellWorkbenchItem cwi = this.workBench.getCell();
|
||||
if ( cwi != null )
|
||||
if( cwi != null )
|
||||
cwi.setFuzzyMode( this.workBench.getInventoryByName( "cell" ).getStackInSlot( 0 ), valueOf );
|
||||
}
|
||||
|
||||
private FuzzyMode getFuzzyMode()
|
||||
{
|
||||
ICellWorkbenchItem cwi = this.workBench.getCell();
|
||||
if ( cwi != null )
|
||||
return cwi.getFuzzyMode( this.workBench.getInventoryByName( "cell" ).getStackInSlot( 0 ) );
|
||||
return FuzzyMode.IGNORE_ALL;
|
||||
}
|
||||
|
||||
public void nextCopyMode()
|
||||
{
|
||||
this.workBench.getConfigManager().putSetting( Settings.COPY_MODE, Platform.nextEnum( this.getCopyMode() ) );
|
||||
@@ -82,6 +82,161 @@ public class ContainerCellWorkbench extends ContainerUpgradeable
|
||||
return (CopyMode) this.workBench.getConfigManager().getSetting( Settings.COPY_MODE );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getHeight()
|
||||
{
|
||||
return 251;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setupConfig()
|
||||
{
|
||||
int x = 8;
|
||||
int y = 29;
|
||||
int offset = 0;
|
||||
|
||||
IInventory cell = this.upgradeable.getInventoryByName( "cell" );
|
||||
this.addSlotToContainer( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.WORKBENCH_CELL, cell, 0, 152, 8, this.invPlayer ) );
|
||||
|
||||
IInventory inv = this.upgradeable.getInventoryByName( "config" );
|
||||
this.UpgradeInventoryWrapper = new Upgrades();// Platform.isServer() ? new Upgrades() : new AppEngInternalInventory(
|
||||
// null, 3 * 8 );
|
||||
|
||||
for( int w = 0; w < 7; w++ )
|
||||
for( int z = 0; z < 9; z++ )
|
||||
{
|
||||
this.addSlotToContainer( new SlotFakeTypeOnly( inv, offset, x + z * 18, y + w * 18 ) );
|
||||
offset++;
|
||||
}
|
||||
|
||||
for( int zz = 0; zz < 3; zz++ )
|
||||
for( int z = 0; z < 8; z++ )
|
||||
{
|
||||
int iSLot = zz * 8 + z;
|
||||
this.addSlotToContainer( new OptionalSlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, this.UpgradeInventoryWrapper, this, iSLot, 187 + zz * 18, 8 + 18 * z, iSLot, this.invPlayer ) );
|
||||
}
|
||||
/*
|
||||
* if ( supportCapacity() ) { for (int w = 0; w < 2; w++) for (int z = 0; z < 9; z++) addSlotToContainer( new
|
||||
* OptionalSlotFakeTypeOnly( inv, this, offset++, x, y, z, w, 1 ) );
|
||||
*
|
||||
* for (int w = 0; w < 2; w++) for (int z = 0; z < 9; z++) addSlotToContainer( new OptionalSlotFakeTypeOnly(
|
||||
* inv, this, offset++, x, y, z, w + 2, 2 ) );
|
||||
*
|
||||
* for (int w = 0; w < 2; w++) for (int z = 0; z < 9; z++) addSlotToContainer( new OptionalSlotFakeTypeOnly(
|
||||
* inv, this, offset++, x, y, z, w + 4, 3 ) ); }
|
||||
*/
|
||||
}
|
||||
|
||||
@Override
|
||||
public int availableUpgrades()
|
||||
{
|
||||
ItemStack is = this.workBench.getInventoryByName( "cell" ).getStackInSlot( 0 );
|
||||
if( this.prevStack != is )
|
||||
{
|
||||
this.prevStack = is;
|
||||
return this.lastUpgrades = this.getCellUpgradeInventory().getSizeInventory();
|
||||
}
|
||||
return this.lastUpgrades;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void detectAndSendChanges()
|
||||
{
|
||||
ItemStack is = this.workBench.getInventoryByName( "cell" ).getStackInSlot( 0 );
|
||||
if( Platform.isServer() )
|
||||
{
|
||||
for( Object crafter : this.crafters )
|
||||
{
|
||||
ICrafting icrafting = (ICrafting) crafter;
|
||||
|
||||
if( this.prevStack != is )
|
||||
{
|
||||
// if the bars changed an item was probably made, so just send shit!
|
||||
for( Object s : this.inventorySlots )
|
||||
{
|
||||
if( s instanceof OptionalSlotRestrictedInput )
|
||||
{
|
||||
OptionalSlotRestrictedInput sri = (OptionalSlotRestrictedInput) s;
|
||||
icrafting.sendSlotContents( this, sri.slotNumber, sri.getStack() );
|
||||
}
|
||||
}
|
||||
( (EntityPlayerMP) icrafting ).isChangingQuantityOnly = false;
|
||||
}
|
||||
}
|
||||
|
||||
this.copyMode = this.getCopyMode();
|
||||
this.fzMode = this.getFuzzyMode();
|
||||
}
|
||||
|
||||
this.prevStack = is;
|
||||
this.standardDetectAndSendChanges();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSlotEnabled( int idx )
|
||||
{
|
||||
return idx < this.availableUpgrades();
|
||||
}
|
||||
|
||||
public IInventory getCellUpgradeInventory()
|
||||
{
|
||||
IInventory ri = this.workBench.getCellUpgradeInventory();
|
||||
return ri == null ? this.ni : ri;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdate( String field, Object oldValue, Object newValue )
|
||||
{
|
||||
if( field.equals( "copyMode" ) )
|
||||
this.workBench.getConfigManager().putSetting( Settings.COPY_MODE, this.copyMode );
|
||||
|
||||
super.onUpdate( field, oldValue, newValue );
|
||||
}
|
||||
|
||||
public void clear()
|
||||
{
|
||||
IInventory inv = this.upgradeable.getInventoryByName( "config" );
|
||||
for( int x = 0; x < inv.getSizeInventory(); x++ )
|
||||
inv.setInventorySlotContents( x, null );
|
||||
this.detectAndSendChanges();
|
||||
}
|
||||
|
||||
private FuzzyMode getFuzzyMode()
|
||||
{
|
||||
ICellWorkbenchItem cwi = this.workBench.getCell();
|
||||
if( cwi != null )
|
||||
return cwi.getFuzzyMode( this.workBench.getInventoryByName( "cell" ).getStackInSlot( 0 ) );
|
||||
return FuzzyMode.IGNORE_ALL;
|
||||
}
|
||||
|
||||
public void partition()
|
||||
{
|
||||
IInventory inv = this.upgradeable.getInventoryByName( "config" );
|
||||
|
||||
IMEInventory<IAEItemStack> cellInv = AEApi.instance().registries().cell().getCellInventory( this.upgradeable.getInventoryByName( "cell" ).getStackInSlot( 0 ), null, StorageChannel.ITEMS );
|
||||
|
||||
Iterator<IAEItemStack> i = new NullIterator<IAEItemStack>();
|
||||
if( cellInv != null )
|
||||
{
|
||||
IItemList<IAEItemStack> list = cellInv.getAvailableItems( AEApi.instance().storage().createItemList() );
|
||||
i = list.iterator();
|
||||
}
|
||||
|
||||
for( int x = 0; x < inv.getSizeInventory(); x++ )
|
||||
{
|
||||
if( i.hasNext() )
|
||||
{
|
||||
ItemStack g = i.next().getItemStack();
|
||||
g.stackSize = 1;
|
||||
inv.setInventorySlotContents( x, g );
|
||||
}
|
||||
else
|
||||
inv.setInventorySlotContents( x, null );
|
||||
}
|
||||
|
||||
this.detectAndSendChanges();
|
||||
}
|
||||
|
||||
class Upgrades implements IInventory
|
||||
{
|
||||
|
||||
@@ -92,13 +247,13 @@ public class ContainerCellWorkbench extends ContainerUpgradeable
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getStackInSlot(int i)
|
||||
public ItemStack getStackInSlot( int i )
|
||||
{
|
||||
return ContainerCellWorkbench.this.getCellUpgradeInventory().getStackInSlot( i );
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack decrStackSize(int i, int j)
|
||||
public ItemStack decrStackSize( int i, int j )
|
||||
{
|
||||
IInventory inv = ContainerCellWorkbench.this.getCellUpgradeInventory();
|
||||
ItemStack is = inv.decrStackSize( i, j );
|
||||
@@ -107,7 +262,7 @@ public class ContainerCellWorkbench extends ContainerUpgradeable
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getStackInSlotOnClosing(int i)
|
||||
public ItemStack getStackInSlotOnClosing( int i )
|
||||
{
|
||||
IInventory inv = ContainerCellWorkbench.this.getCellUpgradeInventory();
|
||||
ItemStack is = inv.getStackInSlotOnClosing( i );
|
||||
@@ -116,7 +271,7 @@ public class ContainerCellWorkbench extends ContainerUpgradeable
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInventorySlotContents(int i, ItemStack itemstack)
|
||||
public void setInventorySlotContents( int i, ItemStack itemstack )
|
||||
{
|
||||
IInventory inv = ContainerCellWorkbench.this.getCellUpgradeInventory();
|
||||
inv.setInventorySlotContents( i, itemstack );
|
||||
@@ -148,7 +303,7 @@ public class ContainerCellWorkbench extends ContainerUpgradeable
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUseableByPlayer(EntityPlayer entityplayer)
|
||||
public boolean isUseableByPlayer( EntityPlayer entityplayer )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -164,168 +319,9 @@ public class ContainerCellWorkbench extends ContainerUpgradeable
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isItemValidForSlot(int i, ItemStack itemstack)
|
||||
public boolean isItemValidForSlot( int i, ItemStack itemstack )
|
||||
{
|
||||
return ContainerCellWorkbench.this.getCellUpgradeInventory().isItemValidForSlot( i, itemstack );
|
||||
}
|
||||
}
|
||||
|
||||
IInventory UpgradeInventoryWrapper;
|
||||
|
||||
ItemStack prevStack = null;
|
||||
int lastUpgrades = 0;
|
||||
|
||||
@GuiSync(2)
|
||||
public CopyMode copyMode = CopyMode.CLEAR_ON_REMOVE;
|
||||
|
||||
public ContainerCellWorkbench(InventoryPlayer ip, TileCellWorkbench te) {
|
||||
super( ip, te );
|
||||
this.workBench = te;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getHeight()
|
||||
{
|
||||
return 251;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int availableUpgrades()
|
||||
{
|
||||
ItemStack is = this.workBench.getInventoryByName( "cell" ).getStackInSlot( 0 );
|
||||
if ( this.prevStack != is )
|
||||
{
|
||||
this.prevStack = is;
|
||||
return this.lastUpgrades = this.getCellUpgradeInventory().getSizeInventory();
|
||||
}
|
||||
return this.lastUpgrades;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSlotEnabled(int idx)
|
||||
{
|
||||
return idx < this.availableUpgrades();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setupConfig()
|
||||
{
|
||||
int x = 8;
|
||||
int y = 29;
|
||||
int offset = 0;
|
||||
|
||||
IInventory cell = this.upgradeable.getInventoryByName( "cell" );
|
||||
this.addSlotToContainer( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.WORKBENCH_CELL, cell, 0, 152, 8, this.invPlayer ) );
|
||||
|
||||
IInventory inv = this.upgradeable.getInventoryByName( "config" );
|
||||
this.UpgradeInventoryWrapper = new Upgrades();// Platform.isServer() ? new Upgrades() : new AppEngInternalInventory(
|
||||
// null, 3 * 8 );
|
||||
|
||||
for (int w = 0; w < 7; w++)
|
||||
for (int z = 0; z < 9; z++)
|
||||
{
|
||||
this.addSlotToContainer( new SlotFakeTypeOnly( inv, offset, x + z * 18, y + w * 18 ) );
|
||||
offset++;
|
||||
}
|
||||
|
||||
for (int zz = 0; zz < 3; zz++)
|
||||
for (int z = 0; z < 8; z++)
|
||||
{
|
||||
int iSLot = zz * 8 + z;
|
||||
this.addSlotToContainer( new OptionalSlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, this.UpgradeInventoryWrapper, this, iSLot, 187 + zz * 18,
|
||||
8 + 18 * z, iSLot, this.invPlayer ) );
|
||||
}
|
||||
/*
|
||||
* if ( supportCapacity() ) { for (int w = 0; w < 2; w++) for (int z = 0; z < 9; z++) addSlotToContainer( new
|
||||
* OptionalSlotFakeTypeOnly( inv, this, offset++, x, y, z, w, 1 ) );
|
||||
*
|
||||
* for (int w = 0; w < 2; w++) for (int z = 0; z < 9; z++) addSlotToContainer( new OptionalSlotFakeTypeOnly(
|
||||
* inv, this, offset++, x, y, z, w + 2, 2 ) );
|
||||
*
|
||||
* for (int w = 0; w < 2; w++) for (int z = 0; z < 9; z++) addSlotToContainer( new OptionalSlotFakeTypeOnly(
|
||||
* inv, this, offset++, x, y, z, w + 4, 3 ) ); }
|
||||
*/
|
||||
}
|
||||
|
||||
ItemStack LastCell;
|
||||
|
||||
@Override
|
||||
public void onUpdate(String field, Object oldValue, Object newValue)
|
||||
{
|
||||
if ( field.equals( "copyMode" ) )
|
||||
this.workBench.getConfigManager().putSetting( Settings.COPY_MODE, this.copyMode );
|
||||
|
||||
super.onUpdate( field, oldValue, newValue );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void detectAndSendChanges()
|
||||
{
|
||||
ItemStack is = this.workBench.getInventoryByName( "cell" ).getStackInSlot( 0 );
|
||||
if ( Platform.isServer() )
|
||||
{
|
||||
for (Object crafter : this.crafters)
|
||||
{
|
||||
ICrafting icrafting = (ICrafting) crafter;
|
||||
|
||||
if ( this.prevStack != is )
|
||||
{
|
||||
// if the bars changed an item was probably made, so just send shit!
|
||||
for (Object s : this.inventorySlots)
|
||||
{
|
||||
if ( s instanceof OptionalSlotRestrictedInput )
|
||||
{
|
||||
OptionalSlotRestrictedInput sri = (OptionalSlotRestrictedInput) s;
|
||||
icrafting.sendSlotContents( this, sri.slotNumber, sri.getStack() );
|
||||
}
|
||||
}
|
||||
((EntityPlayerMP) icrafting).isChangingQuantityOnly = false;
|
||||
}
|
||||
}
|
||||
|
||||
this.copyMode = this.getCopyMode();
|
||||
this.fzMode = this.getFuzzyMode();
|
||||
}
|
||||
|
||||
this.prevStack = is;
|
||||
this.standardDetectAndSendChanges();
|
||||
}
|
||||
|
||||
public void clear()
|
||||
{
|
||||
IInventory inv = this.upgradeable.getInventoryByName( "config" );
|
||||
for (int x = 0; x < inv.getSizeInventory(); x++)
|
||||
inv.setInventorySlotContents( x, null );
|
||||
this.detectAndSendChanges();
|
||||
}
|
||||
|
||||
public void partition()
|
||||
{
|
||||
IInventory inv = this.upgradeable.getInventoryByName( "config" );
|
||||
|
||||
IMEInventory<IAEItemStack> cellInv = AEApi.instance().registries().cell()
|
||||
.getCellInventory( this.upgradeable.getInventoryByName( "cell" ).getStackInSlot( 0 ), null, StorageChannel.ITEMS );
|
||||
|
||||
Iterator<IAEItemStack> i = new NullIterator<IAEItemStack>();
|
||||
if ( cellInv != null )
|
||||
{
|
||||
IItemList<IAEItemStack> list = cellInv.getAvailableItems( AEApi.instance().storage().createItemList() );
|
||||
i = list.iterator();
|
||||
}
|
||||
|
||||
for (int x = 0; x < inv.getSizeInventory(); x++)
|
||||
{
|
||||
if ( i.hasNext() )
|
||||
{
|
||||
ItemStack g = i.next().getItemStack();
|
||||
g.stackSize = 1;
|
||||
inv.setInventorySlotContents( x, g );
|
||||
}
|
||||
else
|
||||
inv.setInventorySlotContents( x, null );
|
||||
}
|
||||
|
||||
this.detectAndSendChanges();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,18 +18,21 @@
|
||||
|
||||
package appeng.container.implementations;
|
||||
|
||||
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
|
||||
import appeng.container.AEBaseContainer;
|
||||
import appeng.container.slot.SlotRestrictedInput;
|
||||
import appeng.tile.storage.TileChest;
|
||||
|
||||
|
||||
public class ContainerChest extends AEBaseContainer
|
||||
{
|
||||
|
||||
final TileChest chest;
|
||||
|
||||
public ContainerChest(InventoryPlayer ip, TileChest chest) {
|
||||
public ContainerChest( InventoryPlayer ip, TileChest chest )
|
||||
{
|
||||
super( ip, chest, null );
|
||||
this.chest = chest;
|
||||
|
||||
@@ -37,5 +40,4 @@ public class ContainerChest extends AEBaseContainer
|
||||
|
||||
this.bindPlayerInventory( ip, 0, 166 - /* height of player inventory */82 );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
package appeng.container.implementations;
|
||||
|
||||
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
|
||||
import appeng.api.config.CondenserOutput;
|
||||
@@ -30,18 +31,26 @@ import appeng.container.slot.SlotRestrictedInput;
|
||||
import appeng.tile.misc.TileCondenser;
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
public class ContainerCondenser extends AEBaseContainer implements IProgressProvider
|
||||
{
|
||||
|
||||
final TileCondenser condenser;
|
||||
@GuiSync( 0 )
|
||||
public long requiredEnergy = 0;
|
||||
@GuiSync( 1 )
|
||||
public long storedPower = 0;
|
||||
@GuiSync( 2 )
|
||||
public CondenserOutput output = CondenserOutput.TRASH;
|
||||
|
||||
public ContainerCondenser(InventoryPlayer ip, TileCondenser condenser) {
|
||||
public ContainerCondenser( InventoryPlayer ip, TileCondenser condenser )
|
||||
{
|
||||
super( ip, condenser, null );
|
||||
this.condenser = condenser;
|
||||
|
||||
this.addSlotToContainer( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.TRASH, condenser, 0, 51, 52, ip ) );
|
||||
this.addSlotToContainer( new SlotOutput( condenser, 1, 105, 52, -1 ) );
|
||||
this.addSlotToContainer( (new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.STORAGE_COMPONENT, condenser.getInternalInventory(), 2, 101, 26, ip )).setStackLimit( 1 ) );
|
||||
this.addSlotToContainer( ( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.STORAGE_COMPONENT, condenser.getInternalInventory(), 2, 101, 26, ip ) ).setStackLimit( 1 ) );
|
||||
|
||||
this.bindPlayerInventory( ip, 0, 197 - /* height of player inventory */82 );
|
||||
}
|
||||
@@ -49,7 +58,7 @@ public class ContainerCondenser extends AEBaseContainer implements IProgressProv
|
||||
@Override
|
||||
public void detectAndSendChanges()
|
||||
{
|
||||
if ( Platform.isServer() )
|
||||
if( Platform.isServer() )
|
||||
{
|
||||
double maxStorage = this.condenser.getStorage();
|
||||
double requiredEnergy = this.condenser.getRequiredPower();
|
||||
@@ -62,15 +71,6 @@ public class ContainerCondenser extends AEBaseContainer implements IProgressProv
|
||||
super.detectAndSendChanges();
|
||||
}
|
||||
|
||||
@GuiSync(0)
|
||||
public long requiredEnergy = 0;
|
||||
|
||||
@GuiSync(1)
|
||||
public long storedPower = 0;
|
||||
|
||||
@GuiSync(2)
|
||||
public CondenserOutput output = CondenserOutput.TRASH;
|
||||
|
||||
@Override
|
||||
public int getCurrentProgress()
|
||||
{
|
||||
@@ -82,5 +82,4 @@ public class ContainerCondenser extends AEBaseContainer implements IProgressProv
|
||||
{
|
||||
return (int) this.requiredEnergy;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
package appeng.container.implementations;
|
||||
|
||||
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.world.World;
|
||||
@@ -33,15 +34,16 @@ import appeng.container.AEBaseContainer;
|
||||
import appeng.container.slot.SlotInaccessible;
|
||||
import appeng.tile.inventory.AppEngInternalInventory;
|
||||
|
||||
|
||||
public class ContainerCraftAmount extends AEBaseContainer
|
||||
{
|
||||
|
||||
final ITerminalHost priHost;
|
||||
|
||||
public IAEItemStack whatToMake;
|
||||
public final Slot craftingItem;
|
||||
final ITerminalHost priHost;
|
||||
public IAEItemStack whatToMake;
|
||||
|
||||
public ContainerCraftAmount(InventoryPlayer ip, ITerminalHost te) {
|
||||
public ContainerCraftAmount( InventoryPlayer ip, ITerminalHost te )
|
||||
{
|
||||
super( ip, te );
|
||||
this.priHost = te;
|
||||
|
||||
@@ -58,7 +60,7 @@ public class ContainerCraftAmount extends AEBaseContainer
|
||||
|
||||
public IGrid getGrid()
|
||||
{
|
||||
IActionHost h = ((IActionHost) this.getTarget());
|
||||
IActionHost h = ( (IActionHost) this.getTarget() );
|
||||
return h.getActionableNode().getGrid();
|
||||
}
|
||||
|
||||
@@ -71,5 +73,4 @@ public class ContainerCraftAmount extends AEBaseContainer
|
||||
{
|
||||
return new PlayerSource( this.getPlayerInv().player, (IActionHost) this.getTarget() );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,13 +18,12 @@
|
||||
|
||||
package appeng.container.implementations;
|
||||
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.concurrent.Future;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
@@ -33,6 +32,8 @@ import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.ChatComponentText;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
|
||||
import appeng.api.AEApi;
|
||||
import appeng.api.config.Actionable;
|
||||
import appeng.api.config.SecurityPermissions;
|
||||
@@ -62,78 +63,51 @@ import appeng.parts.reporting.PartPatternTerminal;
|
||||
import appeng.parts.reporting.PartTerminal;
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
public class ContainerCraftConfirm extends AEBaseContainer
|
||||
{
|
||||
|
||||
public final ArrayList<CraftingCPURecord> cpus = new ArrayList<CraftingCPURecord>();
|
||||
final ITerminalHost priHost;
|
||||
public Future<ICraftingJob> job;
|
||||
public ICraftingJob result;
|
||||
|
||||
@GuiSync(0)
|
||||
@GuiSync( 0 )
|
||||
public long bytesUsed;
|
||||
|
||||
@GuiSync(1)
|
||||
@GuiSync( 1 )
|
||||
public long cpuBytesAvail;
|
||||
|
||||
@GuiSync(2)
|
||||
@GuiSync( 2 )
|
||||
public int cpuCoProcessors;
|
||||
|
||||
@GuiSync(3)
|
||||
@GuiSync( 3 )
|
||||
public boolean autoStart = false;
|
||||
|
||||
@GuiSync(4)
|
||||
@GuiSync( 4 )
|
||||
public boolean simulation = true;
|
||||
|
||||
@GuiSync(5)
|
||||
@GuiSync( 5 )
|
||||
public int selectedCpu = -1;
|
||||
|
||||
@GuiSync(6)
|
||||
@GuiSync( 6 )
|
||||
public boolean noCPU = true;
|
||||
|
||||
@GuiSync(7)
|
||||
@GuiSync( 7 )
|
||||
public String myName = "";
|
||||
|
||||
protected long cpuIdx = Long.MIN_VALUE;
|
||||
|
||||
public final ArrayList<CraftingCPURecord> cpus = new ArrayList<CraftingCPURecord>();
|
||||
|
||||
public ContainerCraftConfirm(InventoryPlayer ip, ITerminalHost te) {
|
||||
public ContainerCraftConfirm( InventoryPlayer ip, ITerminalHost te )
|
||||
{
|
||||
super( ip, te );
|
||||
this.priHost = te;
|
||||
}
|
||||
|
||||
private void sendCPUs()
|
||||
public void cycleCpu( boolean next )
|
||||
{
|
||||
Collections.sort( this.cpus );
|
||||
|
||||
if ( this.selectedCpu >= this.cpus.size() )
|
||||
{
|
||||
this.selectedCpu = -1;
|
||||
this.cpuBytesAvail = 0;
|
||||
this.cpuCoProcessors = 0;
|
||||
this.myName = "";
|
||||
}
|
||||
else if ( this.selectedCpu != -1 )
|
||||
{
|
||||
this.myName = this.cpus.get( this.selectedCpu ).myName;
|
||||
this.cpuBytesAvail = this.cpus.get( this.selectedCpu ).size;
|
||||
this.cpuCoProcessors = this.cpus.get( this.selectedCpu ).processors;
|
||||
}
|
||||
}
|
||||
|
||||
public void cycleCpu(boolean next)
|
||||
{
|
||||
if ( next )
|
||||
if( next )
|
||||
this.selectedCpu++;
|
||||
else
|
||||
this.selectedCpu--;
|
||||
|
||||
if ( this.selectedCpu < -1 )
|
||||
if( this.selectedCpu < -1 )
|
||||
this.selectedCpu = this.cpus.size() - 1;
|
||||
else if ( this.selectedCpu >= this.cpus.size() )
|
||||
else if( this.selectedCpu >= this.cpus.size() )
|
||||
this.selectedCpu = -1;
|
||||
|
||||
if ( this.selectedCpu == -1 )
|
||||
if( this.selectedCpu == -1 )
|
||||
{
|
||||
this.cpuBytesAvail = 0;
|
||||
this.cpuCoProcessors = 0;
|
||||
@@ -150,7 +124,7 @@ public class ContainerCraftConfirm extends AEBaseContainer
|
||||
@Override
|
||||
public void detectAndSendChanges()
|
||||
{
|
||||
if ( Platform.isClient() )
|
||||
if( Platform.isClient() )
|
||||
return;
|
||||
|
||||
ICraftingGrid cc = this.getGrid().getCache( ICraftingGrid.class );
|
||||
@@ -158,28 +132,28 @@ public class ContainerCraftConfirm extends AEBaseContainer
|
||||
|
||||
int matches = 0;
|
||||
boolean changed = false;
|
||||
for (ICraftingCPU c : cpuSet)
|
||||
for( ICraftingCPU c : cpuSet )
|
||||
{
|
||||
boolean found = false;
|
||||
for (CraftingCPURecord ccr : this.cpus)
|
||||
if ( ccr.cpu == c )
|
||||
for( CraftingCPURecord ccr : this.cpus )
|
||||
if( ccr.cpu == c )
|
||||
found = true;
|
||||
|
||||
boolean matched = this.cpuMatches( c );
|
||||
|
||||
if ( matched )
|
||||
if( matched )
|
||||
matches++;
|
||||
|
||||
if ( found == !matched )
|
||||
if( found == !matched )
|
||||
changed = true;
|
||||
}
|
||||
|
||||
if ( changed || this.cpus.size() != matches )
|
||||
if( changed || this.cpus.size() != matches )
|
||||
{
|
||||
this.cpus.clear();
|
||||
for (ICraftingCPU c : cpuSet)
|
||||
for( ICraftingCPU c : cpuSet )
|
||||
{
|
||||
if ( this.cpuMatches( c ) )
|
||||
if( this.cpuMatches( c ) )
|
||||
this.cpus.add( new CraftingCPURecord( c.getAvailableStorage(), c.getCoProcessors(), c ) );
|
||||
}
|
||||
|
||||
@@ -190,16 +164,16 @@ public class ContainerCraftConfirm extends AEBaseContainer
|
||||
|
||||
super.detectAndSendChanges();
|
||||
|
||||
if ( this.job != null && this.job.isDone() )
|
||||
if( this.job != null && this.job.isDone() )
|
||||
{
|
||||
try
|
||||
{
|
||||
this.result = this.job.get();
|
||||
|
||||
if ( !this.result.isSimulation() )
|
||||
if( !this.result.isSimulation() )
|
||||
{
|
||||
this.simulation = false;
|
||||
if ( this.autoStart )
|
||||
if( this.autoStart )
|
||||
{
|
||||
this.startJob();
|
||||
return;
|
||||
@@ -219,7 +193,7 @@ public class ContainerCraftConfirm extends AEBaseContainer
|
||||
|
||||
this.bytesUsed = this.result.getByteTotal();
|
||||
|
||||
for (IAEItemStack out : plan)
|
||||
for( IAEItemStack out : plan )
|
||||
{
|
||||
IAEItemStack m = null;
|
||||
|
||||
@@ -234,12 +208,12 @@ public class ContainerCraftConfirm extends AEBaseContainer
|
||||
IStorageGrid sg = this.getGrid().getCache( IStorageGrid.class );
|
||||
IMEInventory<IAEItemStack> items = sg.getItemInventory();
|
||||
|
||||
if ( c != null && this.result.isSimulation() )
|
||||
if( c != null && this.result.isSimulation() )
|
||||
{
|
||||
m = o.copy();
|
||||
o = items.extractItems( o, Actionable.SIMULATE, this.mySrc );
|
||||
|
||||
if ( o == null )
|
||||
if( o == null )
|
||||
{
|
||||
o = m.copy();
|
||||
o.setStackSize( 0 );
|
||||
@@ -248,33 +222,33 @@ public class ContainerCraftConfirm extends AEBaseContainer
|
||||
m.setStackSize( m.getStackSize() - o.getStackSize() );
|
||||
}
|
||||
|
||||
if ( o.getStackSize() > 0 )
|
||||
if( o.getStackSize() > 0 )
|
||||
a.appendItem( o );
|
||||
|
||||
if ( p.getStackSize() > 0 )
|
||||
if( p.getStackSize() > 0 )
|
||||
b.appendItem( p );
|
||||
|
||||
if ( c != null && m != null && m.getStackSize() > 0 )
|
||||
if( c != null && m != null && m.getStackSize() > 0 )
|
||||
c.appendItem( m );
|
||||
}
|
||||
|
||||
for (Object g : this.crafters)
|
||||
for( Object g : this.crafters )
|
||||
{
|
||||
if ( g instanceof EntityPlayer )
|
||||
if( g instanceof EntityPlayer )
|
||||
{
|
||||
NetworkHandler.instance.sendTo( a, (EntityPlayerMP) g );
|
||||
NetworkHandler.instance.sendTo( b, (EntityPlayerMP) g );
|
||||
if ( c != null )
|
||||
if( c != null )
|
||||
NetworkHandler.instance.sendTo( c, (EntityPlayerMP) g );
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
catch( IOException e )
|
||||
{
|
||||
// :P
|
||||
}
|
||||
}
|
||||
catch (Throwable e)
|
||||
catch( Throwable e )
|
||||
{
|
||||
this.getPlayerInv().player.addChatMessage( new ChatComponentText( "Error: " + e.toString() ) );
|
||||
AELog.error( e );
|
||||
@@ -287,34 +261,59 @@ public class ContainerCraftConfirm extends AEBaseContainer
|
||||
this.verifyPermissions( SecurityPermissions.CRAFT, false );
|
||||
}
|
||||
|
||||
private boolean cpuMatches(ICraftingCPU c)
|
||||
public IGrid getGrid()
|
||||
{
|
||||
IActionHost h = ( (IActionHost) this.getTarget() );
|
||||
return h.getActionableNode().getGrid();
|
||||
}
|
||||
|
||||
private boolean cpuMatches( ICraftingCPU c )
|
||||
{
|
||||
return c.getAvailableStorage() >= this.bytesUsed && !c.isBusy();
|
||||
}
|
||||
|
||||
private void sendCPUs()
|
||||
{
|
||||
Collections.sort( this.cpus );
|
||||
|
||||
if( this.selectedCpu >= this.cpus.size() )
|
||||
{
|
||||
this.selectedCpu = -1;
|
||||
this.cpuBytesAvail = 0;
|
||||
this.cpuCoProcessors = 0;
|
||||
this.myName = "";
|
||||
}
|
||||
else if( this.selectedCpu != -1 )
|
||||
{
|
||||
this.myName = this.cpus.get( this.selectedCpu ).myName;
|
||||
this.cpuBytesAvail = this.cpus.get( this.selectedCpu ).size;
|
||||
this.cpuCoProcessors = this.cpus.get( this.selectedCpu ).processors;
|
||||
}
|
||||
}
|
||||
|
||||
public void startJob()
|
||||
{
|
||||
GuiBridge OriginalGui = null;
|
||||
|
||||
IActionHost ah = this.getActionHost();
|
||||
if ( ah instanceof WirelessTerminalGuiObject )
|
||||
if( ah instanceof WirelessTerminalGuiObject )
|
||||
OriginalGui = GuiBridge.GUI_WIRELESS_TERM;
|
||||
|
||||
if ( ah instanceof PartTerminal )
|
||||
if( ah instanceof PartTerminal )
|
||||
OriginalGui = GuiBridge.GUI_ME;
|
||||
|
||||
if ( ah instanceof PartCraftingTerminal )
|
||||
if( ah instanceof PartCraftingTerminal )
|
||||
OriginalGui = GuiBridge.GUI_CRAFTING_TERMINAL;
|
||||
|
||||
if ( ah instanceof PartPatternTerminal )
|
||||
if( ah instanceof PartPatternTerminal )
|
||||
OriginalGui = GuiBridge.GUI_PATTERN_TERMINAL;
|
||||
|
||||
if ( this.result != null && !this.simulation )
|
||||
if( this.result != null && !this.simulation )
|
||||
{
|
||||
ICraftingGrid cc = this.getGrid().getCache( ICraftingGrid.class );
|
||||
ICraftingLink g = cc.submitJob( this.result, null, this.selectedCpu == -1 ? null : this.cpus.get( this.selectedCpu ).cpu, true, this.getActionSrc() );
|
||||
this.autoStart = false;
|
||||
if ( g != null && OriginalGui != null && this.openContext != null )
|
||||
if( g != null && OriginalGui != null && this.openContext != null )
|
||||
{
|
||||
NetworkHandler.instance.sendTo( new PacketSwitchGuis( OriginalGui ), (EntityPlayerMP) this.invPlayer.player );
|
||||
|
||||
@@ -324,41 +323,35 @@ public class ContainerCraftConfirm extends AEBaseContainer
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onContainerClosed(EntityPlayer par1EntityPlayer)
|
||||
public BaseActionSource getActionSrc()
|
||||
{
|
||||
super.onContainerClosed( par1EntityPlayer );
|
||||
if ( this.job != null )
|
||||
{
|
||||
this.job.cancel( true );
|
||||
this.job = null;
|
||||
}
|
||||
return new PlayerSource( this.getPlayerInv().player, (IActionHost) this.getTarget() );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeCraftingFromCrafters(ICrafting c)
|
||||
public void removeCraftingFromCrafters( ICrafting c )
|
||||
{
|
||||
super.removeCraftingFromCrafters( c );
|
||||
if ( this.job != null )
|
||||
if( this.job != null )
|
||||
{
|
||||
this.job.cancel( true );
|
||||
this.job = null;
|
||||
}
|
||||
}
|
||||
|
||||
public IGrid getGrid()
|
||||
@Override
|
||||
public void onContainerClosed( EntityPlayer par1EntityPlayer )
|
||||
{
|
||||
IActionHost h = ((IActionHost) this.getTarget());
|
||||
return h.getActionableNode().getGrid();
|
||||
super.onContainerClosed( par1EntityPlayer );
|
||||
if( this.job != null )
|
||||
{
|
||||
this.job.cancel( true );
|
||||
this.job = null;
|
||||
}
|
||||
}
|
||||
|
||||
public World getWorld()
|
||||
{
|
||||
return this.getPlayerInv().player.worldObj;
|
||||
}
|
||||
|
||||
public BaseActionSource getActionSrc()
|
||||
{
|
||||
return new PlayerSource( this.getPlayerInv().player, (IActionHost) this.getTarget() );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
package appeng.container.implementations;
|
||||
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
@@ -47,62 +48,74 @@ import appeng.me.cluster.implementations.CraftingCPUCluster;
|
||||
import appeng.tile.crafting.TileCraftingTile;
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
public class ContainerCraftingCPU extends AEBaseContainer implements IMEMonitorHandlerReceiver<IAEItemStack>, ICustomNameObject
|
||||
{
|
||||
|
||||
final IItemList<IAEItemStack> list = AEApi.instance().storage().createItemList();
|
||||
protected IGrid network;
|
||||
CraftingCPUCluster monitor = null;
|
||||
String cpuName = null;
|
||||
protected IGrid network;
|
||||
int delay = 40;
|
||||
|
||||
final IItemList<IAEItemStack> list = AEApi.instance().storage().createItemList();
|
||||
|
||||
public ContainerCraftingCPU(InventoryPlayer ip, Object te) {
|
||||
public ContainerCraftingCPU( InventoryPlayer ip, Object te )
|
||||
{
|
||||
super( ip, te );
|
||||
IGridHost host = (IGridHost) (te instanceof IGridHost ? te : null);
|
||||
IGridHost host = (IGridHost) ( te instanceof IGridHost ? te : null );
|
||||
|
||||
if ( host != null )
|
||||
if( host != null )
|
||||
{
|
||||
this.findNode( host, ForgeDirection.UNKNOWN );
|
||||
for (ForgeDirection d : ForgeDirection.VALID_DIRECTIONS)
|
||||
for( ForgeDirection d : ForgeDirection.VALID_DIRECTIONS )
|
||||
this.findNode( host, d );
|
||||
}
|
||||
|
||||
if ( te instanceof TileCraftingTile )
|
||||
this.setCPU( (ICraftingCPU) ((TileCraftingTile) te).getCluster() );
|
||||
if( te instanceof TileCraftingTile )
|
||||
this.setCPU( (ICraftingCPU) ( (TileCraftingTile) te ).getCluster() );
|
||||
|
||||
if ( this.network == null && Platform.isServer() )
|
||||
if( this.network == null && Platform.isServer() )
|
||||
this.isContainerValid = false;
|
||||
}
|
||||
|
||||
protected void setCPU(ICraftingCPU c)
|
||||
private void findNode( IGridHost host, ForgeDirection d )
|
||||
{
|
||||
if ( c == this.monitor )
|
||||
if( this.network == null )
|
||||
{
|
||||
IGridNode node = host.getGridNode( d );
|
||||
if( node != null )
|
||||
this.network = node.getGrid();
|
||||
}
|
||||
}
|
||||
|
||||
protected void setCPU( ICraftingCPU c )
|
||||
{
|
||||
if( c == this.monitor )
|
||||
return;
|
||||
|
||||
if ( this.monitor != null )
|
||||
if( this.monitor != null )
|
||||
this.monitor.removeListener( this );
|
||||
|
||||
for (Object g : this.crafters)
|
||||
for( Object g : this.crafters )
|
||||
{
|
||||
if ( g instanceof EntityPlayer )
|
||||
if( g instanceof EntityPlayer )
|
||||
{
|
||||
try
|
||||
{
|
||||
NetworkHandler.instance.sendTo( new PacketValueConfig( "CraftingStatus", "Clear" ), (EntityPlayerMP) g );
|
||||
}
|
||||
catch (IOException e)
|
||||
catch( IOException e )
|
||||
{
|
||||
AELog.error( e );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( c instanceof CraftingCPUCluster )
|
||||
if( c instanceof CraftingCPUCluster )
|
||||
{
|
||||
this.cpuName = c.getName();
|
||||
|
||||
this.monitor = (CraftingCPUCluster) c;
|
||||
if ( this.monitor != null )
|
||||
if( this.monitor != null )
|
||||
{
|
||||
this.list.resetStatus();
|
||||
this.monitor.getListOfItem( this.list, CraftingItemList.ALL );
|
||||
@@ -118,45 +131,33 @@ public class ContainerCraftingCPU extends AEBaseContainer implements IMEMonitorH
|
||||
|
||||
public void cancelCrafting()
|
||||
{
|
||||
if ( this.monitor != null )
|
||||
if( this.monitor != null )
|
||||
{
|
||||
this.monitor.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
private void findNode(IGridHost host, ForgeDirection d)
|
||||
{
|
||||
if ( this.network == null )
|
||||
{
|
||||
IGridNode node = host.getGridNode( d );
|
||||
if ( node != null )
|
||||
this.network = node.getGrid();
|
||||
}
|
||||
}
|
||||
|
||||
int delay = 40;
|
||||
|
||||
@Override
|
||||
public void onContainerClosed(EntityPlayer player)
|
||||
public void removeCraftingFromCrafters( ICrafting c )
|
||||
{
|
||||
super.onContainerClosed( player );
|
||||
if ( this.monitor != null )
|
||||
super.removeCraftingFromCrafters( c );
|
||||
|
||||
if( this.crafters.isEmpty() && this.monitor != null )
|
||||
this.monitor.removeListener( this );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeCraftingFromCrafters(ICrafting c)
|
||||
public void onContainerClosed( EntityPlayer player )
|
||||
{
|
||||
super.removeCraftingFromCrafters( c );
|
||||
|
||||
if ( this.crafters.isEmpty() && this.monitor != null )
|
||||
super.onContainerClosed( player );
|
||||
if( this.monitor != null )
|
||||
this.monitor.removeListener( this );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void detectAndSendChanges()
|
||||
{
|
||||
if ( Platform.isServer() && this.monitor != null && !this.list.isEmpty() )
|
||||
if( Platform.isServer() && this.monitor != null && !this.list.isEmpty() )
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -164,7 +165,7 @@ public class ContainerCraftingCPU extends AEBaseContainer implements IMEMonitorH
|
||||
PacketMEInventoryUpdate b = new PacketMEInventoryUpdate( (byte) 1 );
|
||||
PacketMEInventoryUpdate c = new PacketMEInventoryUpdate( (byte) 2 );
|
||||
|
||||
for (IAEItemStack out : this.list)
|
||||
for( IAEItemStack out : this.list )
|
||||
{
|
||||
a.appendItem( this.monitor.getItemStack( out, CraftingItemList.STORAGE ) );
|
||||
b.appendItem( this.monitor.getItemStack( out, CraftingItemList.ACTIVE ) );
|
||||
@@ -173,40 +174,39 @@ public class ContainerCraftingCPU extends AEBaseContainer implements IMEMonitorH
|
||||
|
||||
this.list.resetStatus();
|
||||
|
||||
for (Object g : this.crafters)
|
||||
for( Object g : this.crafters )
|
||||
{
|
||||
if ( g instanceof EntityPlayer )
|
||||
if( g instanceof EntityPlayer )
|
||||
{
|
||||
if ( !a.isEmpty() )
|
||||
if( !a.isEmpty() )
|
||||
NetworkHandler.instance.sendTo( a, (EntityPlayerMP) g );
|
||||
|
||||
if ( !b.isEmpty() )
|
||||
if( !b.isEmpty() )
|
||||
NetworkHandler.instance.sendTo( b, (EntityPlayerMP) g );
|
||||
|
||||
if ( !c.isEmpty() )
|
||||
if( !c.isEmpty() )
|
||||
NetworkHandler.instance.sendTo( c, (EntityPlayerMP) g );
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
catch( IOException e )
|
||||
{
|
||||
// :P
|
||||
}
|
||||
|
||||
}
|
||||
super.detectAndSendChanges();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValid(Object verificationToken)
|
||||
public boolean isValid( Object verificationToken )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postChange(IBaseMonitor<IAEItemStack> monitor, Iterable<IAEItemStack> change, BaseActionSource actionSource)
|
||||
public void postChange( IBaseMonitor<IAEItemStack> monitor, Iterable<IAEItemStack> change, BaseActionSource actionSource )
|
||||
{
|
||||
for (IAEItemStack is : change)
|
||||
for( IAEItemStack is : change )
|
||||
{
|
||||
is = is.copy();
|
||||
is.setStackSize( 1 );
|
||||
|
||||
@@ -18,56 +18,34 @@
|
||||
|
||||
package appeng.container.implementations;
|
||||
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
|
||||
import appeng.api.networking.crafting.ICraftingCPU;
|
||||
import appeng.api.networking.crafting.ICraftingGrid;
|
||||
import appeng.api.storage.ITerminalHost;
|
||||
import appeng.container.guisync.GuiSync;
|
||||
|
||||
|
||||
public class ContainerCraftingStatus extends ContainerCraftingCPU
|
||||
{
|
||||
|
||||
@GuiSync(5)
|
||||
public final ArrayList<CraftingCPURecord> cpus = new ArrayList<CraftingCPURecord>();
|
||||
@GuiSync( 5 )
|
||||
public int selectedCpu = -1;
|
||||
|
||||
@GuiSync(6)
|
||||
@GuiSync( 6 )
|
||||
public boolean noCPU = true;
|
||||
|
||||
@GuiSync(7)
|
||||
@GuiSync( 7 )
|
||||
public String myName = "";
|
||||
|
||||
public final ArrayList<CraftingCPURecord> cpus = new ArrayList<CraftingCPURecord>();
|
||||
|
||||
private void sendCPUs()
|
||||
public ContainerCraftingStatus( InventoryPlayer ip, ITerminalHost te )
|
||||
{
|
||||
Collections.sort( this.cpus );
|
||||
|
||||
if ( this.selectedCpu >= this.cpus.size() )
|
||||
{
|
||||
this.selectedCpu = -1;
|
||||
this.myName = "";
|
||||
}
|
||||
else if ( this.selectedCpu != -1 )
|
||||
{
|
||||
this.myName = this.cpus.get( this.selectedCpu ).myName;
|
||||
}
|
||||
|
||||
if ( this.selectedCpu == -1 && this.cpus.size() > 0 )
|
||||
this.selectedCpu = 0;
|
||||
|
||||
if ( this.selectedCpu != -1 )
|
||||
{
|
||||
if ( this.cpus.get( this.selectedCpu ).cpu != this.monitor )
|
||||
this.setCPU( this.cpus.get( this.selectedCpu ).cpu );
|
||||
}
|
||||
else
|
||||
this.setCPU( null );
|
||||
super( ip, te );
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -78,28 +56,28 @@ public class ContainerCraftingStatus extends ContainerCraftingCPU
|
||||
|
||||
int matches = 0;
|
||||
boolean changed = false;
|
||||
for (ICraftingCPU c : cpuSet)
|
||||
for( ICraftingCPU c : cpuSet )
|
||||
{
|
||||
boolean found = false;
|
||||
for (CraftingCPURecord ccr : this.cpus)
|
||||
if ( ccr.cpu == c )
|
||||
for( CraftingCPURecord ccr : this.cpus )
|
||||
if( ccr.cpu == c )
|
||||
found = true;
|
||||
|
||||
boolean matched = this.cpuMatches( c );
|
||||
|
||||
if ( matched )
|
||||
if( matched )
|
||||
matches++;
|
||||
|
||||
if ( found == !matched )
|
||||
if( found == !matched )
|
||||
changed = true;
|
||||
}
|
||||
|
||||
if ( changed || this.cpus.size() != matches )
|
||||
if( changed || this.cpus.size() != matches )
|
||||
{
|
||||
this.cpus.clear();
|
||||
for (ICraftingCPU c : cpuSet)
|
||||
for( ICraftingCPU c : cpuSet )
|
||||
{
|
||||
if ( this.cpuMatches( c ) )
|
||||
if( this.cpuMatches( c ) )
|
||||
this.cpus.add( new CraftingCPURecord( c.getAvailableStorage(), c.getCoProcessors(), c ) );
|
||||
}
|
||||
|
||||
@@ -111,31 +89,53 @@ public class ContainerCraftingStatus extends ContainerCraftingCPU
|
||||
super.detectAndSendChanges();
|
||||
}
|
||||
|
||||
private boolean cpuMatches(ICraftingCPU c)
|
||||
private boolean cpuMatches( ICraftingCPU c )
|
||||
{
|
||||
return c.isBusy();
|
||||
}
|
||||
|
||||
public ContainerCraftingStatus(InventoryPlayer ip, ITerminalHost te) {
|
||||
super( ip, te );
|
||||
private void sendCPUs()
|
||||
{
|
||||
Collections.sort( this.cpus );
|
||||
|
||||
if( this.selectedCpu >= this.cpus.size() )
|
||||
{
|
||||
this.selectedCpu = -1;
|
||||
this.myName = "";
|
||||
}
|
||||
else if( this.selectedCpu != -1 )
|
||||
{
|
||||
this.myName = this.cpus.get( this.selectedCpu ).myName;
|
||||
}
|
||||
|
||||
if( this.selectedCpu == -1 && this.cpus.size() > 0 )
|
||||
this.selectedCpu = 0;
|
||||
|
||||
if( this.selectedCpu != -1 )
|
||||
{
|
||||
if( this.cpus.get( this.selectedCpu ).cpu != this.monitor )
|
||||
this.setCPU( this.cpus.get( this.selectedCpu ).cpu );
|
||||
}
|
||||
else
|
||||
this.setCPU( null );
|
||||
}
|
||||
|
||||
public void cycleCpu(boolean next)
|
||||
public void cycleCpu( boolean next )
|
||||
{
|
||||
if ( next )
|
||||
if( next )
|
||||
this.selectedCpu++;
|
||||
else
|
||||
this.selectedCpu--;
|
||||
|
||||
if ( this.selectedCpu < -1 )
|
||||
if( this.selectedCpu < -1 )
|
||||
this.selectedCpu = this.cpus.size() - 1;
|
||||
else if ( this.selectedCpu >= this.cpus.size() )
|
||||
else if( this.selectedCpu >= this.cpus.size() )
|
||||
this.selectedCpu = -1;
|
||||
|
||||
if ( this.selectedCpu == -1 && this.cpus.size() > 0 )
|
||||
if( this.selectedCpu == -1 && this.cpus.size() > 0 )
|
||||
this.selectedCpu = 0;
|
||||
|
||||
if ( this.selectedCpu == -1 )
|
||||
if( this.selectedCpu == -1 )
|
||||
{
|
||||
this.myName = "";
|
||||
this.setCPU( null );
|
||||
@@ -146,5 +146,4 @@ public class ContainerCraftingStatus extends ContainerCraftingCPU
|
||||
this.setCPU( this.cpus.get( this.selectedCpu ).cpu );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
package appeng.container.implementations;
|
||||
|
||||
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.inventory.InventoryCrafting;
|
||||
@@ -34,39 +35,24 @@ import appeng.tile.inventory.AppEngInternalInventory;
|
||||
import appeng.tile.inventory.IAEAppEngInventory;
|
||||
import appeng.tile.inventory.InvOperation;
|
||||
|
||||
|
||||
public class ContainerCraftingTerm extends ContainerMEMonitorable implements IAEAppEngInventory, IContainerCraftingPacket
|
||||
{
|
||||
|
||||
public final PartCraftingTerminal ct;
|
||||
final AppEngInternalInventory output = new AppEngInternalInventory( this, 1 );
|
||||
|
||||
final SlotCraftingMatrix[] craftingSlots = new SlotCraftingMatrix[9];
|
||||
final SlotCraftingTerm outputSlot;
|
||||
|
||||
public final PartCraftingTerminal ct;
|
||||
|
||||
/**
|
||||
* Callback for when the crafting matrix is changed.
|
||||
*/
|
||||
@Override
|
||||
public void onCraftMatrixChanged(IInventory par1IInventory)
|
||||
public ContainerCraftingTerm( InventoryPlayer ip, ITerminalHost monitorable )
|
||||
{
|
||||
ContainerNull cn = new ContainerNull();
|
||||
InventoryCrafting ic = new InventoryCrafting( cn, 3, 3 );
|
||||
|
||||
for (int x = 0; x < 9; x++)
|
||||
ic.setInventorySlotContents( x, this.craftingSlots[x].getStack() );
|
||||
|
||||
this.outputSlot.putStack( CraftingManager.getInstance().findMatchingRecipe( ic, this.getPlayerInv().player.worldObj ) );
|
||||
}
|
||||
|
||||
public ContainerCraftingTerm(InventoryPlayer ip, ITerminalHost monitorable) {
|
||||
super( ip, monitorable, false );
|
||||
this.ct = (PartCraftingTerminal) monitorable;
|
||||
|
||||
IInventory crafting = this.ct.getInventoryByName( "crafting" );
|
||||
|
||||
for (int y = 0; y < 3; y++)
|
||||
for (int x = 0; x < 3; x++)
|
||||
for( int y = 0; y < 3; y++ )
|
||||
for( int x = 0; x < 3; x++ )
|
||||
this.addSlotToContainer( this.craftingSlots[x + y * 3] = new SlotCraftingMatrix( this, crafting, x + y * 3, 37 + x * 18, -72 + y * 18 ) );
|
||||
|
||||
this.addSlotToContainer( this.outputSlot = new SlotCraftingTerm( this.getPlayerInv().player, this.mySrc, this.powerSrc, monitorable, crafting, crafting, this.output, 131, -72 + 18, this ) );
|
||||
@@ -76,6 +62,21 @@ public class ContainerCraftingTerm extends ContainerMEMonitorable implements IAE
|
||||
this.onCraftMatrixChanged( crafting );
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback for when the crafting matrix is changed.
|
||||
*/
|
||||
@Override
|
||||
public void onCraftMatrixChanged( IInventory par1IInventory )
|
||||
{
|
||||
ContainerNull cn = new ContainerNull();
|
||||
InventoryCrafting ic = new InventoryCrafting( cn, 3, 3 );
|
||||
|
||||
for( int x = 0; x < 9; x++ )
|
||||
ic.setInventorySlotContents( x, this.craftingSlots[x].getStack() );
|
||||
|
||||
this.outputSlot.putStack( CraftingManager.getInstance().findMatchingRecipe( ic, this.getPlayerInv().player.worldObj ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveChanges()
|
||||
{
|
||||
@@ -83,15 +84,15 @@ public class ContainerCraftingTerm extends ContainerMEMonitorable implements IAE
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChangeInventory(IInventory inv, int slot, InvOperation mc, ItemStack removedStack, ItemStack newStack)
|
||||
public void onChangeInventory( IInventory inv, int slot, InvOperation mc, ItemStack removedStack, ItemStack newStack )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public IInventory getInventoryByName(String name)
|
||||
public IInventory getInventoryByName( String name )
|
||||
{
|
||||
if (name.equals("player"))
|
||||
if( name.equals( "player" ) )
|
||||
{
|
||||
return this.invPlayer;
|
||||
}
|
||||
|
||||
@@ -18,28 +18,30 @@
|
||||
|
||||
package appeng.container.implementations;
|
||||
|
||||
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
|
||||
import appeng.container.AEBaseContainer;
|
||||
import appeng.container.slot.SlotRestrictedInput;
|
||||
import appeng.tile.storage.TileDrive;
|
||||
|
||||
|
||||
public class ContainerDrive extends AEBaseContainer
|
||||
{
|
||||
|
||||
final TileDrive drive;
|
||||
|
||||
public ContainerDrive(InventoryPlayer ip, TileDrive drive) {
|
||||
public ContainerDrive( InventoryPlayer ip, TileDrive drive )
|
||||
{
|
||||
super( ip, drive, null );
|
||||
this.drive = drive;
|
||||
|
||||
for (int y = 0; y < 5; y++)
|
||||
for (int x = 0; x < 2; x++)
|
||||
for( int y = 0; y < 5; y++ )
|
||||
for( int x = 0; x < 2; x++ )
|
||||
{
|
||||
this.addSlotToContainer( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.STORAGE_CELLS, drive, x + y * 2, 71 + x * 18, 14 + y * 18, this.invPlayer ) );
|
||||
}
|
||||
|
||||
this.bindPlayerInventory( ip, 0, 199 - /* height of player inventory */82 );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -55,26 +55,6 @@ public class ContainerFormationPlane extends ContainerUpgradeable
|
||||
return 251;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int availableUpgrades()
|
||||
{
|
||||
return 5;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean supportCapacity()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSlotEnabled( int idx )
|
||||
{
|
||||
int upgrades = this.upgradeable.getInstalledUpgrades( Upgrades.CAPACITY );
|
||||
|
||||
return upgrades > idx;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setupConfig()
|
||||
{
|
||||
@@ -82,11 +62,11 @@ public class ContainerFormationPlane extends ContainerUpgradeable
|
||||
int yo = 23 + 6;
|
||||
|
||||
IInventory config = this.upgradeable.getInventoryByName( "config" );
|
||||
for ( int y = 0; y < 7; y++ )
|
||||
for( int y = 0; y < 7; y++ )
|
||||
{
|
||||
for ( int x = 0; x < 9; x++ )
|
||||
for( int x = 0; x < 9; x++ )
|
||||
{
|
||||
if ( y < 2 )
|
||||
if( y < 2 )
|
||||
this.addSlotToContainer( new SlotFakeTypeOnly( config, y * 9 + x, xo + x * 18, yo + y * 18 ) );
|
||||
else
|
||||
this.addSlotToContainer( new OptionalSlotFakeTypeOnly( config, this, y * 9 + x, xo, yo, x, y, y - 2 ) );
|
||||
@@ -101,18 +81,37 @@ public class ContainerFormationPlane extends ContainerUpgradeable
|
||||
this.addSlotToContainer( ( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 4, 187, 8 + 18 * 4, this.invPlayer ) ).setNotDraggable() );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean supportCapacity()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int availableUpgrades()
|
||||
{
|
||||
return 5;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void detectAndSendChanges()
|
||||
{
|
||||
this.verifyPermissions( SecurityPermissions.BUILD, false );
|
||||
|
||||
if ( Platform.isServer() )
|
||||
if( Platform.isServer() )
|
||||
{
|
||||
this.fzMode = ( FuzzyMode ) this.upgradeable.getConfigManager().getSetting( Settings.FUZZY_MODE );
|
||||
this.placeMode = ( YesNo ) this.upgradeable.getConfigManager().getSetting( Settings.PLACE_BLOCK );
|
||||
this.fzMode = (FuzzyMode) this.upgradeable.getConfigManager().getSetting( Settings.FUZZY_MODE );
|
||||
this.placeMode = (YesNo) this.upgradeable.getConfigManager().getSetting( Settings.PLACE_BLOCK );
|
||||
}
|
||||
|
||||
this.standardDetectAndSendChanges();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSlotEnabled( int idx )
|
||||
{
|
||||
int upgrades = this.upgradeable.getInstalledUpgrades( Upgrades.CAPACITY );
|
||||
|
||||
return upgrades > idx;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
package appeng.container.implementations;
|
||||
|
||||
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
|
||||
import appeng.container.AEBaseContainer;
|
||||
@@ -26,12 +27,14 @@ import appeng.container.slot.SlotOutput;
|
||||
import appeng.container.slot.SlotRestrictedInput;
|
||||
import appeng.tile.grindstone.TileGrinder;
|
||||
|
||||
|
||||
public class ContainerGrinder extends AEBaseContainer
|
||||
{
|
||||
|
||||
final TileGrinder grinder;
|
||||
|
||||
public ContainerGrinder(InventoryPlayer ip, TileGrinder grinder) {
|
||||
public ContainerGrinder( InventoryPlayer ip, TileGrinder grinder )
|
||||
{
|
||||
super( ip, grinder, null );
|
||||
this.grinder = grinder;
|
||||
|
||||
@@ -47,5 +50,4 @@ public class ContainerGrinder extends AEBaseContainer
|
||||
|
||||
this.bindPlayerInventory( ip, 0, 176 - /* height of player inventory */82 );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -50,6 +50,12 @@ public class ContainerIOPort extends ContainerUpgradeable
|
||||
this.ioPort = te;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getHeight()
|
||||
{
|
||||
return 166;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setupConfig()
|
||||
{
|
||||
@@ -58,14 +64,14 @@ public class ContainerIOPort extends ContainerUpgradeable
|
||||
|
||||
IInventory cells = this.upgradeable.getInventoryByName( "cells" );
|
||||
|
||||
for ( int y = 0; y < 3; y++ )
|
||||
for ( int x = 0; x < 2; x++ )
|
||||
for( int y = 0; y < 3; y++ )
|
||||
for( int x = 0; x < 2; x++ )
|
||||
this.addSlotToContainer( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.STORAGE_CELLS, cells, x + y * 2, offX + x * 18, offY + y * 18, this.invPlayer ) );
|
||||
|
||||
offX = 122;
|
||||
offY = 17;
|
||||
for ( int y = 0; y < 3; y++ )
|
||||
for ( int x = 0; x < 2; x++ )
|
||||
for( int y = 0; y < 3; y++ )
|
||||
for( int x = 0; x < 2; x++ )
|
||||
this.addSlotToContainer( new SlotOutput( cells, 6 + x + y * 2, offX + x * 18, offY + y * 18, SlotRestrictedInput.PlacableItemType.STORAGE_CELLS.IIcon ) );
|
||||
|
||||
IInventory upgrades = this.upgradeable.getInventoryByName( "upgrades" );
|
||||
@@ -75,9 +81,9 @@ public class ContainerIOPort extends ContainerUpgradeable
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getHeight()
|
||||
protected boolean supportCapacity()
|
||||
{
|
||||
return 166;
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -86,18 +92,12 @@ public class ContainerIOPort extends ContainerUpgradeable
|
||||
return 3;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean supportCapacity()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void detectAndSendChanges()
|
||||
{
|
||||
this.verifyPermissions( SecurityPermissions.BUILD, false );
|
||||
|
||||
if ( Platform.isServer() )
|
||||
if( Platform.isServer() )
|
||||
{
|
||||
this.opMode = (OperationMode) this.upgradeable.getConfigManager().getSetting( Settings.OPERATION_MODE );
|
||||
this.fMode = (FullnessMode) this.upgradeable.getConfigManager().getSetting( Settings.FULLNESS_MODE );
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
package appeng.container.implementations;
|
||||
|
||||
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
@@ -33,6 +34,7 @@ import appeng.recipes.handlers.Inscribe.InscriberRecipe;
|
||||
import appeng.tile.misc.TileInscriber;
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
public class ContainerInscriber extends ContainerUpgradeable implements IProgressProvider
|
||||
{
|
||||
|
||||
@@ -42,13 +44,13 @@ public class ContainerInscriber extends ContainerUpgradeable implements IProgres
|
||||
final Slot middle;
|
||||
final Slot bottom;
|
||||
|
||||
@GuiSync(2)
|
||||
@GuiSync( 2 )
|
||||
public int maxProcessingTime = -1;
|
||||
|
||||
@GuiSync(3)
|
||||
@GuiSync( 3 )
|
||||
public int processingTime = -1;
|
||||
|
||||
public ContainerInscriber(InventoryPlayer ip, TileInscriber te)
|
||||
public ContainerInscriber( InventoryPlayer ip, TileInscriber te )
|
||||
{
|
||||
super( ip, te );
|
||||
this.ti = te;
|
||||
@@ -60,7 +62,6 @@ public class ContainerInscriber extends ContainerUpgradeable implements IProgres
|
||||
this.addSlotToContainer( new SlotOutput( this.ti, 3, 113, 40, -1 ) );
|
||||
|
||||
this.bindPlayerInventory( ip, 0, this.getHeight() - /* height of player inventory */82 );
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -70,9 +71,11 @@ public class ContainerInscriber extends ContainerUpgradeable implements IProgres
|
||||
}
|
||||
|
||||
@Override
|
||||
public int availableUpgrades()
|
||||
/**
|
||||
* Overridden super.setupConfig to prevent setting up the fake slots
|
||||
*/ protected void setupConfig()
|
||||
{
|
||||
return 3;
|
||||
this.setupUpgrades();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -82,92 +85,9 @@ public class ContainerInscriber extends ContainerUpgradeable implements IProgres
|
||||
}
|
||||
|
||||
@Override
|
||||
/**
|
||||
* Overridden super.setupConfig to prevent setting up the fake slots
|
||||
*/
|
||||
protected void setupConfig()
|
||||
public int availableUpgrades()
|
||||
{
|
||||
this.setupUpgrades();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValidForSlot(Slot s, ItemStack is)
|
||||
{
|
||||
ItemStack PlateA = this.ti.getStackInSlot( 0 );
|
||||
ItemStack PlateB = this.ti.getStackInSlot( 1 );
|
||||
|
||||
if ( s == this.middle )
|
||||
{
|
||||
for (ItemStack i : Inscribe.PLATES )
|
||||
{
|
||||
if ( Platform.isSameItemPrecise( i, is ) )
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean matches = false;
|
||||
boolean found = false;
|
||||
|
||||
for (InscriberRecipe i : Inscribe.RECIPES )
|
||||
{
|
||||
boolean matchA = (PlateA == null && i.plateA == null) || (Platform.isSameItemPrecise( PlateA, i.plateA )) && // and...
|
||||
(PlateB == null && i.plateB == null) | (Platform.isSameItemPrecise( PlateB, i.plateB ));
|
||||
|
||||
boolean matchB = (PlateB == null && i.plateA == null) || (Platform.isSameItemPrecise( PlateB, i.plateA )) && // and...
|
||||
(PlateA == null && i.plateB == null) | (Platform.isSameItemPrecise( PlateA, i.plateB ));
|
||||
|
||||
if ( matchA || matchB )
|
||||
{
|
||||
matches = true;
|
||||
for (ItemStack option : i.imprintable)
|
||||
{
|
||||
if ( Platform.isSameItemPrecise( is, option ) )
|
||||
found = true;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if ( matches && !found )
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( (s == this.top && PlateB != null) || (s == this.bottom && PlateA != null) )
|
||||
{
|
||||
boolean isValid = false;
|
||||
ItemStack otherSlot = null;
|
||||
if ( s == this.top )
|
||||
otherSlot = this.bottom.getStack();
|
||||
else
|
||||
otherSlot = this.top.getStack();
|
||||
|
||||
// name presses
|
||||
final IItemDefinition namePress = AEApi.instance().definitions().materials().namePress();
|
||||
if ( namePress.isSameAs( otherSlot ) )
|
||||
{
|
||||
return namePress.isSameAs( is );
|
||||
}
|
||||
|
||||
// everything else
|
||||
for (InscriberRecipe i : Inscribe.RECIPES )
|
||||
{
|
||||
if ( Platform.isSameItemPrecise( i.plateA, otherSlot ) )
|
||||
{
|
||||
isValid = Platform.isSameItemPrecise( is, i.plateB );
|
||||
}
|
||||
else if ( Platform.isSameItemPrecise( i.plateB, otherSlot ) )
|
||||
{
|
||||
isValid = Platform.isSameItemPrecise( is, i.plateA );
|
||||
}
|
||||
|
||||
if ( isValid )
|
||||
break;
|
||||
}
|
||||
|
||||
if ( !isValid )
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
return 3;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -175,13 +95,92 @@ public class ContainerInscriber extends ContainerUpgradeable implements IProgres
|
||||
{
|
||||
this.standardDetectAndSendChanges();
|
||||
|
||||
if ( Platform.isServer() )
|
||||
if( Platform.isServer() )
|
||||
{
|
||||
this.maxProcessingTime = this.ti.maxProcessingTime;
|
||||
this.processingTime = this.ti.processingTime;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValidForSlot( Slot s, ItemStack is )
|
||||
{
|
||||
ItemStack PlateA = this.ti.getStackInSlot( 0 );
|
||||
ItemStack PlateB = this.ti.getStackInSlot( 1 );
|
||||
|
||||
if( s == this.middle )
|
||||
{
|
||||
for( ItemStack i : Inscribe.PLATES )
|
||||
{
|
||||
if( Platform.isSameItemPrecise( i, is ) )
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean matches = false;
|
||||
boolean found = false;
|
||||
|
||||
for( InscriberRecipe i : Inscribe.RECIPES )
|
||||
{
|
||||
boolean matchA = ( PlateA == null && i.plateA == null ) || ( Platform.isSameItemPrecise( PlateA, i.plateA ) ) && // and...
|
||||
( PlateB == null && i.plateB == null ) | ( Platform.isSameItemPrecise( PlateB, i.plateB ) );
|
||||
|
||||
boolean matchB = ( PlateB == null && i.plateA == null ) || ( Platform.isSameItemPrecise( PlateB, i.plateA ) ) && // and...
|
||||
( PlateA == null && i.plateB == null ) | ( Platform.isSameItemPrecise( PlateA, i.plateB ) );
|
||||
|
||||
if( matchA || matchB )
|
||||
{
|
||||
matches = true;
|
||||
for( ItemStack option : i.imprintable )
|
||||
{
|
||||
if( Platform.isSameItemPrecise( is, option ) )
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( matches && !found )
|
||||
return false;
|
||||
}
|
||||
|
||||
if( ( s == this.top && PlateB != null ) || ( s == this.bottom && PlateA != null ) )
|
||||
{
|
||||
boolean isValid = false;
|
||||
ItemStack otherSlot = null;
|
||||
if( s == this.top )
|
||||
otherSlot = this.bottom.getStack();
|
||||
else
|
||||
otherSlot = this.top.getStack();
|
||||
|
||||
// name presses
|
||||
final IItemDefinition namePress = AEApi.instance().definitions().materials().namePress();
|
||||
if( namePress.isSameAs( otherSlot ) )
|
||||
{
|
||||
return namePress.isSameAs( is );
|
||||
}
|
||||
|
||||
// everything else
|
||||
for( InscriberRecipe i : Inscribe.RECIPES )
|
||||
{
|
||||
if( Platform.isSameItemPrecise( i.plateA, otherSlot ) )
|
||||
{
|
||||
isValid = Platform.isSameItemPrecise( is, i.plateB );
|
||||
}
|
||||
else if( Platform.isSameItemPrecise( i.plateB, otherSlot ) )
|
||||
{
|
||||
isValid = Platform.isSameItemPrecise( is, i.plateA );
|
||||
}
|
||||
|
||||
if( isValid )
|
||||
break;
|
||||
}
|
||||
|
||||
if( !isValid )
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCurrentProgress()
|
||||
{
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
package appeng.container.implementations;
|
||||
|
||||
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
|
||||
import appeng.api.config.SecurityPermissions;
|
||||
@@ -31,31 +32,32 @@ import appeng.container.slot.SlotRestrictedInput;
|
||||
import appeng.helpers.DualityInterface;
|
||||
import appeng.helpers.IInterfaceHost;
|
||||
|
||||
|
||||
public class ContainerInterface extends ContainerUpgradeable
|
||||
{
|
||||
|
||||
final DualityInterface myDuality;
|
||||
|
||||
@GuiSync(3)
|
||||
@GuiSync( 3 )
|
||||
public YesNo bMode = YesNo.NO;
|
||||
|
||||
@GuiSync(4)
|
||||
@GuiSync( 4 )
|
||||
public YesNo iTermMode = YesNo.YES;
|
||||
|
||||
public ContainerInterface(InventoryPlayer ip, IInterfaceHost te) {
|
||||
public ContainerInterface( InventoryPlayer ip, IInterfaceHost te )
|
||||
{
|
||||
super( ip, te.getInterfaceDuality().getHost() );
|
||||
|
||||
this.myDuality = te.getInterfaceDuality();
|
||||
|
||||
for (int x = 0; x < 9; x++)
|
||||
for( int x = 0; x < 9; x++ )
|
||||
this.addSlotToContainer( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.ENCODED_PATTERN, this.myDuality.getPatterns(), x, 8 + 18 * x, 90 + 7, this.invPlayer ) );
|
||||
|
||||
for (int x = 0; x < 8; x++)
|
||||
for( int x = 0; x < 8; x++ )
|
||||
this.addSlotToContainer( new SlotFake( this.myDuality.getConfig(), x, 17 + 18 * x, 35 ) );
|
||||
|
||||
for (int x = 0; x < 8; x++)
|
||||
for( int x = 0; x < 8; x++ )
|
||||
this.addSlotToContainer( new SlotNormal( this.myDuality.getStorage(), x, 17 + 18 * x, 35 + 18 ) );
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -70,13 +72,6 @@ public class ContainerInterface extends ContainerUpgradeable
|
||||
this.setupUpgrades();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void loadSettingsFromHost(IConfigManager cm)
|
||||
{
|
||||
this.bMode = (YesNo) cm.getSetting( Settings.BLOCK );
|
||||
this.iTermMode = (YesNo) cm.getSetting( Settings.INTERFACE_TERMINAL );
|
||||
}
|
||||
|
||||
@Override
|
||||
public int availableUpgrades()
|
||||
{
|
||||
@@ -89,4 +84,11 @@ public class ContainerInterface extends ContainerUpgradeable
|
||||
this.verifyPermissions( SecurityPermissions.BUILD, false );
|
||||
super.detectAndSendChanges();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void loadSettingsFromHost( IConfigManager cm )
|
||||
{
|
||||
this.bMode = (YesNo) cm.getSetting( Settings.BLOCK );
|
||||
this.iTermMode = (YesNo) cm.getSetting( Settings.INTERFACE_TERMINAL );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,6 +53,7 @@ import appeng.util.inv.AdaptorIInventory;
|
||||
import appeng.util.inv.AdaptorPlayerHand;
|
||||
import appeng.util.inv.WrapperInvSlot;
|
||||
|
||||
|
||||
public class ContainerInterfaceTerminal extends AEBaseContainer
|
||||
{
|
||||
|
||||
@@ -61,61 +62,124 @@ public class ContainerInterfaceTerminal extends AEBaseContainer
|
||||
*/
|
||||
|
||||
static private long autoBase = Long.MIN_VALUE;
|
||||
|
||||
static class InvTracker
|
||||
{
|
||||
|
||||
final long which = autoBase++;
|
||||
final String unlocalizedName;
|
||||
|
||||
public InvTracker(DualityInterface dual, IInventory patterns, String unlocalizedName) {
|
||||
this.server = patterns;
|
||||
this.client = new AppEngInternalInventory( null, this.server.getSizeInventory() );
|
||||
this.unlocalizedName = unlocalizedName;
|
||||
this.sortBy = dual.getSortValue();
|
||||
}
|
||||
|
||||
final IInventory client;
|
||||
final IInventory server;
|
||||
public final long sortBy;
|
||||
|
||||
}
|
||||
|
||||
final Map<IInterfaceHost, InvTracker> diList = new HashMap<IInterfaceHost, InvTracker>();
|
||||
final Map<Long, InvTracker> byId = new HashMap<Long, InvTracker>();
|
||||
IGrid g;
|
||||
NBTTagCompound data = new NBTTagCompound();
|
||||
|
||||
public ContainerInterfaceTerminal(InventoryPlayer ip, PartMonitor anchor) {
|
||||
public ContainerInterfaceTerminal( InventoryPlayer ip, PartMonitor anchor )
|
||||
{
|
||||
super( ip, anchor );
|
||||
|
||||
if ( Platform.isServer() )
|
||||
if( Platform.isServer() )
|
||||
this.g = anchor.getActionableNode().getGrid();
|
||||
|
||||
this.bindPlayerInventory( ip, 0, 222 - /* height of player inventory */82 );
|
||||
}
|
||||
|
||||
NBTTagCompound data = new NBTTagCompound();
|
||||
|
||||
static class PatternInvSlot extends WrapperInvSlot
|
||||
@Override
|
||||
public void detectAndSendChanges()
|
||||
{
|
||||
if( Platform.isClient() )
|
||||
return;
|
||||
|
||||
public PatternInvSlot(IInventory inv) {
|
||||
super( inv );
|
||||
}
|
||||
super.detectAndSendChanges();
|
||||
|
||||
@Override
|
||||
public boolean isItemValid(ItemStack itemstack)
|
||||
if( this.g == null )
|
||||
return;
|
||||
|
||||
int total = 0;
|
||||
boolean missing = false;
|
||||
|
||||
IActionHost host = this.getActionHost();
|
||||
if( host != null )
|
||||
{
|
||||
return itemstack != null && itemstack.getItem() instanceof ItemEncodedPattern;
|
||||
IGridNode agn = host.getActionableNode();
|
||||
if( agn != null && agn.isActive() )
|
||||
{
|
||||
for( IGridNode gn : this.g.getMachines( TileInterface.class ) )
|
||||
{
|
||||
if( gn.isActive() )
|
||||
{
|
||||
IInterfaceHost ih = (IInterfaceHost) gn.getMachine();
|
||||
if( ih.getInterfaceDuality().getConfigManager().getSetting( Settings.INTERFACE_TERMINAL ) == YesNo.NO )
|
||||
continue;
|
||||
|
||||
InvTracker t = this.diList.get( ih );
|
||||
|
||||
if( t == null )
|
||||
missing = true;
|
||||
else
|
||||
{
|
||||
DualityInterface dual = ih.getInterfaceDuality();
|
||||
if( !t.unlocalizedName.equals( dual.getTermName() ) )
|
||||
missing = true;
|
||||
}
|
||||
|
||||
total++;
|
||||
}
|
||||
}
|
||||
|
||||
for( IGridNode gn : this.g.getMachines( PartInterface.class ) )
|
||||
{
|
||||
if( gn.isActive() )
|
||||
{
|
||||
IInterfaceHost ih = (IInterfaceHost) gn.getMachine();
|
||||
if( ih.getInterfaceDuality().getConfigManager().getSetting( Settings.INTERFACE_TERMINAL ) == YesNo.NO )
|
||||
continue;
|
||||
|
||||
InvTracker t = this.diList.get( ih );
|
||||
|
||||
if( t == null )
|
||||
missing = true;
|
||||
else
|
||||
{
|
||||
DualityInterface dual = ih.getInterfaceDuality();
|
||||
if( !t.unlocalizedName.equals( dual.getTermName() ) )
|
||||
missing = true;
|
||||
}
|
||||
|
||||
total++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( total != this.diList.size() || missing )
|
||||
this.regenList( this.data );
|
||||
else
|
||||
{
|
||||
for( Entry<IInterfaceHost, InvTracker> en : this.diList.entrySet() )
|
||||
{
|
||||
InvTracker inv = en.getValue();
|
||||
for( int x = 0; x < inv.server.getSizeInventory(); x++ )
|
||||
{
|
||||
if( this.isDifferent( inv.server.getStackInSlot( x ), inv.client.getStackInSlot( x ) ) )
|
||||
this.addItems( this.data, inv, x, 1 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( !this.data.hasNoTags() )
|
||||
{
|
||||
try
|
||||
{
|
||||
NetworkHandler.instance.sendTo( new PacketCompressedNBT( this.data ), (EntityPlayerMP) this.getPlayerInv().player );
|
||||
}
|
||||
catch( IOException e )
|
||||
{
|
||||
// :P
|
||||
}
|
||||
|
||||
this.data = new NBTTagCompound();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doAction(EntityPlayerMP player, InventoryAction action, int slot, long id)
|
||||
public void doAction( EntityPlayerMP player, InventoryAction action, int slot, long id )
|
||||
{
|
||||
InvTracker inv = this.byId.get( id );
|
||||
if ( inv != null )
|
||||
if( inv != null )
|
||||
{
|
||||
ItemStack is = inv.server.getStackInSlot( slot );
|
||||
boolean hasItemInHand = player.inventory.getItemStack() != null;
|
||||
@@ -127,226 +191,117 @@ public class ContainerInterfaceTerminal extends AEBaseContainer
|
||||
IInventory theSlot = slotInv.getWrapper( slot );
|
||||
InventoryAdaptor interfaceSlot = new AdaptorIInventory( theSlot );
|
||||
|
||||
switch (action)
|
||||
switch( action )
|
||||
{
|
||||
case PICKUP_OR_SET_DOWN:
|
||||
case PICKUP_OR_SET_DOWN:
|
||||
|
||||
if ( hasItemInHand )
|
||||
{
|
||||
ItemStack inSlot = theSlot.getStackInSlot( 0 );
|
||||
if ( inSlot == null )
|
||||
player.inventory.setItemStack( interfaceSlot.addItems( player.inventory.getItemStack() ) );
|
||||
else
|
||||
if( hasItemInHand )
|
||||
{
|
||||
inSlot = inSlot.copy();
|
||||
ItemStack inHand = player.inventory.getItemStack().copy();
|
||||
|
||||
theSlot.setInventorySlotContents( 0, null );
|
||||
player.inventory.setItemStack( null );
|
||||
|
||||
player.inventory.setItemStack( interfaceSlot.addItems( inHand.copy() ) );
|
||||
|
||||
if ( player.inventory.getItemStack() == null )
|
||||
player.inventory.setItemStack( inSlot );
|
||||
ItemStack inSlot = theSlot.getStackInSlot( 0 );
|
||||
if( inSlot == null )
|
||||
player.inventory.setItemStack( interfaceSlot.addItems( player.inventory.getItemStack() ) );
|
||||
else
|
||||
{
|
||||
player.inventory.setItemStack( inHand );
|
||||
theSlot.setInventorySlotContents( 0, inSlot );
|
||||
inSlot = inSlot.copy();
|
||||
ItemStack inHand = player.inventory.getItemStack().copy();
|
||||
|
||||
theSlot.setInventorySlotContents( 0, null );
|
||||
player.inventory.setItemStack( null );
|
||||
|
||||
player.inventory.setItemStack( interfaceSlot.addItems( inHand.copy() ) );
|
||||
|
||||
if( player.inventory.getItemStack() == null )
|
||||
player.inventory.setItemStack( inSlot );
|
||||
else
|
||||
{
|
||||
player.inventory.setItemStack( inHand );
|
||||
theSlot.setInventorySlotContents( 0, inSlot );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
else
|
||||
{
|
||||
IInventory mySlot = slotInv.getWrapper( slot );
|
||||
mySlot.setInventorySlotContents( 0, playerHand.addItems( mySlot.getStackInSlot( 0 ) ) );
|
||||
}
|
||||
|
||||
break;
|
||||
case SPLIT_OR_PLACE_SINGLE:
|
||||
|
||||
if( hasItemInHand )
|
||||
{
|
||||
ItemStack extra = playerHand.removeItems( 1, null, null );
|
||||
if( extra != null )
|
||||
extra = interfaceSlot.addItems( extra );
|
||||
if( extra != null )
|
||||
playerHand.addItems( extra );
|
||||
}
|
||||
else if( is != null )
|
||||
{
|
||||
ItemStack extra = interfaceSlot.removeItems( ( is.stackSize + 1 ) / 2, null, null );
|
||||
if( extra != null )
|
||||
extra = playerHand.addItems( extra );
|
||||
if( extra != null )
|
||||
interfaceSlot.addItems( extra );
|
||||
}
|
||||
|
||||
break;
|
||||
case SHIFT_CLICK:
|
||||
|
||||
IInventory mySlot = slotInv.getWrapper( slot );
|
||||
mySlot.setInventorySlotContents( 0, playerHand.addItems( mySlot.getStackInSlot( 0 ) ) );
|
||||
}
|
||||
InventoryAdaptor playerInv = InventoryAdaptor.getAdaptor( player, ForgeDirection.UNKNOWN );
|
||||
mySlot.setInventorySlotContents( 0, playerInv.addItems( mySlot.getStackInSlot( 0 ) ) );
|
||||
|
||||
break;
|
||||
case SPLIT_OR_PLACE_SINGLE:
|
||||
break;
|
||||
case MOVE_REGION:
|
||||
|
||||
if ( hasItemInHand )
|
||||
{
|
||||
ItemStack extra = playerHand.removeItems( 1, null, null );
|
||||
if ( extra != null )
|
||||
extra = interfaceSlot.addItems( extra );
|
||||
if ( extra != null )
|
||||
playerHand.addItems( extra );
|
||||
}
|
||||
else if ( is != null )
|
||||
{
|
||||
ItemStack extra = interfaceSlot.removeItems( (is.stackSize + 1) / 2, null, null );
|
||||
if ( extra != null )
|
||||
extra = playerHand.addItems( extra );
|
||||
if ( extra != null )
|
||||
interfaceSlot.addItems( extra );
|
||||
}
|
||||
InventoryAdaptor playerInvAd = InventoryAdaptor.getAdaptor( player, ForgeDirection.UNKNOWN );
|
||||
for( int x = 0; x < inv.server.getSizeInventory(); x++ )
|
||||
{
|
||||
inv.server.setInventorySlotContents( x, playerInvAd.addItems( inv.server.getStackInSlot( x ) ) );
|
||||
}
|
||||
|
||||
break;
|
||||
case SHIFT_CLICK:
|
||||
break;
|
||||
case CREATIVE_DUPLICATE:
|
||||
|
||||
IInventory mySlot = slotInv.getWrapper( slot );
|
||||
InventoryAdaptor playerInv = InventoryAdaptor.getAdaptor( player, ForgeDirection.UNKNOWN );
|
||||
mySlot.setInventorySlotContents( 0, playerInv.addItems( mySlot.getStackInSlot( 0 ) ) );
|
||||
if( player.capabilities.isCreativeMode && !hasItemInHand )
|
||||
{
|
||||
player.inventory.setItemStack( is == null ? null : is.copy() );
|
||||
}
|
||||
|
||||
break;
|
||||
case MOVE_REGION:
|
||||
|
||||
InventoryAdaptor playerInvAd = InventoryAdaptor.getAdaptor( player, ForgeDirection.UNKNOWN );
|
||||
for (int x = 0; x < inv.server.getSizeInventory(); x++)
|
||||
{
|
||||
inv.server.setInventorySlotContents( x, playerInvAd.addItems( inv.server.getStackInSlot( x ) ) );
|
||||
}
|
||||
|
||||
break;
|
||||
case CREATIVE_DUPLICATE:
|
||||
|
||||
if ( player.capabilities.isCreativeMode && !hasItemInHand )
|
||||
{
|
||||
player.inventory.setItemStack( is == null ? null : is.copy() );
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
this.updateHeld( player );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void detectAndSendChanges()
|
||||
{
|
||||
if ( Platform.isClient() )
|
||||
return;
|
||||
|
||||
super.detectAndSendChanges();
|
||||
|
||||
if ( this.g == null )
|
||||
return;
|
||||
|
||||
int total = 0;
|
||||
boolean missing = false;
|
||||
|
||||
IActionHost host = this.getActionHost();
|
||||
if ( host != null )
|
||||
{
|
||||
IGridNode agn = host.getActionableNode();
|
||||
if ( agn != null && agn.isActive() )
|
||||
{
|
||||
for (IGridNode gn : this.g.getMachines( TileInterface.class ))
|
||||
{
|
||||
if ( gn.isActive() )
|
||||
{
|
||||
IInterfaceHost ih = (IInterfaceHost) gn.getMachine();
|
||||
if ( ih.getInterfaceDuality().getConfigManager().getSetting( Settings.INTERFACE_TERMINAL ) == YesNo.NO )
|
||||
continue;
|
||||
|
||||
InvTracker t = this.diList.get( ih );
|
||||
|
||||
if ( t == null )
|
||||
missing = true;
|
||||
else
|
||||
{
|
||||
DualityInterface dual = ih.getInterfaceDuality();
|
||||
if ( !t.unlocalizedName.equals( dual.getTermName() ) )
|
||||
missing = true;
|
||||
}
|
||||
|
||||
total++;
|
||||
}
|
||||
}
|
||||
|
||||
for (IGridNode gn : this.g.getMachines( PartInterface.class ))
|
||||
{
|
||||
if ( gn.isActive() )
|
||||
{
|
||||
IInterfaceHost ih = (IInterfaceHost) gn.getMachine();
|
||||
if ( ih.getInterfaceDuality().getConfigManager().getSetting( Settings.INTERFACE_TERMINAL ) == YesNo.NO )
|
||||
continue;
|
||||
|
||||
InvTracker t = this.diList.get( ih );
|
||||
|
||||
if ( t == null )
|
||||
missing = true;
|
||||
else
|
||||
{
|
||||
DualityInterface dual = ih.getInterfaceDuality();
|
||||
if ( !t.unlocalizedName.equals( dual.getTermName() ) )
|
||||
missing = true;
|
||||
}
|
||||
|
||||
total++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( total != this.diList.size() || missing )
|
||||
this.regenList( this.data );
|
||||
else
|
||||
{
|
||||
for (Entry<IInterfaceHost, InvTracker> en : this.diList.entrySet())
|
||||
{
|
||||
InvTracker inv = en.getValue();
|
||||
for (int x = 0; x < inv.server.getSizeInventory(); x++)
|
||||
{
|
||||
if ( this.isDifferent( inv.server.getStackInSlot( x ), inv.client.getStackInSlot( x ) ) )
|
||||
this.addItems( this.data, inv, x, 1 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( !this.data.hasNoTags() )
|
||||
{
|
||||
try
|
||||
{
|
||||
NetworkHandler.instance.sendTo( new PacketCompressedNBT( this.data ), (EntityPlayerMP) this.getPlayerInv().player );
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
// :P
|
||||
}
|
||||
|
||||
this.data = new NBTTagCompound();
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isDifferent(ItemStack a, ItemStack b)
|
||||
{
|
||||
if ( a == null && b == null )
|
||||
return false;
|
||||
|
||||
if ( a == null || b == null )
|
||||
return true;
|
||||
|
||||
return !ItemStack.areItemStacksEqual( a, b );
|
||||
}
|
||||
|
||||
private void regenList(NBTTagCompound data)
|
||||
private void regenList( NBTTagCompound data )
|
||||
{
|
||||
this.byId.clear();
|
||||
this.diList.clear();
|
||||
|
||||
IActionHost host = this.getActionHost();
|
||||
if ( host != null )
|
||||
if( host != null )
|
||||
{
|
||||
IGridNode agn = host.getActionableNode();
|
||||
if ( agn != null && agn.isActive() )
|
||||
if( agn != null && agn.isActive() )
|
||||
{
|
||||
for (IGridNode gn : this.g.getMachines( TileInterface.class ))
|
||||
for( IGridNode gn : this.g.getMachines( TileInterface.class ) )
|
||||
{
|
||||
IInterfaceHost ih = (IInterfaceHost) gn.getMachine();
|
||||
DualityInterface dual = ih.getInterfaceDuality();
|
||||
if ( gn.isActive() && dual.getConfigManager().getSetting( Settings.INTERFACE_TERMINAL ) == YesNo.YES )
|
||||
if( gn.isActive() && dual.getConfigManager().getSetting( Settings.INTERFACE_TERMINAL ) == YesNo.YES )
|
||||
this.diList.put( ih, new InvTracker( dual, dual.getPatterns(), dual.getTermName() ) );
|
||||
}
|
||||
|
||||
for (IGridNode gn : this.g.getMachines( PartInterface.class ))
|
||||
for( IGridNode gn : this.g.getMachines( PartInterface.class ) )
|
||||
{
|
||||
IInterfaceHost ih = (IInterfaceHost) gn.getMachine();
|
||||
DualityInterface dual = ih.getInterfaceDuality();
|
||||
if ( gn.isActive() && dual.getConfigManager().getSetting( Settings.INTERFACE_TERMINAL ) == YesNo.YES )
|
||||
if( gn.isActive() && dual.getConfigManager().getSetting( Settings.INTERFACE_TERMINAL ) == YesNo.YES )
|
||||
this.diList.put( ih, new InvTracker( dual, dual.getPatterns(), dual.getTermName() ) );
|
||||
}
|
||||
}
|
||||
@@ -354,7 +309,7 @@ public class ContainerInterfaceTerminal extends AEBaseContainer
|
||||
|
||||
data.setBoolean( "clear", true );
|
||||
|
||||
for (Entry<IInterfaceHost, InvTracker> en : this.diList.entrySet())
|
||||
for( Entry<IInterfaceHost, InvTracker> en : this.diList.entrySet() )
|
||||
{
|
||||
InvTracker inv = en.getValue();
|
||||
this.byId.put( inv.which, inv );
|
||||
@@ -362,18 +317,29 @@ public class ContainerInterfaceTerminal extends AEBaseContainer
|
||||
}
|
||||
}
|
||||
|
||||
private void addItems(NBTTagCompound data, InvTracker inv, int offset, int length)
|
||||
private boolean isDifferent( ItemStack a, ItemStack b )
|
||||
{
|
||||
if( a == null && b == null )
|
||||
return false;
|
||||
|
||||
if( a == null || b == null )
|
||||
return true;
|
||||
|
||||
return !ItemStack.areItemStacksEqual( a, b );
|
||||
}
|
||||
|
||||
private void addItems( NBTTagCompound data, InvTracker inv, int offset, int length )
|
||||
{
|
||||
String name = '=' + Long.toString( inv.which, Character.MAX_RADIX );
|
||||
NBTTagCompound tag = data.getCompoundTag( name );
|
||||
|
||||
if ( tag.hasNoTags() )
|
||||
if( tag.hasNoTags() )
|
||||
{
|
||||
tag.setLong( "sortBy", inv.sortBy );
|
||||
tag.setString( "un", inv.unlocalizedName );
|
||||
}
|
||||
|
||||
for (int x = 0; x < length; x++)
|
||||
for( int x = 0; x < length; x++ )
|
||||
{
|
||||
NBTTagCompound itemNBT = new NBTTagCompound();
|
||||
|
||||
@@ -382,7 +348,7 @@ public class ContainerInterfaceTerminal extends AEBaseContainer
|
||||
// "update" client side.
|
||||
inv.client.setInventorySlotContents( x + offset, is == null ? null : is.copy() );
|
||||
|
||||
if ( is != null )
|
||||
if( is != null )
|
||||
is.writeToNBT( itemNBT );
|
||||
|
||||
tag.setTag( Integer.toString( x + offset ), itemNBT );
|
||||
@@ -390,4 +356,38 @@ public class ContainerInterfaceTerminal extends AEBaseContainer
|
||||
|
||||
data.setTag( name, tag );
|
||||
}
|
||||
|
||||
static class InvTracker
|
||||
{
|
||||
|
||||
public final long sortBy;
|
||||
final long which = autoBase++;
|
||||
final String unlocalizedName;
|
||||
final IInventory client;
|
||||
final IInventory server;
|
||||
|
||||
public InvTracker( DualityInterface dual, IInventory patterns, String unlocalizedName )
|
||||
{
|
||||
this.server = patterns;
|
||||
this.client = new AppEngInternalInventory( null, this.server.getSizeInventory() );
|
||||
this.unlocalizedName = unlocalizedName;
|
||||
this.sortBy = dual.getSortValue();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static class PatternInvSlot extends WrapperInvSlot
|
||||
{
|
||||
|
||||
public PatternInvSlot( IInventory inv )
|
||||
{
|
||||
super( inv );
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isItemValid( ItemStack itemstack )
|
||||
{
|
||||
return itemstack != null && itemstack.getItem() instanceof ItemEncodedPattern;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,40 +39,35 @@ import appeng.container.slot.SlotRestrictedInput;
|
||||
import appeng.parts.automation.PartLevelEmitter;
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
public class ContainerLevelEmitter extends ContainerUpgradeable
|
||||
{
|
||||
|
||||
final PartLevelEmitter lvlEmitter;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
@SideOnly( Side.CLIENT )
|
||||
public GuiTextField textField;
|
||||
@GuiSync( 2 )
|
||||
public LevelType lvType;
|
||||
@GuiSync( 3 )
|
||||
public long EmitterValue = -1;
|
||||
@GuiSync( 4 )
|
||||
public YesNo cmType;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void setTextField(GuiTextField level)
|
||||
public ContainerLevelEmitter( InventoryPlayer ip, PartLevelEmitter te )
|
||||
{
|
||||
super( ip, te );
|
||||
this.lvlEmitter = te;
|
||||
}
|
||||
|
||||
@SideOnly( Side.CLIENT )
|
||||
public void setTextField( GuiTextField level )
|
||||
{
|
||||
this.textField = level;
|
||||
this.textField.setText( String.valueOf( this.EmitterValue ) );
|
||||
}
|
||||
|
||||
public ContainerLevelEmitter(InventoryPlayer ip, PartLevelEmitter te) {
|
||||
super( ip, te );
|
||||
this.lvlEmitter = te;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int availableUpgrades()
|
||||
{
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean supportCapacity()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public void setLevel(long l, EntityPlayer player)
|
||||
public void setLevel( long l, EntityPlayer player )
|
||||
{
|
||||
this.lvlEmitter.setReportingValue( l );
|
||||
this.EmitterValue = l;
|
||||
@@ -85,34 +80,38 @@ public class ContainerLevelEmitter extends ContainerUpgradeable
|
||||
int y = 40;
|
||||
|
||||
IInventory upgrades = this.upgradeable.getInventoryByName( "upgrades" );
|
||||
if ( this.availableUpgrades() > 0 )
|
||||
this.addSlotToContainer( (new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 0, 187, 8, this.invPlayer )).setNotDraggable() );
|
||||
if ( this.availableUpgrades() > 1 )
|
||||
this.addSlotToContainer( (new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 1, 187, 8 + 18, this.invPlayer )).setNotDraggable() );
|
||||
if ( this.availableUpgrades() > 2 )
|
||||
this.addSlotToContainer( (new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 2, 187, 8 + 18 * 2, this.invPlayer )).setNotDraggable() );
|
||||
if ( this.availableUpgrades() > 3 )
|
||||
this.addSlotToContainer( (new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 3, 187, 8 + 18 * 3, this.invPlayer )).setNotDraggable() );
|
||||
if( this.availableUpgrades() > 0 )
|
||||
this.addSlotToContainer( ( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 0, 187, 8, this.invPlayer ) ).setNotDraggable() );
|
||||
if( this.availableUpgrades() > 1 )
|
||||
this.addSlotToContainer( ( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 1, 187, 8 + 18, this.invPlayer ) ).setNotDraggable() );
|
||||
if( this.availableUpgrades() > 2 )
|
||||
this.addSlotToContainer( ( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 2, 187, 8 + 18 * 2, this.invPlayer ) ).setNotDraggable() );
|
||||
if( this.availableUpgrades() > 3 )
|
||||
this.addSlotToContainer( ( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 3, 187, 8 + 18 * 3, this.invPlayer ) ).setNotDraggable() );
|
||||
|
||||
IInventory inv = this.upgradeable.getInventoryByName( "config" );
|
||||
this.addSlotToContainer( new SlotFakeTypeOnly( inv, 0, x, y ) );
|
||||
}
|
||||
|
||||
@GuiSync(2)
|
||||
public LevelType lvType;
|
||||
@Override
|
||||
protected boolean supportCapacity()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@GuiSync(3)
|
||||
public long EmitterValue = -1;
|
||||
@Override
|
||||
public int availableUpgrades()
|
||||
{
|
||||
|
||||
@GuiSync(4)
|
||||
public YesNo cmType;
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void detectAndSendChanges()
|
||||
{
|
||||
this.verifyPermissions( SecurityPermissions.BUILD, false );
|
||||
|
||||
if ( Platform.isServer() )
|
||||
if( Platform.isServer() )
|
||||
{
|
||||
this.EmitterValue = this.lvlEmitter.getReportingValue();
|
||||
this.cmType = (YesNo) this.upgradeable.getConfigManager().getSetting( Settings.CRAFT_VIA_REDSTONE );
|
||||
@@ -125,13 +124,12 @@ public class ContainerLevelEmitter extends ContainerUpgradeable
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdate(String field, Object oldValue, Object newValue)
|
||||
public void onUpdate( String field, Object oldValue, Object newValue )
|
||||
{
|
||||
if ( field.equals( "EmitterValue" ) )
|
||||
if( field.equals( "EmitterValue" ) )
|
||||
{
|
||||
if ( this.textField != null )
|
||||
if( this.textField != null )
|
||||
this.textField.setText( String.valueOf( this.EmitterValue ) );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -37,22 +37,39 @@ import appeng.items.misc.ItemEncodedPattern;
|
||||
import appeng.tile.crafting.TileMolecularAssembler;
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
public class ContainerMAC extends ContainerUpgradeable implements IProgressProvider
|
||||
{
|
||||
|
||||
final TileMolecularAssembler tma;
|
||||
private static final int MAX_CRAFT_PROGRESS = 100;
|
||||
final TileMolecularAssembler tma;
|
||||
@GuiSync( 4 )
|
||||
public int craftProgress = 0;
|
||||
|
||||
public ContainerMAC(InventoryPlayer ip, TileMolecularAssembler te)
|
||||
public ContainerMAC( InventoryPlayer ip, TileMolecularAssembler te )
|
||||
{
|
||||
super( ip, te );
|
||||
this.tma = te;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int availableUpgrades()
|
||||
public boolean isValidItemForSlot( int slotIndex, ItemStack i )
|
||||
{
|
||||
return 5;
|
||||
IInventory mac = this.upgradeable.getInventoryByName( "mac" );
|
||||
|
||||
ItemStack is = mac.getStackInSlot( 10 );
|
||||
if( is == null )
|
||||
return false;
|
||||
|
||||
if( is.getItem() instanceof ItemEncodedPattern )
|
||||
{
|
||||
World w = this.getTileEntity().getWorldObj();
|
||||
ItemEncodedPattern iep = (ItemEncodedPattern) is.getItem();
|
||||
ICraftingPatternDetails ph = iep.getPatternForItem( is, w );
|
||||
if( ph.isCraftable() )
|
||||
return ph.isValidItemForSlot( slotIndex, i, w );
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -61,35 +78,6 @@ public class ContainerMAC extends ContainerUpgradeable implements IProgressProvi
|
||||
return 197;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean supportCapacity()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@GuiSync(4)
|
||||
public int craftProgress = 0;
|
||||
|
||||
public boolean isValidItemForSlot(int slotIndex, ItemStack i)
|
||||
{
|
||||
IInventory mac = this.upgradeable.getInventoryByName( "mac" );
|
||||
|
||||
ItemStack is = mac.getStackInSlot( 10 );
|
||||
if ( is == null )
|
||||
return false;
|
||||
|
||||
if ( is.getItem() instanceof ItemEncodedPattern )
|
||||
{
|
||||
World w = this.getTileEntity().getWorldObj();
|
||||
ItemEncodedPattern iep = (ItemEncodedPattern) is.getItem();
|
||||
ICraftingPatternDetails ph = iep.getPatternForItem( is, w );
|
||||
if ( ph.isCraftable() )
|
||||
return ph.isValidItemForSlot( slotIndex, i, w );
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setupConfig()
|
||||
{
|
||||
@@ -98,8 +86,8 @@ public class ContainerMAC extends ContainerUpgradeable implements IProgressProvi
|
||||
|
||||
IInventory mac = this.upgradeable.getInventoryByName( "mac" );
|
||||
|
||||
for (int y = 0; y < 3; y++)
|
||||
for (int x = 0; x < 3; x++)
|
||||
for( int y = 0; y < 3; y++ )
|
||||
for( int x = 0; x < 3; x++ )
|
||||
{
|
||||
SlotMACPattern s = new SlotMACPattern( this, mac, x + y * 3, offX + x * 18, offY + y * 18 );
|
||||
this.addSlotToContainer( s );
|
||||
@@ -115,16 +103,23 @@ public class ContainerMAC extends ContainerUpgradeable implements IProgressProvi
|
||||
offY = 17;
|
||||
|
||||
IInventory upgrades = this.upgradeable.getInventoryByName( "upgrades" );
|
||||
this.addSlotToContainer( (new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 0, 187, 8, this.invPlayer ))
|
||||
.setNotDraggable() );
|
||||
this.addSlotToContainer( (new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 1, 187, 8 + 18, this.invPlayer ))
|
||||
.setNotDraggable() );
|
||||
this.addSlotToContainer( (new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 2, 187, 8 + 18 * 2, this.invPlayer ))
|
||||
.setNotDraggable() );
|
||||
this.addSlotToContainer( (new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 3, 187, 8 + 18 * 3, this.invPlayer ))
|
||||
.setNotDraggable() );
|
||||
this.addSlotToContainer( (new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 4, 187, 8 + 18 * 4, this.invPlayer ))
|
||||
.setNotDraggable() );
|
||||
this.addSlotToContainer( ( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 0, 187, 8, this.invPlayer ) ).setNotDraggable() );
|
||||
this.addSlotToContainer( ( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 1, 187, 8 + 18, this.invPlayer ) ).setNotDraggable() );
|
||||
this.addSlotToContainer( ( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 2, 187, 8 + 18 * 2, this.invPlayer ) ).setNotDraggable() );
|
||||
this.addSlotToContainer( ( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 3, 187, 8 + 18 * 3, this.invPlayer ) ).setNotDraggable() );
|
||||
this.addSlotToContainer( ( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 4, 187, 8 + 18 * 4, this.invPlayer ) ).setNotDraggable() );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean supportCapacity()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int availableUpgrades()
|
||||
{
|
||||
return 5;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -132,7 +127,7 @@ public class ContainerMAC extends ContainerUpgradeable implements IProgressProvi
|
||||
{
|
||||
this.verifyPermissions( SecurityPermissions.BUILD, false );
|
||||
|
||||
if ( Platform.isServer() )
|
||||
if( Platform.isServer() )
|
||||
{
|
||||
this.rsMode = (RedstoneMode) this.upgradeable.getConfigManager().getSetting( Settings.REDSTONE_CONTROLLED );
|
||||
}
|
||||
@@ -153,5 +148,4 @@ public class ContainerMAC extends ContainerUpgradeable implements IProgressProvi
|
||||
{
|
||||
return MAX_CRAFT_PROGRESS;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
package appeng.container.implementations;
|
||||
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.BufferOverflowException;
|
||||
|
||||
@@ -66,33 +67,30 @@ import appeng.util.ConfigManager;
|
||||
import appeng.util.IConfigManagerHost;
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
public class ContainerMEMonitorable extends AEBaseContainer implements IConfigManagerHost, IConfigurableObject, IMEMonitorHandlerReceiver<IAEItemStack>
|
||||
{
|
||||
|
||||
public final SlotRestrictedInput[] cellView = new SlotRestrictedInput[5];
|
||||
final IMEMonitor<IAEItemStack> monitor;
|
||||
final IItemList<IAEItemStack> items = AEApi.instance().storage().createItemList();
|
||||
|
||||
IConfigManager serverCM;
|
||||
final IConfigManager clientCM;
|
||||
|
||||
@GuiSync(99)
|
||||
public boolean canAccessViewCells = false;
|
||||
|
||||
@GuiSync(98)
|
||||
public boolean hasPower = false;
|
||||
|
||||
public final SlotRestrictedInput[] cellView = new SlotRestrictedInput[5];
|
||||
|
||||
public IConfigManagerHost gui;
|
||||
private IGridNode networkNode;
|
||||
private final ITerminalHost host;
|
||||
@GuiSync( 99 )
|
||||
public boolean canAccessViewCells = false;
|
||||
@GuiSync( 98 )
|
||||
public boolean hasPower = false;
|
||||
public IConfigManagerHost gui;
|
||||
IConfigManager serverCM;
|
||||
private IGridNode networkNode;
|
||||
|
||||
public IGridNode getNetworkNode()
|
||||
public ContainerMEMonitorable( InventoryPlayer ip, ITerminalHost monitorable )
|
||||
{
|
||||
return this.networkNode;
|
||||
this( ip, monitorable, true );
|
||||
}
|
||||
|
||||
protected ContainerMEMonitorable(InventoryPlayer ip, ITerminalHost monitorable, boolean bindInventory) {
|
||||
protected ContainerMEMonitorable( InventoryPlayer ip, ITerminalHost monitorable, boolean bindInventory )
|
||||
{
|
||||
super( ip, monitorable instanceof TileEntity ? (TileEntity) monitorable : null, monitorable instanceof IPart ? (IPart) monitorable : null );
|
||||
|
||||
this.host = monitorable;
|
||||
@@ -102,29 +100,29 @@ public class ContainerMEMonitorable extends AEBaseContainer implements IConfigMa
|
||||
this.clientCM.registerSetting( Settings.VIEW_MODE, ViewItems.ALL );
|
||||
this.clientCM.registerSetting( Settings.SORT_DIRECTION, SortDir.ASCENDING );
|
||||
|
||||
if ( Platform.isServer() )
|
||||
if( Platform.isServer() )
|
||||
{
|
||||
this.serverCM = monitorable.getConfigManager();
|
||||
|
||||
this.monitor = monitorable.getItemInventory();
|
||||
if ( this.monitor != null )
|
||||
if( this.monitor != null )
|
||||
{
|
||||
this.monitor.addListener( this, null );
|
||||
|
||||
this.cellInv = this.monitor;
|
||||
|
||||
if ( monitorable instanceof IPortableCell )
|
||||
if( monitorable instanceof IPortableCell )
|
||||
this.powerSrc = (IPortableCell) monitorable;
|
||||
else if ( monitorable instanceof IMEChest )
|
||||
else if( monitorable instanceof IMEChest )
|
||||
this.powerSrc = (IMEChest) monitorable;
|
||||
else if ( monitorable instanceof IGridHost )
|
||||
else if( monitorable instanceof IGridHost )
|
||||
{
|
||||
IGridNode node = ((IGridHost) monitorable).getGridNode( ForgeDirection.UNKNOWN );
|
||||
if ( node != null )
|
||||
IGridNode node = ( (IGridHost) monitorable ).getGridNode( ForgeDirection.UNKNOWN );
|
||||
if( node != null )
|
||||
{
|
||||
this.networkNode = node;
|
||||
IGrid g = node.getGrid();
|
||||
if ( g != null )
|
||||
if( g != null )
|
||||
this.powerSrc = new ChannelPowerSrc( this.networkNode, (IEnergyGrid) g.getCache( IEnergyGrid.class ) );
|
||||
}
|
||||
}
|
||||
@@ -136,48 +134,48 @@ public class ContainerMEMonitorable extends AEBaseContainer implements IConfigMa
|
||||
this.monitor = null;
|
||||
|
||||
this.canAccessViewCells = false;
|
||||
if ( monitorable instanceof IViewCellStorage )
|
||||
if( monitorable instanceof IViewCellStorage )
|
||||
{
|
||||
for (int y = 0; y < 5; y++)
|
||||
for( int y = 0; y < 5; y++ )
|
||||
{
|
||||
this.cellView[y] = new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.VIEW_CELL, ((IViewCellStorage) monitorable).getViewCellStorage(), y, 206, y * 18 + 8,
|
||||
this.invPlayer );
|
||||
this.cellView[y] = new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.VIEW_CELL, ( (IViewCellStorage) monitorable ).getViewCellStorage(), y, 206, y * 18 + 8, this.invPlayer );
|
||||
this.cellView[y].allowEdit = this.canAccessViewCells;
|
||||
this.addSlotToContainer( this.cellView[y] );
|
||||
}
|
||||
}
|
||||
|
||||
if ( bindInventory )
|
||||
if( bindInventory )
|
||||
this.bindPlayerInventory( ip, 0, 0 );
|
||||
}
|
||||
|
||||
public ContainerMEMonitorable(InventoryPlayer ip, ITerminalHost monitorable) {
|
||||
this( ip, monitorable, true );
|
||||
public IGridNode getNetworkNode()
|
||||
{
|
||||
return this.networkNode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void detectAndSendChanges()
|
||||
{
|
||||
if ( Platform.isServer() )
|
||||
if( Platform.isServer() )
|
||||
{
|
||||
if ( this.monitor != this.host.getItemInventory() )
|
||||
if( this.monitor != this.host.getItemInventory() )
|
||||
this.isContainerValid = false;
|
||||
|
||||
for (Settings set : this.serverCM.getSettings())
|
||||
for( Settings set : this.serverCM.getSettings() )
|
||||
{
|
||||
Enum<?> sideLocal = this.serverCM.getSetting( set );
|
||||
Enum<?> sideRemote = this.clientCM.getSetting( set );
|
||||
|
||||
if ( sideLocal != sideRemote )
|
||||
if( sideLocal != sideRemote )
|
||||
{
|
||||
this.clientCM.putSetting( set, sideLocal );
|
||||
for (Object crafter : this.crafters)
|
||||
for( Object crafter : this.crafters )
|
||||
{
|
||||
try
|
||||
{
|
||||
NetworkHandler.instance.sendTo( new PacketValueConfig( set.name(), sideLocal.name() ), (EntityPlayerMP) crafter );
|
||||
}
|
||||
catch (IOException e)
|
||||
catch( IOException e )
|
||||
{
|
||||
AELog.error( e );
|
||||
}
|
||||
@@ -185,7 +183,7 @@ public class ContainerMEMonitorable extends AEBaseContainer implements IConfigMa
|
||||
}
|
||||
}
|
||||
|
||||
if ( !this.items.isEmpty() )
|
||||
if( !this.items.isEmpty() )
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -193,10 +191,10 @@ public class ContainerMEMonitorable extends AEBaseContainer implements IConfigMa
|
||||
|
||||
PacketMEInventoryUpdate piu = new PacketMEInventoryUpdate();
|
||||
|
||||
for (IAEItemStack is : this.items)
|
||||
for( IAEItemStack is : this.items )
|
||||
{
|
||||
IAEItemStack send = monitorCache.findPrecise( is );
|
||||
if ( send == null )
|
||||
if( send == null )
|
||||
{
|
||||
is.setStackSize( 0 );
|
||||
piu.appendItem( is );
|
||||
@@ -205,18 +203,18 @@ public class ContainerMEMonitorable extends AEBaseContainer implements IConfigMa
|
||||
piu.appendItem( send );
|
||||
}
|
||||
|
||||
if ( !piu.isEmpty() )
|
||||
if( !piu.isEmpty() )
|
||||
{
|
||||
this.items.resetStatus();
|
||||
|
||||
for (Object c : this.crafters)
|
||||
for( Object c : this.crafters )
|
||||
{
|
||||
if ( c instanceof EntityPlayer )
|
||||
if( c instanceof EntityPlayer )
|
||||
NetworkHandler.instance.sendTo( piu, (EntityPlayerMP) c );
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
catch( IOException e )
|
||||
{
|
||||
AELog.error( e );
|
||||
}
|
||||
@@ -226,11 +224,11 @@ public class ContainerMEMonitorable extends AEBaseContainer implements IConfigMa
|
||||
|
||||
boolean oldCanAccessViewCells = this.canAccessViewCells;
|
||||
this.canAccessViewCells = this.hasAccess( SecurityPermissions.BUILD, false );
|
||||
if ( this.canAccessViewCells != oldCanAccessViewCells )
|
||||
if( this.canAccessViewCells != oldCanAccessViewCells )
|
||||
{
|
||||
for (int y = 0; y < 5; y++)
|
||||
for( int y = 0; y < 5; y++ )
|
||||
{
|
||||
if ( this.cellView[y] != null )
|
||||
if( this.cellView[y] != null )
|
||||
this.cellView[y].allowEdit = this.canAccessViewCells;
|
||||
}
|
||||
}
|
||||
@@ -243,42 +241,55 @@ public class ContainerMEMonitorable extends AEBaseContainer implements IConfigMa
|
||||
{
|
||||
try
|
||||
{
|
||||
if ( this.networkNode != null )
|
||||
if( this.networkNode != null )
|
||||
this.hasPower = this.networkNode.isActive();
|
||||
else if ( this.powerSrc instanceof IEnergyGrid )
|
||||
this.hasPower = ((IEnergyGrid) this.powerSrc).isNetworkPowered();
|
||||
else if( this.powerSrc instanceof IEnergyGrid )
|
||||
this.hasPower = ( (IEnergyGrid) this.powerSrc ).isNetworkPowered();
|
||||
else
|
||||
this.hasPower = this.powerSrc.extractAEPower( 1, Actionable.SIMULATE, PowerMultiplier.CONFIG ) > 0.8;
|
||||
}
|
||||
catch (Throwable t)
|
||||
catch( Throwable t )
|
||||
{
|
||||
// :P
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCraftingToCrafters(ICrafting c)
|
||||
public void onUpdate( String field, Object oldValue, Object newValue )
|
||||
{
|
||||
if( field.equals( "canAccessViewCells" ) )
|
||||
{
|
||||
for( int y = 0; y < 5; y++ )
|
||||
if( this.cellView[y] != null )
|
||||
this.cellView[y].allowEdit = this.canAccessViewCells;
|
||||
}
|
||||
|
||||
super.onUpdate( field, oldValue, newValue );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCraftingToCrafters( ICrafting c )
|
||||
{
|
||||
super.addCraftingToCrafters( c );
|
||||
this.queueInventory( c );
|
||||
}
|
||||
|
||||
public void queueInventory(ICrafting c)
|
||||
public void queueInventory( ICrafting c )
|
||||
{
|
||||
if ( Platform.isServer() && c instanceof EntityPlayer && this.monitor != null )
|
||||
if( Platform.isServer() && c instanceof EntityPlayer && this.monitor != null )
|
||||
{
|
||||
try
|
||||
{
|
||||
PacketMEInventoryUpdate piu = new PacketMEInventoryUpdate();
|
||||
IItemList<IAEItemStack> monitorCache = this.monitor.getStorageList();
|
||||
|
||||
for (IAEItemStack send : monitorCache)
|
||||
for( IAEItemStack send : monitorCache )
|
||||
{
|
||||
try
|
||||
{
|
||||
piu.appendItem( send );
|
||||
}
|
||||
catch (BufferOverflowException boe)
|
||||
catch( BufferOverflowException boe )
|
||||
{
|
||||
NetworkHandler.instance.sendTo( piu, (EntityPlayerMP) c );
|
||||
|
||||
@@ -289,20 +300,49 @@ public class ContainerMEMonitorable extends AEBaseContainer implements IConfigMa
|
||||
|
||||
NetworkHandler.instance.sendTo( piu, (EntityPlayerMP) c );
|
||||
}
|
||||
catch (IOException e)
|
||||
catch( IOException e )
|
||||
{
|
||||
AELog.error( e );
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeCraftingFromCrafters( ICrafting c )
|
||||
{
|
||||
super.removeCraftingFromCrafters( c );
|
||||
|
||||
if( this.crafters.isEmpty() && this.monitor != null )
|
||||
this.monitor.removeListener( this );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onContainerClosed( EntityPlayer player )
|
||||
{
|
||||
super.onContainerClosed( player );
|
||||
if( this.monitor != null )
|
||||
this.monitor.removeListener( this );
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValid( Object verificationToken )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postChange( IBaseMonitor<IAEItemStack> monitor, Iterable<IAEItemStack> change, BaseActionSource source )
|
||||
{
|
||||
for( IAEItemStack is : change )
|
||||
this.items.add( is );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onListUpdate()
|
||||
{
|
||||
for (Object c : this.crafters)
|
||||
for( Object c : this.crafters )
|
||||
{
|
||||
if ( c instanceof ICrafting )
|
||||
if( c instanceof ICrafting )
|
||||
{
|
||||
ICrafting cr = (ICrafting) c;
|
||||
this.queueInventory( cr );
|
||||
@@ -311,59 +351,16 @@ public class ContainerMEMonitorable extends AEBaseContainer implements IConfigMa
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdate(String field, Object oldValue, Object newValue)
|
||||
public void updateSetting( IConfigManager manager, Enum settingName, Enum newValue )
|
||||
{
|
||||
if ( field.equals( "canAccessViewCells" ) )
|
||||
{
|
||||
for (int y = 0; y < 5; y++)
|
||||
if ( this.cellView[y] != null )
|
||||
this.cellView[y].allowEdit = this.canAccessViewCells;
|
||||
}
|
||||
|
||||
super.onUpdate( field, oldValue, newValue );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onContainerClosed(EntityPlayer player)
|
||||
{
|
||||
super.onContainerClosed( player );
|
||||
if ( this.monitor != null )
|
||||
this.monitor.removeListener( this );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeCraftingFromCrafters(ICrafting c)
|
||||
{
|
||||
super.removeCraftingFromCrafters( c );
|
||||
|
||||
if ( this.crafters.isEmpty() && this.monitor != null )
|
||||
this.monitor.removeListener( this );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postChange(IBaseMonitor<IAEItemStack> monitor, Iterable<IAEItemStack> change, BaseActionSource source)
|
||||
{
|
||||
for (IAEItemStack is : change)
|
||||
this.items.add( is );
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValid(Object verificationToken)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateSetting(IConfigManager manager, Enum settingName, Enum newValue)
|
||||
{
|
||||
if ( this.gui != null )
|
||||
if( this.gui != null )
|
||||
this.gui.updateSetting( manager, settingName, newValue );
|
||||
}
|
||||
|
||||
@Override
|
||||
public IConfigManager getConfigManager()
|
||||
{
|
||||
if ( Platform.isServer() )
|
||||
if( Platform.isServer() )
|
||||
return this.serverCM;
|
||||
return this.clientCM;
|
||||
}
|
||||
@@ -372,7 +369,7 @@ public class ContainerMEMonitorable extends AEBaseContainer implements IConfigMa
|
||||
{
|
||||
ItemStack[] list = new ItemStack[this.cellView.length];
|
||||
|
||||
for (int x = 0; x < this.cellView.length; x++)
|
||||
for( int x = 0; x < this.cellView.length; x++ )
|
||||
list[x] = this.cellView[x].getStack();
|
||||
|
||||
return list;
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
package appeng.container.implementations;
|
||||
|
||||
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
@@ -26,33 +27,34 @@ import appeng.api.config.PowerMultiplier;
|
||||
import appeng.api.implementations.guiobjects.IPortableCell;
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
public class ContainerMEPortableCell extends ContainerMEMonitorable
|
||||
{
|
||||
|
||||
double powerMultiplier = 0.5;
|
||||
final IPortableCell civ;
|
||||
double powerMultiplier = 0.5;
|
||||
int ticks = 0;
|
||||
|
||||
public ContainerMEPortableCell(InventoryPlayer ip, IPortableCell monitorable) {
|
||||
public ContainerMEPortableCell( InventoryPlayer ip, IPortableCell monitorable )
|
||||
{
|
||||
super( ip, monitorable, false );
|
||||
this.lockPlayerInventorySlot( ip.currentItem );
|
||||
this.civ = monitorable;
|
||||
this.bindPlayerInventory( ip, 0, 0 );
|
||||
}
|
||||
|
||||
int ticks = 0;
|
||||
|
||||
@Override
|
||||
public void detectAndSendChanges()
|
||||
{
|
||||
ItemStack currentItem = this.getPlayerInv().getCurrentItem();
|
||||
|
||||
if ( this.civ != null )
|
||||
if( this.civ != null )
|
||||
{
|
||||
if ( currentItem != this.civ.getItemStack() )
|
||||
if( currentItem != this.civ.getItemStack() )
|
||||
{
|
||||
if ( currentItem != null )
|
||||
if( currentItem != null )
|
||||
{
|
||||
if ( Platform.isSameItem( this.civ.getItemStack(), currentItem ) )
|
||||
if( Platform.isSameItem( this.civ.getItemStack(), currentItem ) )
|
||||
this.getPlayerInv().setInventorySlotContents( this.getPlayerInv().currentItem, this.civ.getItemStack() );
|
||||
else
|
||||
this.isContainerValid = false;
|
||||
@@ -66,7 +68,7 @@ public class ContainerMEPortableCell extends ContainerMEMonitorable
|
||||
|
||||
// drain 1 ae t
|
||||
this.ticks++;
|
||||
if ( this.ticks > 10 )
|
||||
if( this.ticks > 10 )
|
||||
{
|
||||
this.civ.extractAEPower( this.powerMultiplier * this.ticks, Actionable.MODULATE, PowerMultiplier.CONFIG );
|
||||
this.ticks = 0;
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
package appeng.container.implementations;
|
||||
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
@@ -42,62 +43,62 @@ import appeng.core.sync.packets.PacketMEInventoryUpdate;
|
||||
import appeng.util.Platform;
|
||||
import appeng.util.item.AEItemStack;
|
||||
|
||||
|
||||
public class ContainerNetworkStatus extends AEBaseContainer
|
||||
{
|
||||
|
||||
@GuiSync( 0 )
|
||||
public long avgAddition;
|
||||
@GuiSync( 1 )
|
||||
public long powerUsage;
|
||||
@GuiSync( 2 )
|
||||
public long currentPower;
|
||||
@GuiSync( 3 )
|
||||
public long maxPower;
|
||||
IGrid network;
|
||||
int delay = 40;
|
||||
|
||||
public ContainerNetworkStatus(InventoryPlayer ip, INetworkTool te) {
|
||||
public ContainerNetworkStatus( InventoryPlayer ip, INetworkTool te )
|
||||
{
|
||||
super( ip, null, null );
|
||||
IGridHost host = te.getGridHost();
|
||||
|
||||
if ( host != null )
|
||||
if( host != null )
|
||||
{
|
||||
this.findNode( host, ForgeDirection.UNKNOWN );
|
||||
for (ForgeDirection d : ForgeDirection.VALID_DIRECTIONS)
|
||||
for( ForgeDirection d : ForgeDirection.VALID_DIRECTIONS )
|
||||
this.findNode( host, d );
|
||||
}
|
||||
|
||||
if ( this.network == null && Platform.isServer() )
|
||||
if( this.network == null && Platform.isServer() )
|
||||
this.isContainerValid = false;
|
||||
}
|
||||
|
||||
private void findNode(IGridHost host, ForgeDirection d)
|
||||
private void findNode( IGridHost host, ForgeDirection d )
|
||||
{
|
||||
if ( this.network == null )
|
||||
if( this.network == null )
|
||||
{
|
||||
IGridNode node = host.getGridNode( d );
|
||||
if ( node != null )
|
||||
if( node != null )
|
||||
this.network = node.getGrid();
|
||||
}
|
||||
}
|
||||
|
||||
int delay = 40;
|
||||
|
||||
@GuiSync(0)
|
||||
public long avgAddition;
|
||||
@GuiSync(1)
|
||||
public long powerUsage;
|
||||
@GuiSync(2)
|
||||
public long currentPower;
|
||||
@GuiSync(3)
|
||||
public long maxPower;
|
||||
|
||||
@Override
|
||||
public void detectAndSendChanges()
|
||||
{
|
||||
this.delay++;
|
||||
if ( Platform.isServer() && this.delay > 15 && this.network != null )
|
||||
if( Platform.isServer() && this.delay > 15 && this.network != null )
|
||||
{
|
||||
this.delay = 0;
|
||||
|
||||
IEnergyGrid eg = this.network.getCache( IEnergyGrid.class );
|
||||
if ( eg != null )
|
||||
if( eg != null )
|
||||
{
|
||||
this.avgAddition = (long) (100.0 * eg.getAvgPowerInjection());
|
||||
this.powerUsage = (long) (100.0 * eg.getAvgPowerUsage());
|
||||
this.currentPower = (long) (100.0 * eg.getStoredPower());
|
||||
this.maxPower = (long) (100.0 * eg.getMaxStoredPower());
|
||||
this.avgAddition = (long) ( 100.0 * eg.getAvgPowerInjection() );
|
||||
this.powerUsage = (long) ( 100.0 * eg.getAvgPowerUsage() );
|
||||
this.currentPower = (long) ( 100.0 * eg.getStoredPower() );
|
||||
this.maxPower = (long) ( 100.0 * eg.getMaxStoredPower() );
|
||||
}
|
||||
|
||||
PacketMEInventoryUpdate piu;
|
||||
@@ -105,37 +106,36 @@ public class ContainerNetworkStatus extends AEBaseContainer
|
||||
{
|
||||
piu = new PacketMEInventoryUpdate();
|
||||
|
||||
for (Class<? extends IGridHost> machineClass : this.network.getMachinesClasses())
|
||||
for( Class<? extends IGridHost> machineClass : this.network.getMachinesClasses() )
|
||||
{
|
||||
IItemList<IAEItemStack> list = AEApi.instance().storage().createItemList();
|
||||
for (IGridNode machine : this.network.getMachines( machineClass ))
|
||||
for( IGridNode machine : this.network.getMachines( machineClass ) )
|
||||
{
|
||||
IGridBlock blk = machine.getGridBlock();
|
||||
ItemStack is = blk.getMachineRepresentation();
|
||||
if ( is != null && is.getItem() != null )
|
||||
if( is != null && is.getItem() != null )
|
||||
{
|
||||
IAEItemStack ais = AEItemStack.create( is );
|
||||
ais.setStackSize( 1 );
|
||||
ais.setCountRequestable( (long) (blk.getIdlePowerUsage() * 100.0) );
|
||||
ais.setCountRequestable( (long) ( blk.getIdlePowerUsage() * 100.0 ) );
|
||||
list.add( ais );
|
||||
}
|
||||
}
|
||||
|
||||
for (IAEItemStack ais : list)
|
||||
for( IAEItemStack ais : list )
|
||||
piu.appendItem( ais );
|
||||
}
|
||||
|
||||
for (Object c : this.crafters)
|
||||
for( Object c : this.crafters )
|
||||
{
|
||||
if ( c instanceof EntityPlayer )
|
||||
if( c instanceof EntityPlayer )
|
||||
NetworkHandler.instance.sendTo( piu, (EntityPlayerMP) c );
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
catch( IOException e )
|
||||
{
|
||||
// :P
|
||||
}
|
||||
|
||||
}
|
||||
super.detectAndSendChanges();
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
package appeng.container.implementations;
|
||||
|
||||
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
@@ -28,23 +29,25 @@ import appeng.container.guisync.GuiSync;
|
||||
import appeng.container.slot.SlotRestrictedInput;
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
public class ContainerNetworkTool extends AEBaseContainer
|
||||
{
|
||||
|
||||
final INetworkTool toolInv;
|
||||
|
||||
@GuiSync(1)
|
||||
@GuiSync( 1 )
|
||||
public boolean facadeMode;
|
||||
|
||||
public ContainerNetworkTool(InventoryPlayer ip, INetworkTool te) {
|
||||
public ContainerNetworkTool( InventoryPlayer ip, INetworkTool te )
|
||||
{
|
||||
super( ip, null, null );
|
||||
this.toolInv = te;
|
||||
|
||||
this.lockPlayerInventorySlot( ip.currentItem );
|
||||
|
||||
for (int y = 0; y < 3; y++)
|
||||
for (int x = 0; x < 3; x++)
|
||||
this.addSlotToContainer( (new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, te, y * 3 + x, 80 - 18 + x * 18, 37 - 18 + y * 18, this.invPlayer )) );
|
||||
for( int y = 0; y < 3; y++ )
|
||||
for( int x = 0; x < 3; x++ )
|
||||
this.addSlotToContainer( ( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, te, y * 3 + x, 80 - 18 + x * 18, 37 - 18 + y * 18, this.invPlayer ) ) );
|
||||
|
||||
this.bindPlayerInventory( ip, 0, 166 - /* height of player inventory */82 );
|
||||
}
|
||||
@@ -61,11 +64,11 @@ public class ContainerNetworkTool extends AEBaseContainer
|
||||
{
|
||||
ItemStack currentItem = this.getPlayerInv().getCurrentItem();
|
||||
|
||||
if ( currentItem != this.toolInv.getItemStack() )
|
||||
if( currentItem != this.toolInv.getItemStack() )
|
||||
{
|
||||
if ( currentItem != null )
|
||||
if( currentItem != null )
|
||||
{
|
||||
if ( Platform.isSameItem( this.toolInv.getItemStack(), currentItem ) )
|
||||
if( Platform.isSameItem( this.toolInv.getItemStack(), currentItem ) )
|
||||
{
|
||||
this.getPlayerInv().setInventorySlotContents( this.getPlayerInv().currentItem, this.toolInv.getItemStack() );
|
||||
}
|
||||
@@ -76,7 +79,7 @@ public class ContainerNetworkTool extends AEBaseContainer
|
||||
this.isContainerValid = false;
|
||||
}
|
||||
|
||||
if ( this.isContainerValid )
|
||||
if( this.isContainerValid )
|
||||
{
|
||||
NBTTagCompound data = Platform.openNbtData( currentItem );
|
||||
this.facadeMode = data.getBoolean( "hideFacades" );
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
package appeng.container.implementations;
|
||||
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -65,23 +66,22 @@ import appeng.util.Platform;
|
||||
import appeng.util.inv.AdaptorPlayerHand;
|
||||
import appeng.util.item.AEItemStack;
|
||||
|
||||
|
||||
public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEAppEngInventory, IOptionalSlotHost, IContainerCraftingPacket
|
||||
{
|
||||
|
||||
public final PartPatternTerminal ct;
|
||||
final AppEngInternalInventory cOut = new AppEngInternalInventory( null, 1 );
|
||||
final IInventory crafting;
|
||||
|
||||
final SlotFakeCraftingMatrix[] craftingSlots = new SlotFakeCraftingMatrix[9];
|
||||
final OptionalSlotFake[] outputSlots = new OptionalSlotFake[3];
|
||||
|
||||
final SlotPatternTerm craftSlot;
|
||||
|
||||
final SlotRestrictedInput patternSlotIN;
|
||||
final SlotRestrictedInput patternSlotOUT;
|
||||
@GuiSync( 97 )
|
||||
public boolean craftingMode = true;
|
||||
|
||||
public final PartPatternTerminal ct;
|
||||
|
||||
public ContainerPatternTerm(InventoryPlayer ip, ITerminalHost monitorable)
|
||||
public ContainerPatternTerm( InventoryPlayer ip, ITerminalHost monitorable )
|
||||
{
|
||||
super( ip, monitorable, false );
|
||||
this.ct = (PartPatternTerminal) monitorable;
|
||||
@@ -90,14 +90,14 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
|
||||
IInventory output = this.ct.getInventoryByName( "output" );
|
||||
this.crafting = this.ct.getInventoryByName( "crafting" );
|
||||
|
||||
for (int y = 0; y < 3; y++)
|
||||
for (int x = 0; x < 3; x++)
|
||||
for( int y = 0; y < 3; y++ )
|
||||
for( int x = 0; x < 3; x++ )
|
||||
this.addSlotToContainer( this.craftingSlots[x + y * 3] = new SlotFakeCraftingMatrix( this.crafting, x + y * 3, 18 + x * 18, -76 + y * 18 ) );
|
||||
|
||||
this.addSlotToContainer( this.craftSlot = new SlotPatternTerm( ip.player, this.mySrc, this.powerSrc, monitorable, this.crafting, patternInv, this.cOut, 110, -76 + 18, this, 2, this ) );
|
||||
this.craftSlot.IIcon = -1;
|
||||
|
||||
for (int y = 0; y < 3; y++)
|
||||
for( int y = 0; y < 3; y++ )
|
||||
{
|
||||
this.addSlotToContainer( this.outputSlots[y] = new SlotPatternOutputs( output, this, y, 110, -76 + y * 18, 0, 0, 1 ) );
|
||||
this.outputSlots[y].renderDisabled = false;
|
||||
@@ -115,31 +115,31 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
|
||||
|
||||
private void updateOrderOfOutputSlots()
|
||||
{
|
||||
if ( !this.craftingMode )
|
||||
if( !this.craftingMode )
|
||||
{
|
||||
this.craftSlot.xDisplayPosition = -9000;
|
||||
|
||||
for (int y = 0; y < 3; y++)
|
||||
for( int y = 0; y < 3; y++ )
|
||||
this.outputSlots[y].xDisplayPosition = this.outputSlots[y].defX;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.craftSlot.xDisplayPosition = this.craftSlot.defX;
|
||||
|
||||
for (int y = 0; y < 3; y++)
|
||||
for( int y = 0; y < 3; y++ )
|
||||
this.outputSlots[y].xDisplayPosition = -9000;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void putStackInSlot(int par1, ItemStack par2ItemStack)
|
||||
public void putStackInSlot( int par1, ItemStack par2ItemStack )
|
||||
{
|
||||
super.putStackInSlot( par1, par2ItemStack );
|
||||
this.getAndUpdateOutput();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void putStacksInSlots(ItemStack[] par1ArrayOfItemStack)
|
||||
public void putStacksInSlots( ItemStack[] par1ArrayOfItemStack )
|
||||
{
|
||||
super.putStacksInSlots( par1ArrayOfItemStack );
|
||||
this.getAndUpdateOutput();
|
||||
@@ -148,7 +148,7 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
|
||||
public ItemStack getAndUpdateOutput()
|
||||
{
|
||||
InventoryCrafting ic = new InventoryCrafting( this, 3, 3 );
|
||||
for (int x = 0; x < ic.getSizeInventory(); x++)
|
||||
for( int x = 0; x < ic.getSizeInventory(); x++ )
|
||||
ic.setInventorySlotContents( x, this.crafting.getStackInSlot( x ) );
|
||||
|
||||
ItemStack is = CraftingManager.getInstance().findMatchingRecipe( ic, this.getPlayerInv().player.worldObj );
|
||||
@@ -156,41 +156,18 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
|
||||
return is;
|
||||
}
|
||||
|
||||
@GuiSync(97)
|
||||
public boolean craftingMode = true;
|
||||
|
||||
@Override
|
||||
public void detectAndSendChanges()
|
||||
{
|
||||
super.detectAndSendChanges();
|
||||
if ( Platform.isServer() )
|
||||
{
|
||||
if ( this.craftingMode != this.ct.isCraftingRecipe() )
|
||||
{
|
||||
this.craftingMode = this.ct.isCraftingRecipe();
|
||||
this.updateOrderOfOutputSlots();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdate(String field, Object oldValue, Object newValue)
|
||||
{
|
||||
super.onUpdate( field, oldValue, newValue );
|
||||
|
||||
if ( field.equals( "craftingMode" ) )
|
||||
{
|
||||
this.getAndUpdateOutput();
|
||||
this.updateOrderOfOutputSlots();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveChanges()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChangeInventory( IInventory inv, int slot, InvOperation mc, ItemStack removedStack, ItemStack newStack )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void encode()
|
||||
{
|
||||
ItemStack output = this.patternSlotOUT.getStack();
|
||||
@@ -199,27 +176,27 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
|
||||
ItemStack[] out = this.getOutputs();
|
||||
|
||||
// if there is no input, this would be silly.
|
||||
if ( in == null || out == null )
|
||||
if( in == null || out == null )
|
||||
return;
|
||||
|
||||
// first check the output slots, should either be null, or a pattern
|
||||
if ( output != null && !this.isPattern( output ) )
|
||||
if( output != null && !this.isPattern( output ) )
|
||||
return;
|
||||
|
||||
// if nothing is there we should snag a new pattern.
|
||||
else if ( output == null )
|
||||
// if nothing is there we should snag a new pattern.
|
||||
else if( output == null )
|
||||
{
|
||||
output = this.patternSlotIN.getStack();
|
||||
if ( output == null || !this.isPattern( output ) )
|
||||
if( output == null || !this.isPattern( output ) )
|
||||
return; // no blanks.
|
||||
|
||||
// remove one, and clear the input slot.
|
||||
output.stackSize--;
|
||||
if ( output.stackSize == 0 )
|
||||
if( output.stackSize == 0 )
|
||||
this.patternSlotIN.putStack( null );
|
||||
|
||||
// add a new encoded pattern.
|
||||
for ( ItemStack encodedPatternStack : AEApi.instance().definitions().items().encodedPattern().maybeStack( 1 ).asSet() )
|
||||
for( ItemStack encodedPatternStack : AEApi.instance().definitions().items().encodedPattern().maybeStack( 1 ).asSet() )
|
||||
{
|
||||
output = encodedPatternStack;
|
||||
this.patternSlotOUT.putStack( output );
|
||||
@@ -232,10 +209,10 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
|
||||
NBTTagList tagIn = new NBTTagList();
|
||||
NBTTagList tagOut = new NBTTagList();
|
||||
|
||||
for (ItemStack i : in)
|
||||
for( ItemStack i : in )
|
||||
tagIn.appendTag( this.createItemTag( i ) );
|
||||
|
||||
for (ItemStack i : out)
|
||||
for( ItemStack i : out )
|
||||
tagOut.appendTag( this.createItemTag( i ) );
|
||||
|
||||
encodedValue.setTag( "in", tagIn );
|
||||
@@ -245,29 +222,19 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
|
||||
output.setTagCompound( encodedValue );
|
||||
}
|
||||
|
||||
private NBTBase createItemTag(ItemStack i)
|
||||
{
|
||||
NBTTagCompound c = new NBTTagCompound();
|
||||
|
||||
if ( i != null )
|
||||
i.writeToNBT( c );
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
private ItemStack[] getInputs()
|
||||
{
|
||||
ItemStack[] input = new ItemStack[9];
|
||||
boolean hasValue = false;
|
||||
|
||||
for (int x = 0; x < this.craftingSlots.length; x++)
|
||||
for( int x = 0; x < this.craftingSlots.length; x++ )
|
||||
{
|
||||
input[x] = this.craftingSlots[x].getStack();
|
||||
if ( input[x] != null )
|
||||
if( input[x] != null )
|
||||
hasValue = true;
|
||||
}
|
||||
|
||||
if ( hasValue )
|
||||
if( hasValue )
|
||||
return input;
|
||||
|
||||
return null;
|
||||
@@ -275,10 +242,10 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
|
||||
|
||||
private ItemStack[] getOutputs()
|
||||
{
|
||||
if ( this.craftingMode )
|
||||
if( this.craftingMode )
|
||||
{
|
||||
ItemStack out = this.getAndUpdateOutput();
|
||||
if ( out != null && out.stackSize > 0 )
|
||||
if( out != null && out.stackSize > 0 )
|
||||
return new ItemStack[] { out };
|
||||
}
|
||||
else
|
||||
@@ -286,26 +253,26 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
|
||||
List<ItemStack> list = new ArrayList<ItemStack>( 3 );
|
||||
boolean hasValue = false;
|
||||
|
||||
for (OptionalSlotFake outputSlot : this.outputSlots)
|
||||
for( OptionalSlotFake outputSlot : this.outputSlots )
|
||||
{
|
||||
ItemStack out = outputSlot.getStack();
|
||||
if ( out != null && out.stackSize > 0 )
|
||||
if( out != null && out.stackSize > 0 )
|
||||
{
|
||||
list.add( out );
|
||||
hasValue = true;
|
||||
}
|
||||
}
|
||||
|
||||
if ( hasValue )
|
||||
if( hasValue )
|
||||
return list.toArray( new ItemStack[list.size()] );
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private boolean isPattern(ItemStack output)
|
||||
private boolean isPattern( ItemStack output )
|
||||
{
|
||||
if ( output == null )
|
||||
if( output == null )
|
||||
return false;
|
||||
|
||||
final IDefinitions definitions = AEApi.instance().definitions();
|
||||
@@ -316,44 +283,48 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
|
||||
return isPattern;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSlotEnabled(int idx)
|
||||
private NBTBase createItemTag( ItemStack i )
|
||||
{
|
||||
if ( idx == 1 )
|
||||
NBTTagCompound c = new NBTTagCompound();
|
||||
|
||||
if( i != null )
|
||||
i.writeToNBT( c );
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSlotEnabled( int idx )
|
||||
{
|
||||
if( idx == 1 )
|
||||
return Platform.isServer() ? !this.ct.isCraftingRecipe() : !this.craftingMode;
|
||||
else if ( idx == 2 )
|
||||
else if( idx == 2 )
|
||||
return Platform.isServer() ? this.ct.isCraftingRecipe() : this.craftingMode;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChangeInventory(IInventory inv, int slot, InvOperation mc, ItemStack removedStack, ItemStack newStack)
|
||||
public void craftOrGetItem( PacketPatternSlot packetPatternSlot )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void craftOrGetItem(PacketPatternSlot packetPatternSlot)
|
||||
{
|
||||
if ( packetPatternSlot.slotItem != null && this.cellInv != null )
|
||||
if( packetPatternSlot.slotItem != null && this.cellInv != null )
|
||||
{
|
||||
IAEItemStack out = packetPatternSlot.slotItem.copy();
|
||||
|
||||
InventoryAdaptor inv = new AdaptorPlayerHand( this.getPlayerInv().player );
|
||||
InventoryAdaptor playerInv = InventoryAdaptor.getAdaptor( this.getPlayerInv().player, ForgeDirection.UNKNOWN );
|
||||
if ( packetPatternSlot.shift )
|
||||
if( packetPatternSlot.shift )
|
||||
inv = playerInv;
|
||||
|
||||
if ( inv.simulateAdd( out.getItemStack() ) != null )
|
||||
if( inv.simulateAdd( out.getItemStack() ) != null )
|
||||
return;
|
||||
|
||||
IAEItemStack extracted = Platform.poweredExtraction( this.powerSrc, this.cellInv, out, this.mySrc );
|
||||
EntityPlayer p = this.getPlayerInv().player;
|
||||
|
||||
if ( extracted != null )
|
||||
if( extracted != null )
|
||||
{
|
||||
inv.addItems( extracted.getItemStack() );
|
||||
if ( p instanceof EntityPlayerMP )
|
||||
if( p instanceof EntityPlayerMP )
|
||||
this.updateHeld( (EntityPlayerMP) p );
|
||||
this.detectAndSendChanges();
|
||||
return;
|
||||
@@ -361,14 +332,14 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
|
||||
|
||||
InventoryCrafting ic = new InventoryCrafting( new ContainerNull(), 3, 3 );
|
||||
InventoryCrafting real = new InventoryCrafting( new ContainerNull(), 3, 3 );
|
||||
for (int x = 0; x < 9; x++)
|
||||
for( int x = 0; x < 9; x++ )
|
||||
{
|
||||
ic.setInventorySlotContents( x, packetPatternSlot.pattern[x] == null ? null : packetPatternSlot.pattern[x].getItemStack() );
|
||||
}
|
||||
|
||||
IRecipe r = Platform.findMatchingRecipe( ic, p.worldObj );
|
||||
|
||||
if ( r == null )
|
||||
if( r == null )
|
||||
return;
|
||||
|
||||
IMEMonitor<IAEItemStack> storage = this.ct.getItemInventory();
|
||||
@@ -376,68 +347,92 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
|
||||
|
||||
ItemStack is = r.getCraftingResult( ic );
|
||||
|
||||
for (int x = 0; x < ic.getSizeInventory(); x++)
|
||||
for( int x = 0; x < ic.getSizeInventory(); x++ )
|
||||
{
|
||||
if ( ic.getStackInSlot( x ) != null )
|
||||
if( ic.getStackInSlot( x ) != null )
|
||||
{
|
||||
ItemStack pulled = Platform.extractItemsByRecipe( this.powerSrc, this.mySrc, storage, p.worldObj, r, is, ic, ic.getStackInSlot( x ), x, all,
|
||||
Actionable.MODULATE, ItemViewCell.createFilter( this.getViewCells() ) );
|
||||
ItemStack pulled = Platform.extractItemsByRecipe( this.powerSrc, this.mySrc, storage, p.worldObj, r, is, ic, ic.getStackInSlot( x ), x, all, Actionable.MODULATE, ItemViewCell.createFilter( this.getViewCells() ) );
|
||||
real.setInventorySlotContents( x, pulled );
|
||||
}
|
||||
}
|
||||
|
||||
IRecipe rr = Platform.findMatchingRecipe( real, p.worldObj );
|
||||
|
||||
if ( rr == r && Platform.isSameItemPrecise( rr.getCraftingResult( real ), is ) )
|
||||
if( rr == r && Platform.isSameItemPrecise( rr.getCraftingResult( real ), is ) )
|
||||
{
|
||||
SlotCrafting sc = new SlotCrafting( p, real, this.cOut, 0, 0, 0 );
|
||||
sc.onPickupFromSlot( p, is );
|
||||
|
||||
for (int x = 0; x < real.getSizeInventory(); x++)
|
||||
for( int x = 0; x < real.getSizeInventory(); x++ )
|
||||
{
|
||||
ItemStack failed = playerInv.addItems( real.getStackInSlot( x ) );
|
||||
if ( failed != null )
|
||||
if( failed != null )
|
||||
p.dropPlayerItemWithRandomChoice( failed, false );
|
||||
}
|
||||
|
||||
inv.addItems( is );
|
||||
if ( p instanceof EntityPlayerMP )
|
||||
if( p instanceof EntityPlayerMP )
|
||||
this.updateHeld( (EntityPlayerMP) p );
|
||||
this.detectAndSendChanges();
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int x = 0; x < real.getSizeInventory(); x++)
|
||||
for( int x = 0; x < real.getSizeInventory(); x++ )
|
||||
{
|
||||
ItemStack failed = real.getStackInSlot( x );
|
||||
if ( failed != null )
|
||||
if( failed != null )
|
||||
{
|
||||
this.cellInv.injectItems( AEItemStack.create( failed ), Actionable.MODULATE, new MachineSource( this.ct ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSlotChange(Slot s)
|
||||
public void detectAndSendChanges()
|
||||
{
|
||||
if ( s == this.patternSlotOUT && Platform.isServer() )
|
||||
super.detectAndSendChanges();
|
||||
if( Platform.isServer() )
|
||||
{
|
||||
for (Object crafter : this.crafters)
|
||||
if( this.craftingMode != this.ct.isCraftingRecipe() )
|
||||
{
|
||||
this.craftingMode = this.ct.isCraftingRecipe();
|
||||
this.updateOrderOfOutputSlots();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdate( String field, Object oldValue, Object newValue )
|
||||
{
|
||||
super.onUpdate( field, oldValue, newValue );
|
||||
|
||||
if( field.equals( "craftingMode" ) )
|
||||
{
|
||||
this.getAndUpdateOutput();
|
||||
this.updateOrderOfOutputSlots();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSlotChange( Slot s )
|
||||
{
|
||||
if( s == this.patternSlotOUT && Platform.isServer() )
|
||||
{
|
||||
for( Object crafter : this.crafters )
|
||||
{
|
||||
ICrafting icrafting = (ICrafting) crafter;
|
||||
|
||||
for (Object g : this.inventorySlots)
|
||||
for( Object g : this.inventorySlots )
|
||||
{
|
||||
if ( g instanceof OptionalSlotFake || g instanceof SlotFakeCraftingMatrix )
|
||||
if( g instanceof OptionalSlotFake || g instanceof SlotFakeCraftingMatrix )
|
||||
{
|
||||
Slot sri = (Slot) g;
|
||||
icrafting.sendSlotContents( this, sri.slotNumber, sri.getStack() );
|
||||
}
|
||||
}
|
||||
((EntityPlayerMP) icrafting).isChangingQuantityOnly = false;
|
||||
( (EntityPlayerMP) icrafting ).isChangingQuantityOnly = false;
|
||||
}
|
||||
this.detectAndSendChanges();
|
||||
}
|
||||
@@ -445,10 +440,10 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
|
||||
|
||||
public void clear()
|
||||
{
|
||||
for (Slot s : this.craftingSlots)
|
||||
for( Slot s : this.craftingSlots )
|
||||
s.putStack( null );
|
||||
|
||||
for (Slot s : this.outputSlots)
|
||||
for( Slot s : this.outputSlots )
|
||||
s.putStack( null );
|
||||
|
||||
this.detectAndSendChanges();
|
||||
@@ -456,9 +451,9 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
|
||||
}
|
||||
|
||||
@Override
|
||||
public IInventory getInventoryByName(String name)
|
||||
public IInventory getInventoryByName( String name )
|
||||
{
|
||||
if (name.equals("player"))
|
||||
if( name.equals( "player" ) )
|
||||
{
|
||||
return this.invPlayer;
|
||||
}
|
||||
|
||||
@@ -34,30 +34,31 @@ import appeng.container.guisync.GuiSync;
|
||||
import appeng.helpers.IPriorityHost;
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
public class ContainerPriority extends AEBaseContainer
|
||||
{
|
||||
|
||||
final IPriorityHost priHost;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
@SideOnly( Side.CLIENT )
|
||||
public GuiTextField textField;
|
||||
@GuiSync( 2 )
|
||||
public long PriorityValue = -1;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void setTextField(GuiTextField level)
|
||||
public ContainerPriority( InventoryPlayer ip, IPriorityHost te )
|
||||
{
|
||||
super( ip, (TileEntity) ( te instanceof TileEntity ? te : null ), (IPart) ( te instanceof IPart ? te : null ) );
|
||||
this.priHost = te;
|
||||
}
|
||||
|
||||
@SideOnly( Side.CLIENT )
|
||||
public void setTextField( GuiTextField level )
|
||||
{
|
||||
this.textField = level;
|
||||
this.textField.setText( String.valueOf( this.PriorityValue ) );
|
||||
}
|
||||
|
||||
public ContainerPriority(InventoryPlayer ip, IPriorityHost te) {
|
||||
super( ip, (TileEntity) (te instanceof TileEntity ? te : null), (IPart) (te instanceof IPart ? te : null) );
|
||||
this.priHost = te;
|
||||
}
|
||||
|
||||
@GuiSync(2)
|
||||
public long PriorityValue = -1;
|
||||
|
||||
public void setPriority(int newValue, EntityPlayer player)
|
||||
public void setPriority( int newValue, EntityPlayer player )
|
||||
{
|
||||
this.priHost.setPriority( newValue );
|
||||
this.PriorityValue = newValue;
|
||||
@@ -69,18 +70,18 @@ public class ContainerPriority extends AEBaseContainer
|
||||
super.detectAndSendChanges();
|
||||
this.verifyPermissions( SecurityPermissions.BUILD, false );
|
||||
|
||||
if ( Platform.isServer() )
|
||||
if( Platform.isServer() )
|
||||
{
|
||||
this.PriorityValue = this.priHost.getPriority();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdate(String field, Object oldValue, Object newValue)
|
||||
public void onUpdate( String field, Object oldValue, Object newValue )
|
||||
{
|
||||
if ( field.equals( "PriorityValue" ) )
|
||||
if( field.equals( "PriorityValue" ) )
|
||||
{
|
||||
if ( this.textField != null )
|
||||
if( this.textField != null )
|
||||
this.textField.setText( String.valueOf( this.PriorityValue ) );
|
||||
}
|
||||
|
||||
|
||||
@@ -18,24 +18,26 @@
|
||||
|
||||
package appeng.container.implementations;
|
||||
|
||||
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
|
||||
import appeng.container.AEBaseContainer;
|
||||
import appeng.container.slot.SlotRestrictedInput;
|
||||
import appeng.tile.qnb.TileQuantumBridge;
|
||||
|
||||
|
||||
public class ContainerQNB extends AEBaseContainer
|
||||
{
|
||||
|
||||
final TileQuantumBridge quantumBridge;
|
||||
|
||||
public ContainerQNB(InventoryPlayer ip, TileQuantumBridge quantumBridge) {
|
||||
public ContainerQNB( InventoryPlayer ip, TileQuantumBridge quantumBridge )
|
||||
{
|
||||
super( ip, quantumBridge, null );
|
||||
this.quantumBridge = quantumBridge;
|
||||
|
||||
this.addSlotToContainer( (new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.QE_SINGULARITY, quantumBridge, 0, 80, 37, this.invPlayer )).setStackLimit( 1 ) );
|
||||
this.addSlotToContainer( ( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.QE_SINGULARITY, quantumBridge, 0, 80, 37, this.invPlayer ) ).setStackLimit( 1 ) );
|
||||
|
||||
this.bindPlayerInventory( ip, 0, 166 - /* height of player inventory */82 );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
package appeng.container.implementations;
|
||||
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
@@ -36,6 +37,7 @@ import appeng.tile.inventory.IAEAppEngInventory;
|
||||
import appeng.tile.inventory.InvOperation;
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
public class ContainerQuartzKnife extends AEBaseContainer implements IAEAppEngInventory, IInventory
|
||||
{
|
||||
|
||||
@@ -46,12 +48,8 @@ public class ContainerQuartzKnife extends AEBaseContainer implements IAEAppEngIn
|
||||
final QuartzKnifeOutput output;
|
||||
String myName = "";
|
||||
|
||||
public void setName(String value)
|
||||
public ContainerQuartzKnife( InventoryPlayer ip, QuartzKnifeObj te )
|
||||
{
|
||||
this.myName = value;
|
||||
}
|
||||
|
||||
public ContainerQuartzKnife(InventoryPlayer ip, QuartzKnifeObj te) {
|
||||
super( ip, null, null );
|
||||
this.toolInv = te;
|
||||
|
||||
@@ -63,16 +61,21 @@ public class ContainerQuartzKnife extends AEBaseContainer implements IAEAppEngIn
|
||||
this.bindPlayerInventory( ip, 0, 184 - /* height of player inventory */82 );
|
||||
}
|
||||
|
||||
public void setName( String value )
|
||||
{
|
||||
this.myName = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void detectAndSendChanges()
|
||||
{
|
||||
ItemStack currentItem = this.getPlayerInv().getCurrentItem();
|
||||
|
||||
if ( currentItem != this.toolInv.getItemStack() )
|
||||
if( currentItem != this.toolInv.getItemStack() )
|
||||
{
|
||||
if ( currentItem != null )
|
||||
if( currentItem != null )
|
||||
{
|
||||
if ( Platform.isSameItem( this.toolInv.getItemStack(), currentItem ) )
|
||||
if( Platform.isSameItem( this.toolInv.getItemStack(), currentItem ) )
|
||||
this.getPlayerInv().setInventorySlotContents( this.getPlayerInv().currentItem, this.toolInv.getItemStack() );
|
||||
else
|
||||
this.isContainerValid = false;
|
||||
@@ -85,9 +88,9 @@ public class ContainerQuartzKnife extends AEBaseContainer implements IAEAppEngIn
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onContainerClosed(EntityPlayer par1EntityPlayer)
|
||||
public void onContainerClosed( EntityPlayer par1EntityPlayer )
|
||||
{
|
||||
if ( this.inSlot.getStackInSlot( 0 ) != null )
|
||||
if( this.inSlot.getStackInSlot( 0 ) != null )
|
||||
par1EntityPlayer.dropPlayerItemWithRandomChoice( this.inSlot.getStackInSlot( 0 ), false );
|
||||
}
|
||||
|
||||
@@ -98,7 +101,7 @@ public class ContainerQuartzKnife extends AEBaseContainer implements IAEAppEngIn
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChangeInventory(IInventory inv, int slot, InvOperation mc, ItemStack removedStack, ItemStack newStack)
|
||||
public void onChangeInventory( IInventory inv, int slot, InvOperation mc, ItemStack removedStack, ItemStack newStack )
|
||||
{
|
||||
|
||||
}
|
||||
@@ -110,17 +113,17 @@ public class ContainerQuartzKnife extends AEBaseContainer implements IAEAppEngIn
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getStackInSlot(int var1)
|
||||
public ItemStack getStackInSlot( int var1 )
|
||||
{
|
||||
ItemStack input = this.inSlot.getStackInSlot( 0 );
|
||||
if ( input == null )
|
||||
if( input == null )
|
||||
return null;
|
||||
|
||||
if ( SlotRestrictedInput.isMetalIngot( input ) )
|
||||
if( SlotRestrictedInput.isMetalIngot( input ) )
|
||||
{
|
||||
if ( this.myName.length() > 0 )
|
||||
if( this.myName.length() > 0 )
|
||||
{
|
||||
for ( ItemStack namePressStack : AEApi.instance().definitions().materials().namePress().maybeStack( 1 ).asSet() )
|
||||
for( ItemStack namePressStack : AEApi.instance().definitions().materials().namePress().maybeStack( 1 ).asSet() )
|
||||
{
|
||||
final NBTTagCompound compound = Platform.openNbtData( namePressStack );
|
||||
compound.setString( "InscribeName", this.myName );
|
||||
@@ -134,12 +137,12 @@ public class ContainerQuartzKnife extends AEBaseContainer implements IAEAppEngIn
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack decrStackSize(int var1, int var2)
|
||||
public ItemStack decrStackSize( int var1, int var2 )
|
||||
{
|
||||
ItemStack is = this.getStackInSlot( 0 );
|
||||
if ( is != null )
|
||||
if( is != null )
|
||||
{
|
||||
if ( this.makePlate() )
|
||||
if( this.makePlate() )
|
||||
return is;
|
||||
}
|
||||
return null;
|
||||
@@ -147,12 +150,12 @@ public class ContainerQuartzKnife extends AEBaseContainer implements IAEAppEngIn
|
||||
|
||||
private boolean makePlate()
|
||||
{
|
||||
if ( this.inSlot.decrStackSize( 0, 1 ) != null )
|
||||
if( this.inSlot.decrStackSize( 0, 1 ) != null )
|
||||
{
|
||||
ItemStack item = this.toolInv.getItemStack();
|
||||
item.damageItem( 1, this.getPlayerInv().player );
|
||||
|
||||
if ( item.stackSize == 0 )
|
||||
if( item.stackSize == 0 )
|
||||
{
|
||||
this.getPlayerInv().mainInventory[this.getPlayerInv().currentItem] = null;
|
||||
MinecraftForge.EVENT_BUS.post( new PlayerDestroyItemEvent( this.getPlayerInv().player, item ) );
|
||||
@@ -164,15 +167,15 @@ public class ContainerQuartzKnife extends AEBaseContainer implements IAEAppEngIn
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getStackInSlotOnClosing(int var1)
|
||||
public ItemStack getStackInSlotOnClosing( int var1 )
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInventorySlotContents(int var1, ItemStack var2)
|
||||
public void setInventorySlotContents( int var1, ItemStack var2 )
|
||||
{
|
||||
if ( var2 == null && Platform.isServer() )
|
||||
if( var2 == null && Platform.isServer() )
|
||||
this.makePlate();
|
||||
}
|
||||
|
||||
@@ -201,7 +204,7 @@ public class ContainerQuartzKnife extends AEBaseContainer implements IAEAppEngIn
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUseableByPlayer(EntityPlayer var1)
|
||||
public boolean isUseableByPlayer( EntityPlayer var1 )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -219,9 +222,8 @@ public class ContainerQuartzKnife extends AEBaseContainer implements IAEAppEngIn
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isItemValidForSlot(int var1, ItemStack var2)
|
||||
public boolean isItemValidForSlot( int var1, ItemStack var2 )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -39,6 +39,7 @@ import appeng.tile.inventory.IAEAppEngInventory;
|
||||
import appeng.tile.inventory.InvOperation;
|
||||
import appeng.tile.misc.TileSecurity;
|
||||
|
||||
|
||||
public class ContainerSecurity extends ContainerMEMonitorable implements IAEAppEngInventory
|
||||
{
|
||||
|
||||
@@ -50,8 +51,11 @@ public class ContainerSecurity extends ContainerMEMonitorable implements IAEAppE
|
||||
final SlotOutput wirelessOut;
|
||||
|
||||
final TileSecurity securityBox;
|
||||
@GuiSync( 0 )
|
||||
public int security = 0;
|
||||
|
||||
public ContainerSecurity(InventoryPlayer ip, ITerminalHost monitorable) {
|
||||
public ContainerSecurity( InventoryPlayer ip, ITerminalHost monitorable )
|
||||
{
|
||||
super( ip, monitorable, false );
|
||||
|
||||
this.securityBox = (TileSecurity) monitorable;
|
||||
@@ -64,38 +68,23 @@ public class ContainerSecurity extends ContainerMEMonitorable implements IAEAppE
|
||||
this.bindPlayerInventory( ip, 0, 0 );
|
||||
}
|
||||
|
||||
@GuiSync(0)
|
||||
public int security = 0;
|
||||
|
||||
@Override
|
||||
public void onContainerClosed(EntityPlayer player)
|
||||
{
|
||||
super.onContainerClosed( player );
|
||||
|
||||
if ( this.wirelessIn.getHasStack() )
|
||||
player.dropPlayerItemWithRandomChoice( this.wirelessIn.getStack(), false );
|
||||
|
||||
if ( this.wirelessOut.getHasStack() )
|
||||
player.dropPlayerItemWithRandomChoice( this.wirelessOut.getStack(), false );
|
||||
}
|
||||
|
||||
public void toggleSetting(String value, EntityPlayer player)
|
||||
public void toggleSetting( String value, EntityPlayer player )
|
||||
{
|
||||
try
|
||||
{
|
||||
SecurityPermissions permission = SecurityPermissions.valueOf( value );
|
||||
|
||||
ItemStack a = this.configSlot.getStack();
|
||||
if ( a != null && a.getItem() instanceof IBiometricCard )
|
||||
if( a != null && a.getItem() instanceof IBiometricCard )
|
||||
{
|
||||
IBiometricCard bc = (IBiometricCard) a.getItem();
|
||||
if ( bc.hasPermission( a, permission ) )
|
||||
if( bc.hasPermission( a, permission ) )
|
||||
bc.removePermission( a, permission );
|
||||
else
|
||||
bc.addPermission( a, permission );
|
||||
}
|
||||
}
|
||||
catch (EnumConstantNotPresentException ex)
|
||||
catch( EnumConstantNotPresentException ex )
|
||||
{
|
||||
// :(
|
||||
}
|
||||
@@ -109,11 +98,11 @@ public class ContainerSecurity extends ContainerMEMonitorable implements IAEAppE
|
||||
this.security = 0;
|
||||
|
||||
ItemStack a = this.configSlot.getStack();
|
||||
if ( a != null && a.getItem() instanceof IBiometricCard )
|
||||
if( a != null && a.getItem() instanceof IBiometricCard )
|
||||
{
|
||||
IBiometricCard bc = (IBiometricCard) a.getItem();
|
||||
|
||||
for (SecurityPermissions sp : bc.getPermissions( a ))
|
||||
for( SecurityPermissions sp : bc.getPermissions( a ) )
|
||||
this.security |= ( 1 << sp.ordinal() );
|
||||
}
|
||||
|
||||
@@ -122,6 +111,18 @@ public class ContainerSecurity extends ContainerMEMonitorable implements IAEAppE
|
||||
super.detectAndSendChanges();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onContainerClosed( EntityPlayer player )
|
||||
{
|
||||
super.onContainerClosed( player );
|
||||
|
||||
if( this.wirelessIn.getHasStack() )
|
||||
player.dropPlayerItemWithRandomChoice( this.wirelessIn.getStack(), false );
|
||||
|
||||
if( this.wirelessOut.getHasStack() )
|
||||
player.dropPlayerItemWithRandomChoice( this.wirelessOut.getStack(), false );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveChanges()
|
||||
{
|
||||
@@ -129,23 +130,23 @@ public class ContainerSecurity extends ContainerMEMonitorable implements IAEAppE
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChangeInventory(IInventory inv, int slot, InvOperation mc, ItemStack removedStack, ItemStack newStack)
|
||||
public void onChangeInventory( IInventory inv, int slot, InvOperation mc, ItemStack removedStack, ItemStack newStack )
|
||||
{
|
||||
if ( !this.wirelessOut.getHasStack() )
|
||||
if( !this.wirelessOut.getHasStack() )
|
||||
{
|
||||
if ( this.wirelessIn.getHasStack() )
|
||||
if( this.wirelessIn.getHasStack() )
|
||||
{
|
||||
ItemStack term = this.wirelessIn.getStack().copy();
|
||||
INetworkEncodable networkEncodable = null;
|
||||
|
||||
if ( term.getItem() instanceof INetworkEncodable )
|
||||
if( term.getItem() instanceof INetworkEncodable )
|
||||
networkEncodable = (INetworkEncodable) term.getItem();
|
||||
|
||||
IWirelessTermHandler wTermHandler = AEApi.instance().registries().wireless().getWirelessTerminalHandler( term );
|
||||
if ( wTermHandler != null )
|
||||
if( wTermHandler != null )
|
||||
networkEncodable = wTermHandler;
|
||||
|
||||
if ( networkEncodable != null )
|
||||
if( networkEncodable != null )
|
||||
{
|
||||
networkEncodable.setEncryptionKey( term, String.valueOf( this.securityBox.securityKey ), "" );
|
||||
|
||||
@@ -153,14 +154,13 @@ public class ContainerSecurity extends ContainerMEMonitorable implements IAEAppE
|
||||
this.wirelessOut.putStack( term );
|
||||
|
||||
// update the two slots in question...
|
||||
for (Object crafter : this.crafters)
|
||||
for( Object crafter : this.crafters )
|
||||
{
|
||||
ICrafting icrafting = (ICrafting) crafter;
|
||||
icrafting.sendSlotContents( this, this.wirelessIn.slotNumber, this.wirelessIn.getStack() );
|
||||
icrafting.sendSlotContents( this, this.wirelessOut.slotNumber, this.wirelessOut.getStack() );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
package appeng.container.implementations;
|
||||
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
|
||||
@@ -27,19 +28,21 @@ import appeng.container.AEBaseContainer;
|
||||
import appeng.container.slot.SlotNormal;
|
||||
import appeng.tile.storage.TileSkyChest;
|
||||
|
||||
|
||||
@ChestContainer
|
||||
public class ContainerSkyChest extends AEBaseContainer
|
||||
{
|
||||
|
||||
final TileSkyChest chest;
|
||||
|
||||
public ContainerSkyChest(InventoryPlayer ip, TileSkyChest chest) {
|
||||
public ContainerSkyChest( InventoryPlayer ip, TileSkyChest chest )
|
||||
{
|
||||
super( ip, chest, null );
|
||||
this.chest = chest;
|
||||
|
||||
for (int y = 0; y < 4; y++)
|
||||
for( int y = 0; y < 4; y++ )
|
||||
{
|
||||
for (int x = 0; x < 9; x++)
|
||||
for( int x = 0; x < 9; x++ )
|
||||
{
|
||||
this.addSlotToContainer( new SlotNormal( this.chest, y * 9 + x, 8 + 18 * x, 24 + 18 * y ) );
|
||||
}
|
||||
@@ -51,7 +54,7 @@ public class ContainerSkyChest extends AEBaseContainer
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onContainerClosed(EntityPlayer par1EntityPlayer)
|
||||
public void onContainerClosed( EntityPlayer par1EntityPlayer )
|
||||
{
|
||||
super.onContainerClosed( par1EntityPlayer );
|
||||
this.chest.closeInventory();
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
package appeng.container.implementations;
|
||||
|
||||
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
@@ -32,29 +33,28 @@ import appeng.container.slot.SlotRestrictedInput;
|
||||
import appeng.tile.spatial.TileSpatialIOPort;
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
public class ContainerSpatialIOPort extends AEBaseContainer
|
||||
{
|
||||
|
||||
final TileSpatialIOPort spatialIOPort;
|
||||
|
||||
IGrid network;
|
||||
|
||||
@GuiSync(0)
|
||||
@GuiSync( 0 )
|
||||
public long currentPower;
|
||||
@GuiSync(1)
|
||||
@GuiSync( 1 )
|
||||
public long maxPower;
|
||||
@GuiSync(2)
|
||||
@GuiSync( 2 )
|
||||
public long reqPower;
|
||||
@GuiSync(3)
|
||||
@GuiSync( 3 )
|
||||
public long eff;
|
||||
|
||||
IGrid network;
|
||||
int delay = 40;
|
||||
|
||||
public ContainerSpatialIOPort(InventoryPlayer ip, TileSpatialIOPort spatialIOPort) {
|
||||
public ContainerSpatialIOPort( InventoryPlayer ip, TileSpatialIOPort spatialIOPort )
|
||||
{
|
||||
super( ip, spatialIOPort, null );
|
||||
this.spatialIOPort = spatialIOPort;
|
||||
|
||||
if ( Platform.isServer() )
|
||||
if( Platform.isServer() )
|
||||
this.network = spatialIOPort.getGridNode( ForgeDirection.UNKNOWN ).getGrid();
|
||||
|
||||
this.addSlotToContainer( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.SPATIAL_STORAGE_CELLS, spatialIOPort, 0, 52, 48, this.invPlayer ) );
|
||||
@@ -68,21 +68,21 @@ public class ContainerSpatialIOPort extends AEBaseContainer
|
||||
{
|
||||
this.verifyPermissions( SecurityPermissions.BUILD, false );
|
||||
|
||||
if ( Platform.isServer() )
|
||||
if( Platform.isServer() )
|
||||
{
|
||||
this.delay++;
|
||||
if ( this.delay > 15 && this.network != null )
|
||||
if( this.delay > 15 && this.network != null )
|
||||
{
|
||||
this.delay = 0;
|
||||
|
||||
IEnergyGrid eg = this.network.getCache( IEnergyGrid.class );
|
||||
ISpatialCache sc = this.network.getCache( ISpatialCache.class );
|
||||
if ( eg != null )
|
||||
if( eg != null )
|
||||
{
|
||||
this.currentPower = (long) (100.0 * eg.getStoredPower());
|
||||
this.maxPower = (long) (100.0 * eg.getMaxStoredPower());
|
||||
this.reqPower = (long) (100.0 * sc.requiredPower());
|
||||
this.eff = (long) (100.0f * sc.currentEfficiency());
|
||||
this.currentPower = (long) ( 100.0 * eg.getStoredPower() );
|
||||
this.maxPower = (long) ( 100.0 * eg.getMaxStoredPower() );
|
||||
this.reqPower = (long) ( 100.0 * sc.requiredPower() );
|
||||
this.eff = (long) ( 100.0f * sc.currentEfficiency() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,18 +43,20 @@ import appeng.parts.misc.PartStorageBus;
|
||||
import appeng.util.Platform;
|
||||
import appeng.util.iterators.NullIterator;
|
||||
|
||||
|
||||
public class ContainerStorageBus extends ContainerUpgradeable
|
||||
{
|
||||
|
||||
final PartStorageBus storageBus;
|
||||
|
||||
@GuiSync(3)
|
||||
@GuiSync( 3 )
|
||||
public AccessRestriction rwMode = AccessRestriction.READ_WRITE;
|
||||
|
||||
@GuiSync(4)
|
||||
@GuiSync( 4 )
|
||||
public StorageFilter storageFilter = StorageFilter.EXTRACTABLE_ONLY;
|
||||
|
||||
public ContainerStorageBus(InventoryPlayer ip, PartStorageBus te) {
|
||||
public ContainerStorageBus( InventoryPlayer ip, PartStorageBus te )
|
||||
{
|
||||
super( ip, te );
|
||||
this.storageBus = te;
|
||||
}
|
||||
@@ -66,9 +68,29 @@ public class ContainerStorageBus extends ContainerUpgradeable
|
||||
}
|
||||
|
||||
@Override
|
||||
public int availableUpgrades()
|
||||
protected void setupConfig()
|
||||
{
|
||||
return 5;
|
||||
int xo = 8;
|
||||
int yo = 23 + 6;
|
||||
|
||||
IInventory config = this.upgradeable.getInventoryByName( "config" );
|
||||
for( int y = 0; y < 7; y++ )
|
||||
{
|
||||
for( int x = 0; x < 9; x++ )
|
||||
{
|
||||
if( y < 2 )
|
||||
this.addSlotToContainer( new SlotFakeTypeOnly( config, y * 9 + x, xo + x * 18, yo + y * 18 ) );
|
||||
else
|
||||
this.addSlotToContainer( new OptionalSlotFakeTypeOnly( config, this, y * 9 + x, xo, yo, x, y, y - 2 ) );
|
||||
}
|
||||
}
|
||||
|
||||
IInventory upgrades = this.upgradeable.getInventoryByName( "upgrades" );
|
||||
this.addSlotToContainer( ( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 0, 187, 8, this.invPlayer ) ).setNotDraggable() );
|
||||
this.addSlotToContainer( ( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 1, 187, 8 + 18, this.invPlayer ) ).setNotDraggable() );
|
||||
this.addSlotToContainer( ( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 2, 187, 8 + 18 * 2, this.invPlayer ) ).setNotDraggable() );
|
||||
this.addSlotToContainer( ( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 3, 187, 8 + 18 * 3, this.invPlayer ) ).setNotDraggable() );
|
||||
this.addSlotToContainer( ( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 4, 187, 8 + 18 * 4, this.invPlayer ) ).setNotDraggable() );
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -78,37 +100,9 @@ public class ContainerStorageBus extends ContainerUpgradeable
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSlotEnabled(int idx)
|
||||
public int availableUpgrades()
|
||||
{
|
||||
int upgrades = this.upgradeable.getInstalledUpgrades( Upgrades.CAPACITY );
|
||||
|
||||
return upgrades > idx;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setupConfig()
|
||||
{
|
||||
int xo = 8;
|
||||
int yo = 23 + 6;
|
||||
|
||||
IInventory config = this.upgradeable.getInventoryByName( "config" );
|
||||
for (int y = 0; y < 7; y++)
|
||||
{
|
||||
for (int x = 0; x < 9; x++)
|
||||
{
|
||||
if ( y < 2 )
|
||||
this.addSlotToContainer( new SlotFakeTypeOnly( config, y * 9 + x, xo + x * 18, yo + y * 18 ) );
|
||||
else
|
||||
this.addSlotToContainer( new OptionalSlotFakeTypeOnly( config, this, y * 9 + x, xo, yo, x, y, y - 2 ) );
|
||||
}
|
||||
}
|
||||
|
||||
IInventory upgrades = this.upgradeable.getInventoryByName( "upgrades" );
|
||||
this.addSlotToContainer( (new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 0, 187, 8, this.invPlayer )).setNotDraggable() );
|
||||
this.addSlotToContainer( (new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 1, 187, 8 + 18, this.invPlayer )).setNotDraggable() );
|
||||
this.addSlotToContainer( (new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 2, 187, 8 + 18 * 2, this.invPlayer )).setNotDraggable() );
|
||||
this.addSlotToContainer( (new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 3, 187, 8 + 18 * 3, this.invPlayer )).setNotDraggable() );
|
||||
this.addSlotToContainer( (new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 4, 187, 8 + 18 * 4, this.invPlayer )).setNotDraggable() );
|
||||
return 5;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -116,7 +110,7 @@ public class ContainerStorageBus extends ContainerUpgradeable
|
||||
{
|
||||
this.verifyPermissions( SecurityPermissions.BUILD, false );
|
||||
|
||||
if ( Platform.isServer() )
|
||||
if( Platform.isServer() )
|
||||
{
|
||||
this.fzMode = (FuzzyMode) this.upgradeable.getConfigManager().getSetting( Settings.FUZZY_MODE );
|
||||
this.rwMode = (AccessRestriction) this.upgradeable.getConfigManager().getSetting( Settings.ACCESS );
|
||||
@@ -126,10 +120,18 @@ public class ContainerStorageBus extends ContainerUpgradeable
|
||||
this.standardDetectAndSendChanges();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSlotEnabled( int idx )
|
||||
{
|
||||
int upgrades = this.upgradeable.getInstalledUpgrades( Upgrades.CAPACITY );
|
||||
|
||||
return upgrades > idx;
|
||||
}
|
||||
|
||||
public void clear()
|
||||
{
|
||||
IInventory inv = this.upgradeable.getInventoryByName( "config" );
|
||||
for (int x = 0; x < inv.getSizeInventory(); x++)
|
||||
for( int x = 0; x < inv.getSizeInventory(); x++ )
|
||||
inv.setInventorySlotContents( x, null );
|
||||
this.detectAndSendChanges();
|
||||
}
|
||||
@@ -141,15 +143,15 @@ public class ContainerStorageBus extends ContainerUpgradeable
|
||||
IMEInventory<IAEItemStack> cellInv = this.storageBus.getInternalHandler();
|
||||
|
||||
Iterator<IAEItemStack> i = new NullIterator<IAEItemStack>();
|
||||
if ( cellInv != null )
|
||||
if( cellInv != null )
|
||||
{
|
||||
IItemList<IAEItemStack> list = cellInv.getAvailableItems( AEApi.instance().storage().createItemList() );
|
||||
i = list.iterator();
|
||||
}
|
||||
|
||||
for (int x = 0; x < inv.getSizeInventory(); x++)
|
||||
for( int x = 0; x < inv.getSizeInventory(); x++ )
|
||||
{
|
||||
if ( i.hasNext() && this.isSlotEnabled( (x / 9) - 2 ) )
|
||||
if( i.hasNext() && this.isSlotEnabled( ( x / 9 ) - 2 ) )
|
||||
{
|
||||
ItemStack g = i.next().getItemStack();
|
||||
g.stackSize = 1;
|
||||
@@ -161,5 +163,4 @@ public class ContainerStorageBus extends ContainerUpgradeable
|
||||
|
||||
this.detectAndSendChanges();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -46,16 +46,23 @@ import appeng.items.tools.ToolNetworkTool;
|
||||
import appeng.parts.automation.PartExportBus;
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
public class ContainerUpgradeable extends AEBaseContainer implements IOptionalSlotHost
|
||||
{
|
||||
|
||||
final IUpgradeableHost upgradeable;
|
||||
|
||||
@GuiSync( 0 )
|
||||
public RedstoneMode rsMode = RedstoneMode.IGNORE;
|
||||
@GuiSync( 1 )
|
||||
public FuzzyMode fzMode = FuzzyMode.IGNORE_ALL;
|
||||
@GuiSync( 5 )
|
||||
public YesNo cMode = YesNo.NO;
|
||||
int tbSlot;
|
||||
NetworkToolViewer tbInventory;
|
||||
|
||||
public ContainerUpgradeable(InventoryPlayer ip, IUpgradeableHost te) {
|
||||
super( ip, (TileEntity) (te instanceof TileEntity ? te : null), (IPart) (te instanceof IPart ? te : null) );
|
||||
public ContainerUpgradeable( InventoryPlayer ip, IUpgradeableHost te )
|
||||
{
|
||||
super( ip, (TileEntity) ( te instanceof TileEntity ? te : null ), (IPart) ( te instanceof IPart ? te : null ) );
|
||||
this.upgradeable = te;
|
||||
|
||||
World w = null;
|
||||
@@ -63,7 +70,7 @@ public class ContainerUpgradeable extends AEBaseContainer implements IOptionalSl
|
||||
int yCoord = 0;
|
||||
int zCoord = 0;
|
||||
|
||||
if ( te instanceof TileEntity )
|
||||
if( te instanceof TileEntity )
|
||||
{
|
||||
TileEntity myTile = (TileEntity) te;
|
||||
w = myTile.getWorldObj();
|
||||
@@ -72,7 +79,7 @@ public class ContainerUpgradeable extends AEBaseContainer implements IOptionalSl
|
||||
zCoord = myTile.zCoord;
|
||||
}
|
||||
|
||||
if ( te instanceof IPart )
|
||||
if( te instanceof IPart )
|
||||
{
|
||||
TileEntity mk = te.getTile();
|
||||
w = mk.getWorldObj();
|
||||
@@ -82,24 +89,23 @@ public class ContainerUpgradeable extends AEBaseContainer implements IOptionalSl
|
||||
}
|
||||
|
||||
IInventory pi = this.getPlayerInv();
|
||||
for (int x = 0; x < pi.getSizeInventory(); x++)
|
||||
for( int x = 0; x < pi.getSizeInventory(); x++ )
|
||||
{
|
||||
ItemStack pii = pi.getStackInSlot( x );
|
||||
if ( pii != null && pii.getItem() instanceof ToolNetworkTool )
|
||||
if( pii != null && pii.getItem() instanceof ToolNetworkTool )
|
||||
{
|
||||
this.lockPlayerInventorySlot( x );
|
||||
this.tbSlot = x;
|
||||
this.tbInventory = (NetworkToolViewer) ((ToolNetworkTool) pii.getItem()).getGuiObject( pii, w, xCoord, yCoord, zCoord );
|
||||
this.tbInventory = (NetworkToolViewer) ( (ToolNetworkTool) pii.getItem() ).getGuiObject( pii, w, xCoord, yCoord, zCoord );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( this.hasToolbox() )
|
||||
if( this.hasToolbox() )
|
||||
{
|
||||
for (int v = 0; v < 3; v++)
|
||||
for (int u = 0; u < 3; u++)
|
||||
this.addSlotToContainer( (new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, this.tbInventory, u + v * 3, 186 + u * 18, this.getHeight() - 82 + v * 18,
|
||||
this.invPlayer )).setPlayerSide() );
|
||||
for( int v = 0; v < 3; v++ )
|
||||
for( int u = 0; u < 3; u++ )
|
||||
this.addSlotToContainer( ( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, this.tbInventory, u + v * 3, 186 + u * 18, this.getHeight() - 82 + v * 18, this.invPlayer ) ).setPlayerSide() );
|
||||
}
|
||||
|
||||
this.setupConfig();
|
||||
@@ -107,17 +113,14 @@ public class ContainerUpgradeable extends AEBaseContainer implements IOptionalSl
|
||||
this.bindPlayerInventory( ip, 0, this.getHeight() - /* height of player inventory */82 );
|
||||
}
|
||||
|
||||
protected void setupUpgrades()
|
||||
public boolean hasToolbox()
|
||||
{
|
||||
IInventory upgrades = this.upgradeable.getInventoryByName( "upgrades" );
|
||||
if ( this.availableUpgrades() > 0 )
|
||||
this.addSlotToContainer( (new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 0, 187, 8, this.invPlayer )).setNotDraggable() );
|
||||
if ( this.availableUpgrades() > 1 )
|
||||
this.addSlotToContainer( (new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 1, 187, 8 + 18, this.invPlayer )).setNotDraggable() );
|
||||
if ( this.availableUpgrades() > 2 )
|
||||
this.addSlotToContainer( (new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 2, 187, 8 + 18 * 2, this.invPlayer )).setNotDraggable() );
|
||||
if ( this.availableUpgrades() > 3 )
|
||||
this.addSlotToContainer( (new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 3, 187, 8 + 18 * 3, this.invPlayer )).setNotDraggable() );
|
||||
return this.tbInventory != null;
|
||||
}
|
||||
|
||||
protected int getHeight()
|
||||
{
|
||||
return 184;
|
||||
}
|
||||
|
||||
protected void setupConfig()
|
||||
@@ -129,7 +132,7 @@ public class ContainerUpgradeable extends AEBaseContainer implements IOptionalSl
|
||||
IInventory inv = this.upgradeable.getInventoryByName( "config" );
|
||||
this.addSlotToContainer( new SlotFakeTypeOnly( inv, 0, x, y ) );
|
||||
|
||||
if ( this.supportCapacity() )
|
||||
if( this.supportCapacity() )
|
||||
{
|
||||
this.addSlotToContainer( new OptionalSlotFakeTypeOnly( inv, this, 1, x, y, -1, 0, 1 ) );
|
||||
this.addSlotToContainer( new OptionalSlotFakeTypeOnly( inv, this, 2, x, y, 1, 0, 1 ) );
|
||||
@@ -143,14 +146,17 @@ public class ContainerUpgradeable extends AEBaseContainer implements IOptionalSl
|
||||
}
|
||||
}
|
||||
|
||||
protected int getHeight()
|
||||
protected void setupUpgrades()
|
||||
{
|
||||
return 184;
|
||||
}
|
||||
|
||||
public int availableUpgrades()
|
||||
{
|
||||
return 4;
|
||||
IInventory upgrades = this.upgradeable.getInventoryByName( "upgrades" );
|
||||
if( this.availableUpgrades() > 0 )
|
||||
this.addSlotToContainer( ( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 0, 187, 8, this.invPlayer ) ).setNotDraggable() );
|
||||
if( this.availableUpgrades() > 1 )
|
||||
this.addSlotToContainer( ( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 1, 187, 8 + 18, this.invPlayer ) ).setNotDraggable() );
|
||||
if( this.availableUpgrades() > 2 )
|
||||
this.addSlotToContainer( ( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 2, 187, 8 + 18 * 2, this.invPlayer ) ).setNotDraggable() );
|
||||
if( this.availableUpgrades() > 3 )
|
||||
this.addSlotToContainer( ( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.UPGRADES, upgrades, 3, 187, 8 + 18 * 3, this.invPlayer ) ).setNotDraggable() );
|
||||
}
|
||||
|
||||
protected boolean supportCapacity()
|
||||
@@ -158,26 +164,56 @@ public class ContainerUpgradeable extends AEBaseContainer implements IOptionalSl
|
||||
return true;
|
||||
}
|
||||
|
||||
@GuiSync(0)
|
||||
public RedstoneMode rsMode = RedstoneMode.IGNORE;
|
||||
public int availableUpgrades()
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
|
||||
@GuiSync(1)
|
||||
public FuzzyMode fzMode = FuzzyMode.IGNORE_ALL;
|
||||
@Override
|
||||
public void detectAndSendChanges()
|
||||
{
|
||||
this.verifyPermissions( SecurityPermissions.BUILD, false );
|
||||
|
||||
@GuiSync(5)
|
||||
public YesNo cMode = YesNo.NO;
|
||||
if( Platform.isServer() )
|
||||
{
|
||||
IConfigManager cm = this.upgradeable.getConfigManager();
|
||||
this.loadSettingsFromHost( cm );
|
||||
}
|
||||
|
||||
this.checkToolbox();
|
||||
|
||||
for( Object o : this.inventorySlots )
|
||||
{
|
||||
if( o instanceof OptionalSlotFake )
|
||||
{
|
||||
OptionalSlotFake fs = (OptionalSlotFake) o;
|
||||
if( !fs.isEnabled() && fs.getDisplayStack() != null )
|
||||
fs.clearStack();
|
||||
}
|
||||
}
|
||||
|
||||
this.standardDetectAndSendChanges();
|
||||
}
|
||||
|
||||
protected void loadSettingsFromHost( IConfigManager cm )
|
||||
{
|
||||
this.fzMode = (FuzzyMode) cm.getSetting( Settings.FUZZY_MODE );
|
||||
this.rsMode = (RedstoneMode) cm.getSetting( Settings.REDSTONE_CONTROLLED );
|
||||
if( this.upgradeable instanceof PartExportBus )
|
||||
this.cMode = (YesNo) cm.getSetting( Settings.CRAFT_ONLY );
|
||||
}
|
||||
|
||||
public void checkToolbox()
|
||||
{
|
||||
if ( this.hasToolbox() )
|
||||
if( this.hasToolbox() )
|
||||
{
|
||||
ItemStack currentItem = this.getPlayerInv().getStackInSlot( this.tbSlot );
|
||||
|
||||
if ( currentItem != this.tbInventory.getItemStack() )
|
||||
if( currentItem != this.tbInventory.getItemStack() )
|
||||
{
|
||||
if ( currentItem != null )
|
||||
if( currentItem != null )
|
||||
{
|
||||
if ( Platform.isSameItem( this.tbInventory.getItemStack(), currentItem ) )
|
||||
if( Platform.isSameItem( this.tbInventory.getItemStack(), currentItem ) )
|
||||
this.getPlayerInv().setInventorySlotContents( this.tbSlot, this.tbInventory.getItemStack() );
|
||||
else
|
||||
this.isContainerValid = false;
|
||||
@@ -188,61 +224,21 @@ public class ContainerUpgradeable extends AEBaseContainer implements IOptionalSl
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void detectAndSendChanges()
|
||||
{
|
||||
this.verifyPermissions( SecurityPermissions.BUILD, false );
|
||||
|
||||
if ( Platform.isServer() )
|
||||
{
|
||||
IConfigManager cm = this.upgradeable.getConfigManager();
|
||||
this.loadSettingsFromHost( cm );
|
||||
}
|
||||
|
||||
this.checkToolbox();
|
||||
|
||||
for (Object o : this.inventorySlots)
|
||||
{
|
||||
if ( o instanceof OptionalSlotFake )
|
||||
{
|
||||
OptionalSlotFake fs = (OptionalSlotFake) o;
|
||||
if ( !fs.isEnabled() && fs.getDisplayStack() != null )
|
||||
fs.clearStack();
|
||||
}
|
||||
}
|
||||
|
||||
this.standardDetectAndSendChanges();
|
||||
}
|
||||
|
||||
protected void loadSettingsFromHost(IConfigManager cm)
|
||||
{
|
||||
this.fzMode = (FuzzyMode) cm.getSetting( Settings.FUZZY_MODE );
|
||||
this.rsMode = (RedstoneMode) cm.getSetting( Settings.REDSTONE_CONTROLLED );
|
||||
if ( this.upgradeable instanceof PartExportBus )
|
||||
this.cMode = (YesNo) cm.getSetting( Settings.CRAFT_ONLY );
|
||||
}
|
||||
|
||||
protected void standardDetectAndSendChanges()
|
||||
{
|
||||
super.detectAndSendChanges();
|
||||
}
|
||||
|
||||
public boolean hasToolbox()
|
||||
{
|
||||
return this.tbInventory != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSlotEnabled(int idx)
|
||||
public boolean isSlotEnabled( int idx )
|
||||
{
|
||||
int upgrades = this.upgradeable.getInstalledUpgrades( Upgrades.CAPACITY );
|
||||
|
||||
if ( idx == 1 && upgrades > 0 )
|
||||
if( idx == 1 && upgrades > 0 )
|
||||
return true;
|
||||
if ( idx == 2 && upgrades > 1 )
|
||||
if( idx == 2 && upgrades > 1 )
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
package appeng.container.implementations;
|
||||
|
||||
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
|
||||
import appeng.container.AEBaseContainer;
|
||||
@@ -27,13 +28,20 @@ import appeng.container.slot.SlotRestrictedInput;
|
||||
import appeng.tile.misc.TileVibrationChamber;
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
public class ContainerVibrationChamber extends AEBaseContainer implements IProgressProvider
|
||||
{
|
||||
|
||||
final TileVibrationChamber vibrationChamber;
|
||||
private static final int MAX_BURN_TIME = 200;
|
||||
public final int aePerTick = 5;
|
||||
final TileVibrationChamber vibrationChamber;
|
||||
@GuiSync( 0 )
|
||||
public int burnProgress = 0;
|
||||
@GuiSync( 1 )
|
||||
public int burnSpeed = 100;
|
||||
|
||||
public ContainerVibrationChamber(InventoryPlayer ip, TileVibrationChamber vibrationChamber) {
|
||||
public ContainerVibrationChamber( InventoryPlayer ip, TileVibrationChamber vibrationChamber )
|
||||
{
|
||||
super( ip, vibrationChamber, null );
|
||||
this.vibrationChamber = vibrationChamber;
|
||||
|
||||
@@ -42,20 +50,12 @@ public class ContainerVibrationChamber extends AEBaseContainer implements IProgr
|
||||
this.bindPlayerInventory( ip, 0, 166 - /* height of player inventory */82 );
|
||||
}
|
||||
|
||||
public final int aePerTick = 5;
|
||||
|
||||
@GuiSync(0)
|
||||
public int burnProgress = 0;
|
||||
|
||||
@GuiSync(1)
|
||||
public int burnSpeed = 100;
|
||||
|
||||
@Override
|
||||
public void detectAndSendChanges()
|
||||
{
|
||||
if ( Platform.isServer() )
|
||||
if( Platform.isServer() )
|
||||
{
|
||||
this.burnProgress = (int) (this.vibrationChamber.maxBurnTime <= 0 ? 0 : 12 * this.vibrationChamber.burnTime / this.vibrationChamber.maxBurnTime);
|
||||
this.burnProgress = (int) ( this.vibrationChamber.maxBurnTime <= 0 ? 0 : 12 * this.vibrationChamber.burnTime / this.vibrationChamber.maxBurnTime );
|
||||
this.burnSpeed = this.vibrationChamber.burnSpeed;
|
||||
}
|
||||
|
||||
@@ -73,5 +73,4 @@ public class ContainerVibrationChamber extends AEBaseContainer implements IProgr
|
||||
{
|
||||
return MAX_BURN_TIME;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
package appeng.container.implementations;
|
||||
|
||||
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
|
||||
import appeng.container.AEBaseContainer;
|
||||
@@ -26,20 +27,19 @@ import appeng.container.slot.SlotRestrictedInput;
|
||||
import appeng.core.AEConfig;
|
||||
import appeng.tile.networking.TileWireless;
|
||||
|
||||
|
||||
public class ContainerWireless extends AEBaseContainer
|
||||
{
|
||||
|
||||
final TileWireless wirelessTerminal;
|
||||
|
||||
@GuiSync(1)
|
||||
final SlotRestrictedInput boosterSlot;
|
||||
@GuiSync( 1 )
|
||||
public long range = 0;
|
||||
|
||||
@GuiSync(2)
|
||||
@GuiSync( 2 )
|
||||
public long drain = 0;
|
||||
|
||||
final SlotRestrictedInput boosterSlot;
|
||||
|
||||
public ContainerWireless(InventoryPlayer ip, TileWireless te) {
|
||||
public ContainerWireless( InventoryPlayer ip, TileWireless te )
|
||||
{
|
||||
super( ip, te, null );
|
||||
this.wirelessTerminal = te;
|
||||
|
||||
@@ -53,10 +53,9 @@ public class ContainerWireless extends AEBaseContainer
|
||||
{
|
||||
int boosters = this.boosterSlot.getStack() == null ? 0 : this.boosterSlot.getStack().stackSize;
|
||||
|
||||
this.range = (long) (10 * AEConfig.instance.wireless_getMaxRange( boosters ));
|
||||
this.drain = (long) (100 * AEConfig.instance.wireless_getPowerDrain( boosters ));
|
||||
this.range = (long) ( 10 * AEConfig.instance.wireless_getMaxRange( boosters ) );
|
||||
this.drain = (long) ( 100 * AEConfig.instance.wireless_getPowerDrain( boosters ) );
|
||||
|
||||
super.detectAndSendChanges();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
package appeng.container.implementations;
|
||||
|
||||
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
|
||||
import appeng.core.AEConfig;
|
||||
@@ -25,12 +26,14 @@ import appeng.core.localization.PlayerMessages;
|
||||
import appeng.helpers.WirelessTerminalGuiObject;
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
public class ContainerWirelessTerm extends ContainerMEPortableCell
|
||||
{
|
||||
|
||||
final WirelessTerminalGuiObject wirelessTerminalGUIObject;
|
||||
|
||||
public ContainerWirelessTerm(InventoryPlayer ip, WirelessTerminalGuiObject wirelessTerminalGUIObject) {
|
||||
public ContainerWirelessTerm( InventoryPlayer ip, WirelessTerminalGuiObject wirelessTerminalGUIObject )
|
||||
{
|
||||
super( ip, wirelessTerminalGUIObject );
|
||||
this.wirelessTerminalGUIObject = wirelessTerminalGUIObject;
|
||||
}
|
||||
@@ -40,9 +43,9 @@ public class ContainerWirelessTerm extends ContainerMEPortableCell
|
||||
{
|
||||
super.detectAndSendChanges();
|
||||
|
||||
if ( !this.wirelessTerminalGUIObject.rangeCheck() )
|
||||
if( !this.wirelessTerminalGUIObject.rangeCheck() )
|
||||
{
|
||||
if ( Platform.isServer() && this.isContainerValid )
|
||||
if( Platform.isServer() && this.isContainerValid )
|
||||
this.getPlayerInv().player.addChatMessage( PlayerMessages.OutOfRange.get() );
|
||||
|
||||
this.isContainerValid = false;
|
||||
|
||||
@@ -18,20 +18,21 @@
|
||||
|
||||
package appeng.container.implementations;
|
||||
|
||||
|
||||
import appeng.api.networking.crafting.ICraftingCPU;
|
||||
import appeng.util.ItemSorters;
|
||||
|
||||
|
||||
public class CraftingCPURecord implements Comparable<CraftingCPURecord>
|
||||
{
|
||||
|
||||
public final String myName;
|
||||
final ICraftingCPU cpu;
|
||||
|
||||
final long size;
|
||||
final int processors;
|
||||
|
||||
public final String myName;
|
||||
|
||||
public CraftingCPURecord(long size, int coProcessors, ICraftingCPU server) {
|
||||
public CraftingCPURecord( long size, int coProcessors, ICraftingCPU server )
|
||||
{
|
||||
this.size = size;
|
||||
this.processors = coProcessors;
|
||||
this.cpu = server;
|
||||
@@ -39,12 +40,11 @@ public class CraftingCPURecord implements Comparable<CraftingCPURecord>
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(CraftingCPURecord o)
|
||||
public int compareTo( CraftingCPURecord o )
|
||||
{
|
||||
int a = ItemSorters.compareLong( o.processors, this.processors );
|
||||
if ( a != 0 )
|
||||
if( a != 0 )
|
||||
return a;
|
||||
return ItemSorters.compareLong( o.size, this.size );
|
||||
}
|
||||
|
||||
}
|
||||
@@ -18,14 +18,15 @@
|
||||
|
||||
package appeng.container.interfaces;
|
||||
|
||||
|
||||
import appeng.client.gui.widgets.GuiProgressBar;
|
||||
|
||||
|
||||
/**
|
||||
* This interface provides the data for anything simulating a progress.
|
||||
*
|
||||
* Its main use is in combination with the {@link GuiProgressBar}, which ensures to scale it to a percentage of 0 to
|
||||
* 100.
|
||||
*
|
||||
*/
|
||||
public interface IProgressProvider
|
||||
{
|
||||
@@ -46,5 +47,4 @@ public interface IProgressProvider
|
||||
* @return An int representing the max progress
|
||||
*/
|
||||
int getMaxProgress();
|
||||
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
package appeng.container.slot;
|
||||
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.init.Items;
|
||||
@@ -33,13 +34,18 @@ import net.minecraftforge.event.entity.player.PlayerDestroyItemEvent;
|
||||
|
||||
import cpw.mods.fml.common.FMLCommonHandler;
|
||||
|
||||
|
||||
public class AppEngCraftingSlot extends AppEngSlot
|
||||
{
|
||||
|
||||
/** The craft matrix inventory linked to this result slot. */
|
||||
/**
|
||||
* The craft matrix inventory linked to this result slot.
|
||||
*/
|
||||
private final IInventory craftMatrix;
|
||||
|
||||
/** The player that is using the GUI where this slot resides. */
|
||||
/**
|
||||
* The player that is using the GUI where this slot resides.
|
||||
*/
|
||||
private final EntityPlayer thePlayer;
|
||||
|
||||
/**
|
||||
@@ -47,7 +53,8 @@ public class AppEngCraftingSlot extends AppEngSlot
|
||||
*/
|
||||
private int amountCrafted;
|
||||
|
||||
public AppEngCraftingSlot(EntityPlayer par1EntityPlayer, IInventory par2IInventory, IInventory par3IInventory, int par4, int par5, int par6) {
|
||||
public AppEngCraftingSlot( EntityPlayer par1EntityPlayer, IInventory par2IInventory, IInventory par3IInventory, int par4, int par5, int par6 )
|
||||
{
|
||||
super( par3IInventory, par4, par5, par6 );
|
||||
this.thePlayer = par1EntityPlayer;
|
||||
this.craftMatrix = par2IInventory;
|
||||
@@ -57,32 +64,17 @@ public class AppEngCraftingSlot extends AppEngSlot
|
||||
* Check if the stack is a valid item for this slot. Always true beside for the armor slots.
|
||||
*/
|
||||
@Override
|
||||
public boolean isItemValid(ItemStack par1ItemStack)
|
||||
public boolean isItemValid( ItemStack par1ItemStack )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Decrease the size of the stack in slot (first int arg) by the amount of the second int arg. Returns the new
|
||||
* stack.
|
||||
*/
|
||||
@Override
|
||||
public ItemStack decrStackSize(int par1)
|
||||
{
|
||||
if ( this.getHasStack() )
|
||||
{
|
||||
this.amountCrafted += Math.min( par1, this.getStack().stackSize );
|
||||
}
|
||||
|
||||
return super.decrStackSize( par1 );
|
||||
}
|
||||
|
||||
/**
|
||||
* the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood. Typically increases an
|
||||
* internal count then calls onCrafting(item).
|
||||
*/
|
||||
@Override
|
||||
protected void onCrafting(ItemStack par1ItemStack, int par2)
|
||||
protected void onCrafting( ItemStack par1ItemStack, int par2 )
|
||||
{
|
||||
this.amountCrafted += par2;
|
||||
this.onCrafting( par1ItemStack );
|
||||
@@ -92,90 +84,89 @@ public class AppEngCraftingSlot extends AppEngSlot
|
||||
* the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood.
|
||||
*/
|
||||
@Override
|
||||
protected void onCrafting(ItemStack par1ItemStack)
|
||||
protected void onCrafting( ItemStack par1ItemStack )
|
||||
{
|
||||
par1ItemStack.onCrafting( this.thePlayer.worldObj, this.thePlayer, this.amountCrafted );
|
||||
this.amountCrafted = 0;
|
||||
|
||||
if ( par1ItemStack.getItem() == Item.getItemFromBlock( Blocks.crafting_table ) )
|
||||
if( par1ItemStack.getItem() == Item.getItemFromBlock( Blocks.crafting_table ) )
|
||||
{
|
||||
this.thePlayer.addStat( AchievementList.buildWorkBench, 1 );
|
||||
}
|
||||
|
||||
if ( par1ItemStack.getItem() instanceof ItemPickaxe )
|
||||
if( par1ItemStack.getItem() instanceof ItemPickaxe )
|
||||
{
|
||||
this.thePlayer.addStat( AchievementList.buildPickaxe, 1 );
|
||||
}
|
||||
|
||||
if ( par1ItemStack.getItem() == Item.getItemFromBlock( Blocks.furnace ) )
|
||||
if( par1ItemStack.getItem() == Item.getItemFromBlock( Blocks.furnace ) )
|
||||
{
|
||||
this.thePlayer.addStat( AchievementList.buildFurnace, 1 );
|
||||
}
|
||||
|
||||
if ( par1ItemStack.getItem() instanceof ItemHoe )
|
||||
if( par1ItemStack.getItem() instanceof ItemHoe )
|
||||
{
|
||||
this.thePlayer.addStat( AchievementList.buildHoe, 1 );
|
||||
}
|
||||
|
||||
if ( par1ItemStack.getItem() == Items.bread )
|
||||
if( par1ItemStack.getItem() == Items.bread )
|
||||
{
|
||||
this.thePlayer.addStat( AchievementList.makeBread, 1 );
|
||||
}
|
||||
|
||||
if ( par1ItemStack.getItem() == Items.cake )
|
||||
if( par1ItemStack.getItem() == Items.cake )
|
||||
{
|
||||
this.thePlayer.addStat( AchievementList.bakeCake, 1 );
|
||||
}
|
||||
|
||||
if ( par1ItemStack.getItem() instanceof ItemPickaxe && ((ItemPickaxe) par1ItemStack.getItem()).func_150913_i() != Item.ToolMaterial.WOOD )
|
||||
if( par1ItemStack.getItem() instanceof ItemPickaxe && ( (ItemPickaxe) par1ItemStack.getItem() ).func_150913_i() != Item.ToolMaterial.WOOD )
|
||||
{
|
||||
this.thePlayer.addStat( AchievementList.buildBetterPickaxe, 1 );
|
||||
}
|
||||
|
||||
if ( par1ItemStack.getItem() instanceof ItemSword )
|
||||
if( par1ItemStack.getItem() instanceof ItemSword )
|
||||
{
|
||||
this.thePlayer.addStat( AchievementList.buildSword, 1 );
|
||||
}
|
||||
|
||||
if ( par1ItemStack.getItem() == Item.getItemFromBlock( Blocks.enchanting_table ) )
|
||||
if( par1ItemStack.getItem() == Item.getItemFromBlock( Blocks.enchanting_table ) )
|
||||
{
|
||||
this.thePlayer.addStat( AchievementList.enchantments, 1 );
|
||||
}
|
||||
|
||||
if ( par1ItemStack.getItem() == Item.getItemFromBlock( Blocks.bookshelf ) )
|
||||
if( par1ItemStack.getItem() == Item.getItemFromBlock( Blocks.bookshelf ) )
|
||||
{
|
||||
this.thePlayer.addStat( AchievementList.bookcase, 1 );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPickupFromSlot(EntityPlayer par1EntityPlayer, ItemStack par2ItemStack)
|
||||
public void onPickupFromSlot( EntityPlayer par1EntityPlayer, ItemStack par2ItemStack )
|
||||
{
|
||||
FMLCommonHandler.instance().firePlayerCraftingEvent( par1EntityPlayer, par2ItemStack, this.craftMatrix );
|
||||
this.onCrafting( par2ItemStack );
|
||||
|
||||
for (int i = 0; i < this.craftMatrix.getSizeInventory(); ++i)
|
||||
for( int i = 0; i < this.craftMatrix.getSizeInventory(); ++i )
|
||||
{
|
||||
ItemStack itemstack1 = this.craftMatrix.getStackInSlot( i );
|
||||
|
||||
if ( itemstack1 != null )
|
||||
if( itemstack1 != null )
|
||||
{
|
||||
this.craftMatrix.decrStackSize( i, 1 );
|
||||
|
||||
if ( itemstack1.getItem().hasContainerItem( itemstack1 ) )
|
||||
if( itemstack1.getItem().hasContainerItem( itemstack1 ) )
|
||||
{
|
||||
ItemStack itemstack2 = itemstack1.getItem().getContainerItem( itemstack1 );
|
||||
|
||||
if ( itemstack2 != null && itemstack2.isItemStackDamageable() && itemstack2.getItemDamage() > itemstack2.getMaxDamage() )
|
||||
if( itemstack2 != null && itemstack2.isItemStackDamageable() && itemstack2.getItemDamage() > itemstack2.getMaxDamage() )
|
||||
{
|
||||
MinecraftForge.EVENT_BUS.post( new PlayerDestroyItemEvent( this.thePlayer, itemstack2 ) );
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( !itemstack1.getItem().doesContainerItemLeaveCraftingGrid( itemstack1 )
|
||||
|| !this.thePlayer.inventory.addItemStackToInventory( itemstack2 ) )
|
||||
if( !itemstack1.getItem().doesContainerItemLeaveCraftingGrid( itemstack1 ) || !this.thePlayer.inventory.addItemStackToInventory( itemstack2 ) )
|
||||
{
|
||||
if ( this.craftMatrix.getStackInSlot( i ) == null )
|
||||
if( this.craftMatrix.getStackInSlot( i ) == null )
|
||||
{
|
||||
this.craftMatrix.setInventorySlotContents( i, itemstack2 );
|
||||
}
|
||||
@@ -188,4 +179,19 @@ public class AppEngCraftingSlot extends AppEngSlot
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Decrease the size of the stack in slot (first int arg) by the amount of the second int arg. Returns the new
|
||||
* stack.
|
||||
*/
|
||||
@Override
|
||||
public ItemStack decrStackSize( int par1 )
|
||||
{
|
||||
if( this.getHasStack() )
|
||||
{
|
||||
this.amountCrafted += Math.min( par1, this.getStack().stackSize );
|
||||
}
|
||||
|
||||
return super.decrStackSize( par1 );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
package appeng.container.slot;
|
||||
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.inventory.Slot;
|
||||
@@ -26,17 +27,26 @@ import net.minecraft.item.ItemStack;
|
||||
import appeng.container.AEBaseContainer;
|
||||
import appeng.tile.inventory.AppEngInternalInventory;
|
||||
|
||||
|
||||
public class AppEngSlot extends Slot
|
||||
{
|
||||
|
||||
public enum hasCalculatedValidness
|
||||
{
|
||||
NotAvailable, Valid, Invalid
|
||||
}
|
||||
|
||||
public final int defX;
|
||||
public final int defY;
|
||||
public boolean isDraggable = true;
|
||||
public boolean isPlayerSide = false;
|
||||
public AEBaseContainer myContainer = null;
|
||||
public int IIcon = -1;
|
||||
public hasCalculatedValidness isValid;
|
||||
public boolean isDisplay = false;
|
||||
|
||||
public AppEngSlot( IInventory inv, int idx, int x, int y )
|
||||
{
|
||||
super( inv, idx, x, y );
|
||||
this.defX = x;
|
||||
this.defY = y;
|
||||
this.isValid = hasCalculatedValidness.NotAvailable;
|
||||
}
|
||||
|
||||
public Slot setNotDraggable()
|
||||
{
|
||||
@@ -50,95 +60,76 @@ public class AppEngSlot extends Slot
|
||||
return this;
|
||||
}
|
||||
|
||||
public int IIcon = -1;
|
||||
public hasCalculatedValidness isValid;
|
||||
public final int defX;
|
||||
public final int defY;
|
||||
|
||||
@Override
|
||||
public boolean func_111238_b()
|
||||
{
|
||||
return this.isEnabled();
|
||||
}
|
||||
|
||||
public boolean isEnabled()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public String getTooltip()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSlotChanged()
|
||||
{
|
||||
if ( this.inventory instanceof AppEngInternalInventory )
|
||||
((AppEngInternalInventory) this.inventory).markDirty( this.getSlotIndex() );
|
||||
else
|
||||
super.onSlotChanged();
|
||||
|
||||
this.isValid = hasCalculatedValidness.NotAvailable;
|
||||
}
|
||||
|
||||
public AppEngSlot(IInventory inv, int idx, int x, int y) {
|
||||
super( inv, idx, x, y );
|
||||
this.defX = x;
|
||||
this.defY = y;
|
||||
this.isValid = hasCalculatedValidness.NotAvailable;
|
||||
}
|
||||
|
||||
public boolean isDisplay = false;
|
||||
|
||||
@Override
|
||||
public ItemStack getStack()
|
||||
{
|
||||
if ( !this.isEnabled() )
|
||||
return null;
|
||||
|
||||
if ( this.inventory.getSizeInventory() <= this.getSlotIndex() )
|
||||
return null;
|
||||
|
||||
if ( this.isDisplay )
|
||||
{
|
||||
this.isDisplay = false;
|
||||
return this.getDisplayStack();
|
||||
}
|
||||
return super.getStack();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void putStack(ItemStack par1ItemStack)
|
||||
{
|
||||
if ( this.isEnabled() )
|
||||
{
|
||||
super.putStack( par1ItemStack );
|
||||
|
||||
if ( this.myContainer != null )
|
||||
this.myContainer.onSlotChange( this );
|
||||
}
|
||||
}
|
||||
|
||||
public void clearStack()
|
||||
{
|
||||
super.putStack( null );
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canTakeStack(EntityPlayer par1EntityPlayer)
|
||||
public boolean isItemValid( ItemStack par1ItemStack )
|
||||
{
|
||||
if ( this.isEnabled() )
|
||||
if( this.isEnabled() )
|
||||
return super.isItemValid( par1ItemStack );
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getStack()
|
||||
{
|
||||
if( !this.isEnabled() )
|
||||
return null;
|
||||
|
||||
if( this.inventory.getSizeInventory() <= this.getSlotIndex() )
|
||||
return null;
|
||||
|
||||
if( this.isDisplay )
|
||||
{
|
||||
this.isDisplay = false;
|
||||
return this.getDisplayStack();
|
||||
}
|
||||
return super.getStack();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void putStack( ItemStack par1ItemStack )
|
||||
{
|
||||
if( this.isEnabled() )
|
||||
{
|
||||
super.putStack( par1ItemStack );
|
||||
|
||||
if( this.myContainer != null )
|
||||
this.myContainer.onSlotChange( this );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSlotChanged()
|
||||
{
|
||||
if( this.inventory instanceof AppEngInternalInventory )
|
||||
( (AppEngInternalInventory) this.inventory ).markDirty( this.getSlotIndex() );
|
||||
else
|
||||
super.onSlotChanged();
|
||||
|
||||
this.isValid = hasCalculatedValidness.NotAvailable;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canTakeStack( EntityPlayer par1EntityPlayer )
|
||||
{
|
||||
if( this.isEnabled() )
|
||||
return super.canTakeStack( par1EntityPlayer );
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isItemValid(ItemStack par1ItemStack)
|
||||
public boolean func_111238_b()
|
||||
{
|
||||
if ( this.isEnabled() )
|
||||
return super.isItemValid( par1ItemStack );
|
||||
return false;
|
||||
return this.isEnabled();
|
||||
}
|
||||
|
||||
public ItemStack getDisplayStack()
|
||||
@@ -146,6 +137,11 @@ public class AppEngSlot extends Slot
|
||||
return super.getStack();
|
||||
}
|
||||
|
||||
public boolean isEnabled()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public float getOpacityOfIcon()
|
||||
{
|
||||
return 0.4f;
|
||||
@@ -171,4 +167,8 @@ public class AppEngSlot extends Slot
|
||||
return this.isEnabled();
|
||||
}
|
||||
|
||||
public enum hasCalculatedValidness
|
||||
{
|
||||
NotAvailable, Valid, Invalid
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,9 +18,9 @@
|
||||
|
||||
package appeng.container.slot;
|
||||
|
||||
|
||||
public interface IOptionalSlotHost
|
||||
{
|
||||
|
||||
boolean isSlotEnabled(int idx);
|
||||
|
||||
boolean isSlotEnabled( int idx );
|
||||
}
|
||||
|
||||
@@ -18,32 +18,35 @@
|
||||
|
||||
package appeng.container.slot;
|
||||
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
|
||||
public class NullSlot extends Slot
|
||||
{
|
||||
|
||||
public NullSlot() {
|
||||
public NullSlot()
|
||||
{
|
||||
super( null, 0, 0, 0 );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSlotChange(ItemStack par1ItemStack, ItemStack par2ItemStack)
|
||||
public void onSlotChange( ItemStack par1ItemStack, ItemStack par2ItemStack )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPickupFromSlot(EntityPlayer par1EntityPlayer, ItemStack par2ItemStack)
|
||||
public void onPickupFromSlot( EntityPlayer par1EntityPlayer, ItemStack par2ItemStack )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isItemValid(ItemStack par1ItemStack)
|
||||
public boolean isItemValid( ItemStack par1ItemStack )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -55,7 +58,7 @@ public class NullSlot extends Slot
|
||||
}
|
||||
|
||||
@Override
|
||||
public void putStack(ItemStack par1ItemStack)
|
||||
public void putStack( ItemStack par1ItemStack )
|
||||
{
|
||||
|
||||
}
|
||||
@@ -73,19 +76,19 @@ public class NullSlot extends Slot
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack decrStackSize(int par1)
|
||||
public ItemStack decrStackSize( int par1 )
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSlotInInventory(IInventory par1IInventory, int par2)
|
||||
public boolean isSlotInInventory( IInventory par1IInventory, int par2 )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canTakeStack(EntityPlayer par1EntityPlayer)
|
||||
public boolean canTakeStack( EntityPlayer par1EntityPlayer )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -18,22 +18,23 @@
|
||||
|
||||
package appeng.container.slot;
|
||||
|
||||
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
|
||||
public class OptionalSlotFake extends SlotFake
|
||||
{
|
||||
|
||||
public final int srcX;
|
||||
public final int srcY;
|
||||
final int invSlot;
|
||||
final int groupNum;
|
||||
final IOptionalSlotHost host;
|
||||
|
||||
public boolean renderDisabled = true;
|
||||
|
||||
public final int srcX;
|
||||
public final int srcY;
|
||||
|
||||
public OptionalSlotFake(IInventory inv, IOptionalSlotHost containerBus, int idx, int x, int y, int offX, int offY, int groupNum) {
|
||||
public OptionalSlotFake( IInventory inv, IOptionalSlotHost containerBus, int idx, int x, int y, int offX, int offY, int groupNum )
|
||||
{
|
||||
super( inv, idx, x + offX * 18, y + offY * 18 );
|
||||
this.srcX = x;
|
||||
this.srcY = y;
|
||||
@@ -45,9 +46,9 @@ public class OptionalSlotFake extends SlotFake
|
||||
@Override
|
||||
public ItemStack getStack()
|
||||
{
|
||||
if ( !this.isEnabled() )
|
||||
if( !this.isEnabled() )
|
||||
{
|
||||
if ( this.getDisplayStack() != null )
|
||||
if( this.getDisplayStack() != null )
|
||||
this.clearStack();
|
||||
}
|
||||
|
||||
@@ -57,7 +58,7 @@ public class OptionalSlotFake extends SlotFake
|
||||
@Override
|
||||
public boolean isEnabled()
|
||||
{
|
||||
if ( this.host == null )
|
||||
if( this.host == null )
|
||||
return false;
|
||||
|
||||
return this.host.isSlotEnabled( this.groupNum );
|
||||
@@ -67,5 +68,4 @@ public class OptionalSlotFake extends SlotFake
|
||||
{
|
||||
return this.renderDisabled;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,25 +18,28 @@
|
||||
|
||||
package appeng.container.slot;
|
||||
|
||||
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
|
||||
public class OptionalSlotFakeTypeOnly extends OptionalSlotFake
|
||||
{
|
||||
|
||||
public OptionalSlotFakeTypeOnly(IInventory inv, IOptionalSlotHost containerBus, int idx, int x, int y, int offX, int offY, int groupNum) {
|
||||
public OptionalSlotFakeTypeOnly( IInventory inv, IOptionalSlotHost containerBus, int idx, int x, int y, int offX, int offY, int groupNum )
|
||||
{
|
||||
super( inv, containerBus, idx, x, y, offX, offY, groupNum );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void putStack(ItemStack is)
|
||||
public void putStack( ItemStack is )
|
||||
{
|
||||
if ( is != null )
|
||||
if( is != null )
|
||||
{
|
||||
is = is.copy();
|
||||
if ( is.stackSize > 1 )
|
||||
if( is.stackSize > 1 )
|
||||
is.stackSize = 1;
|
||||
else if ( is.stackSize < -1 )
|
||||
else if( is.stackSize < -1 )
|
||||
is.stackSize = -1;
|
||||
}
|
||||
|
||||
|
||||
@@ -18,15 +18,18 @@
|
||||
|
||||
package appeng.container.slot;
|
||||
|
||||
|
||||
import net.minecraft.inventory.IInventory;
|
||||
|
||||
|
||||
public class OptionalSlotNormal extends AppEngSlot
|
||||
{
|
||||
|
||||
final int groupNum;
|
||||
final IOptionalSlotHost host;
|
||||
|
||||
public OptionalSlotNormal(IInventory inv, IOptionalSlotHost containerBus, int slot, int xPos, int yPos, int groupNum) {
|
||||
public OptionalSlotNormal( IInventory inv, IOptionalSlotHost containerBus, int slot, int xPos, int yPos, int groupNum )
|
||||
{
|
||||
super( inv, slot, xPos, yPos );
|
||||
this.groupNum = groupNum;
|
||||
this.host = containerBus;
|
||||
@@ -35,10 +38,9 @@ public class OptionalSlotNormal extends AppEngSlot
|
||||
@Override
|
||||
public boolean isEnabled()
|
||||
{
|
||||
if ( this.host == null )
|
||||
if( this.host == null )
|
||||
return false;
|
||||
|
||||
return this.host.isSlotEnabled( this.groupNum );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,17 +18,19 @@
|
||||
|
||||
package appeng.container.slot;
|
||||
|
||||
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
|
||||
|
||||
public class OptionalSlotRestrictedInput extends SlotRestrictedInput
|
||||
{
|
||||
|
||||
final int groupNum;
|
||||
final IOptionalSlotHost host;
|
||||
|
||||
public OptionalSlotRestrictedInput(PlacableItemType valid, IInventory i, IOptionalSlotHost host, int slotIndex, int x, int y, int grpNum,
|
||||
InventoryPlayer invPlayer) {
|
||||
public OptionalSlotRestrictedInput( PlacableItemType valid, IInventory i, IOptionalSlotHost host, int slotIndex, int x, int y, int grpNum, InventoryPlayer invPlayer )
|
||||
{
|
||||
super( valid, i, slotIndex, x, y, invPlayer );
|
||||
this.groupNum = grpNum;
|
||||
this.host = host;
|
||||
@@ -37,10 +39,9 @@ public class OptionalSlotRestrictedInput extends SlotRestrictedInput
|
||||
@Override
|
||||
public boolean isEnabled()
|
||||
{
|
||||
if ( this.host == null )
|
||||
if( this.host == null )
|
||||
return false;
|
||||
|
||||
return this.host.isSlotEnabled( this.groupNum );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,13 +18,15 @@
|
||||
|
||||
package appeng.container.slot;
|
||||
|
||||
|
||||
import net.minecraft.inventory.IInventory;
|
||||
|
||||
|
||||
public class QuartzKnifeOutput extends SlotOutput
|
||||
{
|
||||
|
||||
public QuartzKnifeOutput(IInventory a, int b, int c, int d, int i) {
|
||||
public QuartzKnifeOutput( IInventory a, int b, int c, int d, int i )
|
||||
{
|
||||
super( a, b, c, d, i );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,26 +18,23 @@
|
||||
|
||||
package appeng.container.slot;
|
||||
|
||||
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
|
||||
public class SlotCraftingMatrix extends AppEngSlot
|
||||
{
|
||||
|
||||
final Container c;
|
||||
|
||||
public SlotCraftingMatrix(Container c, IInventory par1iInventory, int par2, int par3, int par4) {
|
||||
public SlotCraftingMatrix( Container c, IInventory par1iInventory, int par2, int par3, int par4 )
|
||||
{
|
||||
super( par1iInventory, par2, par3, par4 );
|
||||
this.c = c;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPlayerSide()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearStack()
|
||||
{
|
||||
@@ -46,18 +43,23 @@ public class SlotCraftingMatrix extends AppEngSlot
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack decrStackSize(int par1)
|
||||
{
|
||||
ItemStack is = super.decrStackSize( par1 );
|
||||
this.c.onCraftMatrixChanged( this.inventory );
|
||||
return is;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void putStack(ItemStack par1ItemStack)
|
||||
public void putStack( ItemStack par1ItemStack )
|
||||
{
|
||||
super.putStack( par1ItemStack );
|
||||
this.c.onCraftMatrixChanged( this.inventory );
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPlayerSide()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack decrStackSize( int par1 )
|
||||
{
|
||||
ItemStack is = super.decrStackSize( par1 );
|
||||
this.c.onCraftMatrixChanged( this.inventory );
|
||||
return is;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
/*
|
||||
* This file is part of Applied Energistics 2.
|
||||
* Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved.
|
||||
@@ -58,8 +57,7 @@ public class SlotCraftingTerm extends AppEngCraftingSlot
|
||||
private final IStorageMonitorable storage;
|
||||
private final IContainerCraftingPacket container;
|
||||
|
||||
public SlotCraftingTerm( EntityPlayer player, BaseActionSource mySrc, IEnergySource energySrc, IStorageMonitorable storage, IInventory cMatrix,
|
||||
IInventory secondMatrix, IInventory output, int x, int y, IContainerCraftingPacket ccp )
|
||||
public SlotCraftingTerm( EntityPlayer player, BaseActionSource mySrc, IEnergySource energySrc, IStorageMonitorable storage, IInventory cMatrix, IInventory secondMatrix, IInventory output, int x, int y, IContainerCraftingPacket ccp )
|
||||
{
|
||||
super( player, cMatrix, output, 0, x, y );
|
||||
this.energySrc = energySrc;
|
||||
@@ -83,11 +81,67 @@ public class SlotCraftingTerm extends AppEngCraftingSlot
|
||||
|
||||
@Override
|
||||
public void onPickupFromSlot( EntityPlayer p, ItemStack is )
|
||||
{}
|
||||
|
||||
public void makeItem( EntityPlayer p, ItemStack is )
|
||||
{
|
||||
super.onPickupFromSlot( p, is );
|
||||
}
|
||||
|
||||
public void doClick( InventoryAction action, EntityPlayer who )
|
||||
{
|
||||
if( this.getStack() == null )
|
||||
return;
|
||||
if( Platform.isClient() )
|
||||
return;
|
||||
|
||||
IMEMonitor<IAEItemStack> inv = this.storage.getItemInventory();
|
||||
int howManyPerCraft = this.getStack().stackSize;
|
||||
int maxTimesToCraft = 0;
|
||||
|
||||
InventoryAdaptor ia = null;
|
||||
if( action == InventoryAction.CRAFT_SHIFT ) // craft into player inventory...
|
||||
{
|
||||
ia = InventoryAdaptor.getAdaptor( who, null );
|
||||
maxTimesToCraft = (int) Math.floor( (double) this.getStack().getMaxStackSize() / (double) howManyPerCraft );
|
||||
}
|
||||
else if( action == InventoryAction.CRAFT_STACK ) // craft into hand, full stack
|
||||
{
|
||||
ia = new AdaptorPlayerHand( who );
|
||||
maxTimesToCraft = (int) Math.floor( (double) this.getStack().getMaxStackSize() / (double) howManyPerCraft );
|
||||
}
|
||||
else
|
||||
// pick up what was crafted...
|
||||
{
|
||||
ia = new AdaptorPlayerHand( who );
|
||||
maxTimesToCraft = 1;
|
||||
}
|
||||
|
||||
maxTimesToCraft = this.CapCraftingAttempts( maxTimesToCraft );
|
||||
|
||||
if( ia == null )
|
||||
return;
|
||||
|
||||
ItemStack rs = Platform.cloneItemStack( this.getStack() );
|
||||
if( rs == null )
|
||||
return;
|
||||
|
||||
for( int x = 0; x < maxTimesToCraft; x++ )
|
||||
{
|
||||
if( ia.simulateAdd( rs ) == null )
|
||||
{
|
||||
IItemList<IAEItemStack> all = inv.getStorageList();
|
||||
ItemStack extra = ia.addItems( this.craftItem( who, rs, inv, all ) );
|
||||
if( extra != null )
|
||||
{
|
||||
List<ItemStack> drops = new ArrayList<ItemStack>();
|
||||
drops.add( extra );
|
||||
Platform.spawnDrops( who.worldObj, (int) who.posX, (int) who.posY, (int) who.posZ, drops );
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected int CapCraftingAttempts( int maxTimesToCraft )
|
||||
{
|
||||
return maxTimesToCraft;
|
||||
}
|
||||
|
||||
public ItemStack craftItem( EntityPlayer p, ItemStack request, IMEMonitor<IAEItemStack> inv, IItemList all )
|
||||
@@ -95,34 +149,34 @@ public class SlotCraftingTerm extends AppEngCraftingSlot
|
||||
// update crafting matrix...
|
||||
ItemStack is = this.getStack();
|
||||
|
||||
if ( is != null && Platform.isSameItem( request, is ) )
|
||||
if( is != null && Platform.isSameItem( request, is ) )
|
||||
{
|
||||
ItemStack[] set = new ItemStack[this.pattern.getSizeInventory()];
|
||||
|
||||
// add one of each item to the items on the board...
|
||||
if ( Platform.isServer() )
|
||||
if( Platform.isServer() )
|
||||
{
|
||||
InventoryCrafting ic = new InventoryCrafting( new ContainerNull(), 3, 3 );
|
||||
for ( int x = 0; x < 9; x++ )
|
||||
for( int x = 0; x < 9; x++ )
|
||||
ic.setInventorySlotContents( x, this.pattern.getStackInSlot( x ) );
|
||||
|
||||
IRecipe r = Platform.findMatchingRecipe( ic, p.worldObj );
|
||||
|
||||
if ( r == null )
|
||||
if( r == null )
|
||||
{
|
||||
Item target = request.getItem();
|
||||
if ( target.isDamageable() && target.isRepairable() )
|
||||
if( target.isDamageable() && target.isRepairable() )
|
||||
{
|
||||
boolean isBad = false;
|
||||
for ( int x = 0; x < ic.getSizeInventory(); x++ )
|
||||
for( int x = 0; x < ic.getSizeInventory(); x++ )
|
||||
{
|
||||
ItemStack pis = ic.getStackInSlot( x );
|
||||
if ( pis == null )
|
||||
if( pis == null )
|
||||
continue;
|
||||
if ( pis.getItem() != target )
|
||||
if( pis.getItem() != target )
|
||||
isBad = true;
|
||||
}
|
||||
if ( !isBad )
|
||||
if( !isBad )
|
||||
{
|
||||
super.onPickupFromSlot( p, is );
|
||||
// actually necessary to cleanup this case...
|
||||
@@ -135,21 +189,20 @@ public class SlotCraftingTerm extends AppEngCraftingSlot
|
||||
|
||||
is = r.getCraftingResult( ic );
|
||||
|
||||
if ( inv != null )
|
||||
if( inv != null )
|
||||
{
|
||||
for ( int x = 0; x < this.pattern.getSizeInventory(); x++ )
|
||||
for( int x = 0; x < this.pattern.getSizeInventory(); x++ )
|
||||
{
|
||||
if ( this.pattern.getStackInSlot( x ) != null )
|
||||
if( this.pattern.getStackInSlot( x ) != null )
|
||||
{
|
||||
set[x] = Platform.extractItemsByRecipe( this.energySrc, this.mySrc, inv, p.worldObj, r, is, ic, this.pattern.getStackInSlot( x ), x, all,
|
||||
Actionable.MODULATE, ItemViewCell.createFilter( this.container.getViewCells() ) );
|
||||
set[x] = Platform.extractItemsByRecipe( this.energySrc, this.mySrc, inv, p.worldObj, r, is, ic, this.pattern.getStackInSlot( x ), x, all, Actionable.MODULATE, ItemViewCell.createFilter( this.container.getViewCells() ) );
|
||||
ic.setInventorySlotContents( x, set[x] );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( this.preCraft( p, inv, set, is ) )
|
||||
if( this.preCraft( p, inv, set, is ) )
|
||||
{
|
||||
this.makeItem( p, is );
|
||||
|
||||
@@ -170,92 +223,36 @@ public class SlotCraftingTerm extends AppEngCraftingSlot
|
||||
return true;
|
||||
}
|
||||
|
||||
public void makeItem( EntityPlayer p, ItemStack is )
|
||||
{
|
||||
super.onPickupFromSlot( p, is );
|
||||
}
|
||||
|
||||
public void postCraft( EntityPlayer p, IMEMonitor<IAEItemStack> inv, ItemStack[] set, ItemStack result )
|
||||
{
|
||||
List<ItemStack> drops = new ArrayList<ItemStack>();
|
||||
|
||||
// add one of each item to the items on the board...
|
||||
if ( Platform.isServer() )
|
||||
if( Platform.isServer() )
|
||||
{
|
||||
// set new items onto the crafting table...
|
||||
for ( int x = 0; x < this.craftInv.getSizeInventory(); x++ )
|
||||
for( int x = 0; x < this.craftInv.getSizeInventory(); x++ )
|
||||
{
|
||||
if ( this.craftInv.getStackInSlot( x ) == null )
|
||||
if( this.craftInv.getStackInSlot( x ) == null )
|
||||
{
|
||||
this.craftInv.setInventorySlotContents( x, set[x] );
|
||||
}
|
||||
else if ( set[x] != null )
|
||||
else if( set[x] != null )
|
||||
{
|
||||
// eek! put it back!
|
||||
IAEItemStack fail = inv.injectItems( AEItemStack.create( set[x] ), Actionable.MODULATE, this.mySrc );
|
||||
if ( fail != null )
|
||||
if( fail != null )
|
||||
drops.add( fail.getItemStack() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( drops.size() > 0 )
|
||||
Platform.spawnDrops( p.worldObj, ( int ) p.posX, ( int ) p.posY, ( int ) p.posZ, drops );
|
||||
if( drops.size() > 0 )
|
||||
Platform.spawnDrops( p.worldObj, (int) p.posX, (int) p.posY, (int) p.posZ, drops );
|
||||
}
|
||||
|
||||
public void doClick( InventoryAction action, EntityPlayer who )
|
||||
{
|
||||
if ( this.getStack() == null )
|
||||
return;
|
||||
if ( Platform.isClient() )
|
||||
return;
|
||||
|
||||
IMEMonitor<IAEItemStack> inv = this.storage.getItemInventory();
|
||||
int howManyPerCraft = this.getStack().stackSize;
|
||||
int maxTimesToCraft = 0;
|
||||
|
||||
InventoryAdaptor ia = null;
|
||||
if ( action == InventoryAction.CRAFT_SHIFT ) // craft into player inventory...
|
||||
{
|
||||
ia = InventoryAdaptor.getAdaptor( who, null );
|
||||
maxTimesToCraft = ( int ) Math.floor( ( double ) this.getStack().getMaxStackSize() / ( double ) howManyPerCraft );
|
||||
}
|
||||
else if ( action == InventoryAction.CRAFT_STACK ) // craft into hand, full stack
|
||||
{
|
||||
ia = new AdaptorPlayerHand( who );
|
||||
maxTimesToCraft = ( int ) Math.floor( ( double ) this.getStack().getMaxStackSize() / ( double ) howManyPerCraft );
|
||||
}
|
||||
else
|
||||
// pick up what was crafted...
|
||||
{
|
||||
ia = new AdaptorPlayerHand( who );
|
||||
maxTimesToCraft = 1;
|
||||
}
|
||||
|
||||
maxTimesToCraft = this.CapCraftingAttempts( maxTimesToCraft );
|
||||
|
||||
if ( ia == null )
|
||||
return;
|
||||
|
||||
ItemStack rs = Platform.cloneItemStack( this.getStack() );
|
||||
if ( rs == null )
|
||||
return;
|
||||
|
||||
for ( int x = 0; x < maxTimesToCraft; x++ )
|
||||
{
|
||||
if ( ia.simulateAdd( rs ) == null )
|
||||
{
|
||||
IItemList<IAEItemStack> all = inv.getStorageList();
|
||||
ItemStack extra = ia.addItems( this.craftItem( who, rs, inv, all ) );
|
||||
if ( extra != null )
|
||||
{
|
||||
List<ItemStack> drops = new ArrayList<ItemStack>();
|
||||
drops.add( extra );
|
||||
Platform.spawnDrops( who.worldObj, ( int ) who.posX, ( int ) who.posY, ( int ) who.posZ, drops );
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected int CapCraftingAttempts( int maxTimesToCraft )
|
||||
{
|
||||
return maxTimesToCraft;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,25 +18,28 @@
|
||||
|
||||
package appeng.container.slot;
|
||||
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
|
||||
public class SlotDisabled extends AppEngSlot
|
||||
{
|
||||
|
||||
public SlotDisabled(IInventory par1iInventory, int slotIndex, int x, int y) {
|
||||
public SlotDisabled( IInventory par1iInventory, int slotIndex, int x, int y )
|
||||
{
|
||||
super( par1iInventory, slotIndex, x, y );
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isItemValid(ItemStack par1ItemStack)
|
||||
public boolean isItemValid( ItemStack par1ItemStack )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canTakeStack(EntityPlayer par1EntityPlayer)
|
||||
public boolean canTakeStack( EntityPlayer par1EntityPlayer )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -18,50 +18,52 @@
|
||||
|
||||
package appeng.container.slot;
|
||||
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
|
||||
public class SlotFake extends AppEngSlot
|
||||
{
|
||||
|
||||
final int invSlot;
|
||||
|
||||
public SlotFake(IInventory inv, int idx, int x, int y) {
|
||||
public SlotFake( IInventory inv, int idx, int x, int y )
|
||||
{
|
||||
super( inv, idx, x, y );
|
||||
this.invSlot = idx;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canTakeStack(EntityPlayer par1EntityPlayer)
|
||||
public void onPickupFromSlot( EntityPlayer par1EntityPlayer, ItemStack par2ItemStack )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack decrStackSize(int par1)
|
||||
public ItemStack decrStackSize( int par1 )
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPickupFromSlot(EntityPlayer par1EntityPlayer, ItemStack par2ItemStack)
|
||||
public boolean isItemValid( ItemStack par1ItemStack )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void putStack(ItemStack is)
|
||||
public void putStack( ItemStack is )
|
||||
{
|
||||
if ( is != null )
|
||||
if( is != null )
|
||||
is = is.copy();
|
||||
|
||||
super.putStack( is );
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isItemValid(ItemStack par1ItemStack)
|
||||
public boolean canTakeStack( EntityPlayer par1EntityPlayer )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,19 +18,16 @@
|
||||
|
||||
package appeng.container.slot;
|
||||
|
||||
|
||||
import net.minecraft.inventory.IInventory;
|
||||
|
||||
|
||||
public class SlotFakeBlacklist extends SlotFakeTypeOnly
|
||||
{
|
||||
|
||||
public SlotFakeBlacklist(IInventory inv, int idx, int x, int y) {
|
||||
super( inv, idx, x, y );
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderIconWithItem()
|
||||
public SlotFakeBlacklist( IInventory inv, int idx, int x, int y )
|
||||
{
|
||||
return true;
|
||||
super( inv, idx, x, y );
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -39,14 +36,19 @@ public class SlotFakeBlacklist extends SlotFakeTypeOnly
|
||||
return 0.8f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderIconWithItem()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getIcon()
|
||||
{
|
||||
if ( this.getHasStack() )
|
||||
if( this.getHasStack() )
|
||||
{
|
||||
return this.getStack().stackSize > 0 ? 16 + 14 : 14;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,13 +18,15 @@
|
||||
|
||||
package appeng.container.slot;
|
||||
|
||||
|
||||
import net.minecraft.inventory.IInventory;
|
||||
|
||||
|
||||
public class SlotFakeCraftingMatrix extends SlotFake
|
||||
{
|
||||
|
||||
public SlotFakeCraftingMatrix(IInventory inv, int idx, int x, int y) {
|
||||
public SlotFakeCraftingMatrix( IInventory inv, int idx, int x, int y )
|
||||
{
|
||||
super( inv, idx, x, y );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,25 +18,28 @@
|
||||
|
||||
package appeng.container.slot;
|
||||
|
||||
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
|
||||
public class SlotFakeTypeOnly extends SlotFake
|
||||
{
|
||||
|
||||
public SlotFakeTypeOnly(IInventory inv, int idx, int x, int y) {
|
||||
public SlotFakeTypeOnly( IInventory inv, int idx, int x, int y )
|
||||
{
|
||||
super( inv, idx, x, y );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void putStack(ItemStack is)
|
||||
public void putStack( ItemStack is )
|
||||
{
|
||||
if ( is != null )
|
||||
if( is != null )
|
||||
{
|
||||
is = is.copy();
|
||||
if ( is.stackSize > 1 )
|
||||
if( is.stackSize > 1 )
|
||||
is.stackSize = 1;
|
||||
else if ( is.stackSize < -1 )
|
||||
else if( is.stackSize < -1 )
|
||||
is.stackSize = -1;
|
||||
}
|
||||
|
||||
|
||||
@@ -18,29 +18,26 @@
|
||||
|
||||
package appeng.container.slot;
|
||||
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
|
||||
public class SlotInaccessible extends AppEngSlot
|
||||
{
|
||||
|
||||
public SlotInaccessible(IInventory i, int slotIdx, int x, int y) {
|
||||
ItemStack dspStack = null;
|
||||
|
||||
public SlotInaccessible( IInventory i, int slotIdx, int x, int y )
|
||||
{
|
||||
super( i, slotIdx, x, y );
|
||||
}
|
||||
|
||||
ItemStack dspStack = null;
|
||||
|
||||
@Override
|
||||
public ItemStack getDisplayStack()
|
||||
public boolean isItemValid( ItemStack i )
|
||||
{
|
||||
if ( this.dspStack == null )
|
||||
{
|
||||
ItemStack dsp = super.getDisplayStack();
|
||||
if ( dsp != null )
|
||||
this.dspStack = dsp.copy();
|
||||
}
|
||||
return this.dspStack;
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -51,15 +48,20 @@ public class SlotInaccessible extends AppEngSlot
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canTakeStack(EntityPlayer par1EntityPlayer)
|
||||
public boolean canTakeStack( EntityPlayer par1EntityPlayer )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isItemValid(ItemStack i)
|
||||
public ItemStack getDisplayStack()
|
||||
{
|
||||
return false;
|
||||
if( this.dspStack == null )
|
||||
{
|
||||
ItemStack dsp = super.getDisplayStack();
|
||||
if( dsp != null )
|
||||
this.dspStack = dsp.copy();
|
||||
}
|
||||
return this.dspStack;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,13 +18,15 @@
|
||||
|
||||
package appeng.container.slot;
|
||||
|
||||
|
||||
import net.minecraft.inventory.IInventory;
|
||||
|
||||
|
||||
public class SlotInaccessibleHD extends SlotInaccessible
|
||||
{
|
||||
|
||||
public SlotInaccessibleHD(IInventory i, int slotIdx, int x, int y) {
|
||||
public SlotInaccessibleHD( IInventory i, int slotIdx, int x, int y )
|
||||
{
|
||||
super( i, slotIdx, x, y );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,25 +18,27 @@
|
||||
|
||||
package appeng.container.slot;
|
||||
|
||||
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import appeng.container.implementations.ContainerMAC;
|
||||
|
||||
|
||||
public class SlotMACPattern extends AppEngSlot
|
||||
{
|
||||
|
||||
final ContainerMAC mac;
|
||||
|
||||
public SlotMACPattern(ContainerMAC mac, IInventory i, int slotIdx, int x, int y) {
|
||||
public SlotMACPattern( ContainerMAC mac, IInventory i, int slotIdx, int x, int y )
|
||||
{
|
||||
super( i, slotIdx, x, y );
|
||||
this.mac = mac;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isItemValid(ItemStack i)
|
||||
public boolean isItemValid( ItemStack i )
|
||||
{
|
||||
return this.mac.isValidItemForSlot( this.getSlotIndex(), i );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,13 +18,15 @@
|
||||
|
||||
package appeng.container.slot;
|
||||
|
||||
|
||||
import net.minecraft.inventory.IInventory;
|
||||
|
||||
|
||||
public class SlotNormal extends AppEngSlot
|
||||
{
|
||||
|
||||
public SlotNormal(IInventory inv, int slot, int xPos, int yPos) {
|
||||
public SlotNormal( IInventory inv, int slot, int xPos, int yPos )
|
||||
{
|
||||
super( inv, slot, xPos, yPos );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,19 +18,22 @@
|
||||
|
||||
package appeng.container.slot;
|
||||
|
||||
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
|
||||
public class SlotOutput extends AppEngSlot
|
||||
{
|
||||
|
||||
public SlotOutput(IInventory a, int b, int c, int d, int i) {
|
||||
public SlotOutput( IInventory a, int b, int c, int d, int i )
|
||||
{
|
||||
super( a, b, c, d );
|
||||
this.IIcon = i;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isItemValid(ItemStack i)
|
||||
public boolean isItemValid( ItemStack i )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -18,12 +18,15 @@
|
||||
|
||||
package appeng.container.slot;
|
||||
|
||||
|
||||
import net.minecraft.inventory.IInventory;
|
||||
|
||||
|
||||
public class SlotPatternOutputs extends OptionalSlotFake
|
||||
{
|
||||
|
||||
public SlotPatternOutputs(IInventory inv, IOptionalSlotHost containerBus, int idx, int x, int y, int offX, int offY, int groupNum) {
|
||||
public SlotPatternOutputs( IInventory inv, IOptionalSlotHost containerBus, int idx, int x, int y, int offX, int offY, int groupNum )
|
||||
{
|
||||
super( inv, containerBus, idx, x, y, offX, offY, groupNum );
|
||||
}
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
package appeng.container.slot;
|
||||
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
@@ -32,28 +33,32 @@ import appeng.core.sync.AppEngPacket;
|
||||
import appeng.core.sync.packets.PacketPatternSlot;
|
||||
import appeng.helpers.IContainerCraftingPacket;
|
||||
|
||||
|
||||
public class SlotPatternTerm extends SlotCraftingTerm
|
||||
{
|
||||
|
||||
final int groupNum;
|
||||
final IOptionalSlotHost host;
|
||||
|
||||
public SlotPatternTerm(EntityPlayer player, BaseActionSource mySrc, IEnergySource energySrc, IStorageMonitorable storage, IInventory cMatrix,
|
||||
IInventory secondMatrix, IInventory output, int x, int y, IOptionalSlotHost h, int groupNumber, IContainerCraftingPacket c)
|
||||
public SlotPatternTerm( EntityPlayer player, BaseActionSource mySrc, IEnergySource energySrc, IStorageMonitorable storage, IInventory cMatrix, IInventory secondMatrix, IInventory output, int x, int y, IOptionalSlotHost h, int groupNumber, IContainerCraftingPacket c )
|
||||
{
|
||||
super( player, mySrc, energySrc, storage, cMatrix, secondMatrix, output, x, y, c );
|
||||
|
||||
this.host = h;
|
||||
this.groupNum = groupNumber;
|
||||
}
|
||||
|
||||
public AppEngPacket getRequest( boolean shift ) throws IOException
|
||||
{
|
||||
return new PacketPatternSlot( this.pattern, AEApi.instance().storage().createItemStack( this.getStack() ), shift );
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getStack()
|
||||
{
|
||||
if ( !this.isEnabled() )
|
||||
if( !this.isEnabled() )
|
||||
{
|
||||
if ( this.getDisplayStack() != null )
|
||||
if( this.getDisplayStack() != null )
|
||||
this.clearStack();
|
||||
}
|
||||
|
||||
@@ -63,15 +68,9 @@ public class SlotPatternTerm extends SlotCraftingTerm
|
||||
@Override
|
||||
public boolean isEnabled()
|
||||
{
|
||||
if ( this.host == null )
|
||||
if( this.host == null )
|
||||
return false;
|
||||
|
||||
return this.host.isSlotEnabled( this.groupNum );
|
||||
}
|
||||
|
||||
public AppEngPacket getRequest(boolean shift) throws IOException
|
||||
{
|
||||
return new PacketPatternSlot( this.pattern, AEApi.instance().storage().createItemStack( this.getStack() ), shift );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,12 +18,15 @@
|
||||
|
||||
package appeng.container.slot;
|
||||
|
||||
|
||||
import net.minecraft.inventory.IInventory;
|
||||
|
||||
|
||||
public class SlotPlayerHotBar extends AppEngSlot
|
||||
{
|
||||
|
||||
public SlotPlayerHotBar(IInventory par1iInventory, int par2, int par3, int par4) {
|
||||
public SlotPlayerHotBar( IInventory par1iInventory, int par2, int par3, int par4 )
|
||||
{
|
||||
super( par1iInventory, par2, par3, par4 );
|
||||
this.isPlayerSide = true;
|
||||
}
|
||||
|
||||
@@ -18,14 +18,17 @@
|
||||
|
||||
package appeng.container.slot;
|
||||
|
||||
|
||||
import net.minecraft.inventory.IInventory;
|
||||
|
||||
// there is nothing special about this slot, its simply used to represent the players inventory, vs a container slot.
|
||||
|
||||
|
||||
public class SlotPlayerInv extends AppEngSlot
|
||||
{
|
||||
|
||||
public SlotPlayerInv(IInventory par1iInventory, int par2, int par3, int par4) {
|
||||
public SlotPlayerInv( IInventory par1iInventory, int par2, int par3, int par4 )
|
||||
{
|
||||
super( par1iInventory, par2, par3, par4 );
|
||||
|
||||
this.isPlayerSide = true;
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
package appeng.container.slot;
|
||||
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.init.Items;
|
||||
@@ -44,67 +45,17 @@ import appeng.items.misc.ItemEncodedPattern;
|
||||
import appeng.recipes.handlers.Inscribe;
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
public class SlotRestrictedInput extends AppEngSlot
|
||||
{
|
||||
|
||||
public enum PlacableItemType
|
||||
{
|
||||
STORAGE_CELLS(15), ORE( 16 + 15), STORAGE_COMPONENT(3 * 16 + 15),
|
||||
|
||||
ENCODABLE_ITEM(4 * 16 + 15), TRASH(5 * 16 + 15), VALID_ENCODED_PATTERN_W_OUTPUT(7 * 16 + 15), ENCODED_PATTERN_W_OUTPUT(7 * 16 + 15),
|
||||
|
||||
ENCODED_CRAFTING_PATTERN(7 * 16 + 15), ENCODED_PATTERN(7 * 16 + 15), PATTERN(8 * 16 + 15), BLANK_PATTERN(8 * 16 + 15), POWERED_TOOL(9 * 16 + 15),
|
||||
|
||||
RANGE_BOOSTER(6 * 16 + 15), QE_SINGULARITY(10 * 16 + 15), SPATIAL_STORAGE_CELLS(11 * 16 + 15),
|
||||
|
||||
FUEL(12 * 16 + 15), UPGRADES(13 * 16 + 15), WORKBENCH_CELL(15), BIOMETRIC_CARD(14 * 16 + 15), VIEW_CELL(4 * 16 + 14),
|
||||
|
||||
INSCRIBER_PLATE(2 * 16 + 14), INSCRIBER_INPUT(3 * 16 + 14), METAL_INGOTS(3 * 16 + 14);
|
||||
|
||||
public final int IIcon;
|
||||
|
||||
PlacableItemType( int o ) {
|
||||
this.IIcon = o;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSlotStackLimit()
|
||||
{
|
||||
if ( this.stackLimit != -1 )
|
||||
return this.stackLimit;
|
||||
return super.getSlotStackLimit();
|
||||
}
|
||||
|
||||
public boolean isValid(ItemStack is, World theWorld)
|
||||
{
|
||||
if ( this.which == PlacableItemType.VALID_ENCODED_PATTERN_W_OUTPUT )
|
||||
{
|
||||
ICraftingPatternDetails ap = is.getItem() instanceof ICraftingPatternItem ? ((ICraftingPatternItem) is.getItem()).getPatternForItem( is, theWorld )
|
||||
: null;
|
||||
return ap != null;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public final PlacableItemType which;
|
||||
private final InventoryPlayer p;
|
||||
public boolean allowEdit = true;
|
||||
public int stackLimit = -1;
|
||||
private final InventoryPlayer p;
|
||||
|
||||
@Override
|
||||
public boolean canTakeStack(EntityPlayer par1EntityPlayer)
|
||||
public SlotRestrictedInput( PlacableItemType valid, IInventory i, int slotIndex, int x, int y, InventoryPlayer p )
|
||||
{
|
||||
return this.allowEdit;
|
||||
}
|
||||
|
||||
public Slot setStackLimit(int i)
|
||||
{
|
||||
this.stackLimit = i;
|
||||
return this;
|
||||
}
|
||||
|
||||
public SlotRestrictedInput(PlacableItemType valid, IInventory i, int slotIndex, int x, int y, InventoryPlayer p) {
|
||||
super( i, slotIndex, x, y );
|
||||
this.which = valid;
|
||||
this.IIcon = valid.IIcon;
|
||||
@@ -112,58 +63,66 @@ public class SlotRestrictedInput extends AppEngSlot
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getDisplayStack()
|
||||
public int getSlotStackLimit()
|
||||
{
|
||||
if ( Platform.isClient() && (this.which == PlacableItemType.ENCODED_PATTERN) )
|
||||
if( this.stackLimit != -1 )
|
||||
return this.stackLimit;
|
||||
return super.getSlotStackLimit();
|
||||
}
|
||||
|
||||
public boolean isValid( ItemStack is, World theWorld )
|
||||
{
|
||||
if( this.which == PlacableItemType.VALID_ENCODED_PATTERN_W_OUTPUT )
|
||||
{
|
||||
ItemStack is = super.getStack();
|
||||
if ( is != null && is.getItem() instanceof ItemEncodedPattern )
|
||||
{
|
||||
ItemEncodedPattern iep = (ItemEncodedPattern) is.getItem();
|
||||
ItemStack out = iep.getOutput( is );
|
||||
if ( out != null )
|
||||
return out;
|
||||
}
|
||||
ICraftingPatternDetails ap = is.getItem() instanceof ICraftingPatternItem ? ( (ICraftingPatternItem) is.getItem() ).getPatternForItem( is, theWorld ) : null;
|
||||
return ap != null;
|
||||
}
|
||||
return super.getStack();
|
||||
return true;
|
||||
}
|
||||
|
||||
public Slot setStackLimit( int i )
|
||||
{
|
||||
this.stackLimit = i;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isItemValid(ItemStack i)
|
||||
public boolean isItemValid( ItemStack i )
|
||||
{
|
||||
if ( !this.myContainer.isValidForSlot( this, i ) )
|
||||
if( !this.myContainer.isValidForSlot( this, i ) )
|
||||
return false;
|
||||
|
||||
if ( i == null )
|
||||
if( i == null )
|
||||
return false;
|
||||
if ( i.getItem() == null )
|
||||
if( i.getItem() == null )
|
||||
return false;
|
||||
|
||||
if ( !this.inventory.isItemValidForSlot( this.getSlotIndex(), i ) )
|
||||
if( !this.inventory.isItemValidForSlot( this.getSlotIndex(), i ) )
|
||||
return false;
|
||||
|
||||
if ( !this.allowEdit )
|
||||
if( !this.allowEdit )
|
||||
return false;
|
||||
|
||||
final IDefinitions definitions = AEApi.instance().definitions();
|
||||
final IMaterials materials = definitions.materials();
|
||||
final IItems items = definitions.items();
|
||||
|
||||
switch (this.which)
|
||||
switch( this.which )
|
||||
{
|
||||
case ENCODED_CRAFTING_PATTERN:
|
||||
if ( i.getItem() instanceof ICraftingPatternItem )
|
||||
if( i.getItem() instanceof ICraftingPatternItem )
|
||||
{
|
||||
ICraftingPatternItem b = (ICraftingPatternItem) i.getItem();
|
||||
ICraftingPatternDetails de = b.getPatternForItem( i, this.p.player.worldObj );
|
||||
if ( de != null )
|
||||
if( de != null )
|
||||
return de.isCraftable();
|
||||
}
|
||||
return false;
|
||||
case VALID_ENCODED_PATTERN_W_OUTPUT:
|
||||
case ENCODED_PATTERN_W_OUTPUT:
|
||||
case ENCODED_PATTERN: {
|
||||
if ( i.getItem() instanceof ICraftingPatternItem )
|
||||
case ENCODED_PATTERN:
|
||||
{
|
||||
if( i.getItem() instanceof ICraftingPatternItem )
|
||||
return true;
|
||||
// ICraftingPatternDetails pattern = i.getItem() instanceof ICraftingPatternItem ? ((ICraftingPatternItem)
|
||||
// i.getItem()).getPatternForItem( i ) : null;
|
||||
@@ -174,19 +133,19 @@ public class SlotRestrictedInput extends AppEngSlot
|
||||
|
||||
case PATTERN:
|
||||
|
||||
if ( i.getItem() instanceof ICraftingPatternItem )
|
||||
if( i.getItem() instanceof ICraftingPatternItem )
|
||||
return true;
|
||||
|
||||
return materials.blankPattern().isSameAs( i );
|
||||
|
||||
case INSCRIBER_PLATE:
|
||||
if ( materials.namePress().isSameAs( i ) )
|
||||
if( materials.namePress().isSameAs( i ) )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
for (ItemStack is : Inscribe.PLATES )
|
||||
if ( Platform.isSameItemPrecise( is, i ) )
|
||||
for( ItemStack is : Inscribe.PLATES )
|
||||
if( Platform.isSameItemPrecise( is, i ) )
|
||||
return true;
|
||||
|
||||
return false;
|
||||
@@ -217,15 +176,15 @@ public class SlotRestrictedInput extends AppEngSlot
|
||||
return materials.wirelessBooster().isSameAs( i );
|
||||
|
||||
case SPATIAL_STORAGE_CELLS:
|
||||
return i.getItem() instanceof ISpatialStorageCell && ((ISpatialStorageCell) i.getItem()).isSpatialStorage( i );
|
||||
return i.getItem() instanceof ISpatialStorageCell && ( (ISpatialStorageCell) i.getItem() ).isSpatialStorage( i );
|
||||
case STORAGE_CELLS:
|
||||
return AEApi.instance().registries().cell().isCellHandled( i );
|
||||
case WORKBENCH_CELL:
|
||||
return i.getItem() instanceof ICellWorkbenchItem && ((ICellWorkbenchItem) i.getItem()).isEditable( i );
|
||||
return i.getItem() instanceof ICellWorkbenchItem && ( (ICellWorkbenchItem) i.getItem() ).isEditable( i );
|
||||
case STORAGE_COMPONENT:
|
||||
return i.getItem() instanceof IStorageComponent && ((IStorageComponent) i.getItem()).isStorageComponent( i );
|
||||
return i.getItem() instanceof IStorageComponent && ( (IStorageComponent) i.getItem() ).isStorageComponent( i );
|
||||
case TRASH:
|
||||
if ( AEApi.instance().registries().cell().isCellHandled( i ) )
|
||||
if( AEApi.instance().registries().cell().isCellHandled( i ) )
|
||||
return false;
|
||||
|
||||
return !( i.getItem() instanceof IStorageComponent && ( (IStorageComponent) i.getItem() ).isStorageComponent( i ) );
|
||||
@@ -234,7 +193,7 @@ public class SlotRestrictedInput extends AppEngSlot
|
||||
case BIOMETRIC_CARD:
|
||||
return i.getItem() instanceof IBiometricCard;
|
||||
case UPGRADES:
|
||||
return i.getItem() instanceof IUpgradeModule && ((IUpgradeModule) i.getItem()).getType( i ) != null;
|
||||
return i.getItem() instanceof IUpgradeModule && ( (IUpgradeModule) i.getItem() ).getType( i ) != null;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -242,20 +201,65 @@ public class SlotRestrictedInput extends AppEngSlot
|
||||
return false;
|
||||
}
|
||||
|
||||
static public boolean isMetalIngot(ItemStack i)
|
||||
@Override
|
||||
public boolean canTakeStack( EntityPlayer par1EntityPlayer )
|
||||
{
|
||||
if ( Platform.isSameItemPrecise( i, new ItemStack( Items.iron_ingot ) ) )
|
||||
return this.allowEdit;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getDisplayStack()
|
||||
{
|
||||
if( Platform.isClient() && ( this.which == PlacableItemType.ENCODED_PATTERN ) )
|
||||
{
|
||||
ItemStack is = super.getStack();
|
||||
if( is != null && is.getItem() instanceof ItemEncodedPattern )
|
||||
{
|
||||
ItemEncodedPattern iep = (ItemEncodedPattern) is.getItem();
|
||||
ItemStack out = iep.getOutput( is );
|
||||
if( out != null )
|
||||
return out;
|
||||
}
|
||||
}
|
||||
return super.getStack();
|
||||
}
|
||||
|
||||
static public boolean isMetalIngot( ItemStack i )
|
||||
{
|
||||
if( Platform.isSameItemPrecise( i, new ItemStack( Items.iron_ingot ) ) )
|
||||
return true;
|
||||
|
||||
for (String name : new String[] { "Copper", "Tin", "Obsidian", "Iron", "Lead", "Bronze", "Brass", "Nickel", "Aluminium" })
|
||||
for( String name : new String[] { "Copper", "Tin", "Obsidian", "Iron", "Lead", "Bronze", "Brass", "Nickel", "Aluminium" } )
|
||||
{
|
||||
for (ItemStack ingot : OreDictionary.getOres( "ingot" + name ))
|
||||
for( ItemStack ingot : OreDictionary.getOres( "ingot" + name ) )
|
||||
{
|
||||
if ( Platform.isSameItemPrecise( i, ingot ) )
|
||||
if( Platform.isSameItemPrecise( i, ingot ) )
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public enum PlacableItemType
|
||||
{
|
||||
STORAGE_CELLS( 15 ), ORE( 16 + 15 ), STORAGE_COMPONENT( 3 * 16 + 15 ),
|
||||
|
||||
ENCODABLE_ITEM( 4 * 16 + 15 ), TRASH( 5 * 16 + 15 ), VALID_ENCODED_PATTERN_W_OUTPUT( 7 * 16 + 15 ), ENCODED_PATTERN_W_OUTPUT( 7 * 16 + 15 ),
|
||||
|
||||
ENCODED_CRAFTING_PATTERN( 7 * 16 + 15 ), ENCODED_PATTERN( 7 * 16 + 15 ), PATTERN( 8 * 16 + 15 ), BLANK_PATTERN( 8 * 16 + 15 ), POWERED_TOOL( 9 * 16 + 15 ),
|
||||
|
||||
RANGE_BOOSTER( 6 * 16 + 15 ), QE_SINGULARITY( 10 * 16 + 15 ), SPATIAL_STORAGE_CELLS( 11 * 16 + 15 ),
|
||||
|
||||
FUEL( 12 * 16 + 15 ), UPGRADES( 13 * 16 + 15 ), WORKBENCH_CELL( 15 ), BIOMETRIC_CARD( 14 * 16 + 15 ), VIEW_CELL( 4 * 16 + 14 ),
|
||||
|
||||
INSCRIBER_PLATE( 2 * 16 + 14 ), INSCRIBER_INPUT( 3 * 16 + 14 ), METAL_INGOTS( 3 * 16 + 14 );
|
||||
|
||||
public final int IIcon;
|
||||
|
||||
PlacableItemType( int o )
|
||||
{
|
||||
this.IIcon = o;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user