Added all the crafting cpu "blocks" - needs textures and renders.

Updated API
This commit is contained in:
AlgorithmX2 2014-05-10 00:00:02 -05:00
parent f031972fcd
commit 08d6942643
22 changed files with 306 additions and 70 deletions

View file

@ -1,19 +0,0 @@
package appeng.block.crafting;
import java.util.EnumSet;
import net.minecraft.block.material.Material;
import appeng.block.AEBaseBlock;
import appeng.core.features.AEFeature;
import appeng.tile.crafting.TileCraftingTile;
public class BlockCraftingMonitor extends AEBaseBlock
{
public BlockCraftingMonitor() {
super( BlockCraftingMonitor.class, Material.iron );
setfeature( EnumSet.of( AEFeature.Crafting ) );
setTileEntiy( TileCraftingTile.class );
}
}

View file

@ -1,19 +0,0 @@
package appeng.block.crafting;
import java.util.EnumSet;
import net.minecraft.block.material.Material;
import appeng.block.AEBaseBlock;
import appeng.core.features.AEFeature;
import appeng.tile.crafting.TileCraftingTile;
public class BlockCraftingStorage extends AEBaseBlock
{
public BlockCraftingStorage() {
super( BlockCraftingStorage.class, Material.iron );
setfeature( EnumSet.of( AEFeature.Crafting ) );
setTileEntiy( TileCraftingTile.class );
}
}

View file

@ -1,8 +1,16 @@
package appeng.block.crafting;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
import appeng.block.AEBaseBlock;
import appeng.core.features.AEFeature;
import appeng.tile.crafting.TileCraftingTile;
@ -10,10 +18,74 @@ import appeng.tile.crafting.TileCraftingTile;
public class BlockCraftingUnit extends AEBaseBlock
{
public final static int BASE_DAMAGE = 0;
public final static int BASE_MONITOR = 1;
public final static int BASE_STORAGE = 2;
public final static int BASE_ACCELERATOR = 3;
public BlockCraftingUnit() {
super( BlockCraftingUnit.class, Material.iron );
hasSubtypes = true;
setfeature( EnumSet.of( AEFeature.Crafting ) );
setTileEntiy( TileCraftingTile.class );
}
public ItemStack getItemStack(World world, int x, int y, int z)
{
TileCraftingTile ct = getTileEntity( world, x, y, z );
int meta = world.getBlockMetadata( x, y, z );
if ( ct != null && meta == BASE_STORAGE )
{
return createStackForBytes( ct.getStorageBytes() );
}
return new ItemStack( this, 1, meta );
}
private ItemStack createStackForBytes(long storageBytes)
{
ItemStack itemDetails = new ItemStack( this, 1, BASE_STORAGE );
NBTTagCompound tag = new NBTTagCompound();
tag.setLong( "bytes", storageBytes );
itemDetails.setTagCompound( tag );
return itemDetails;
}
@Override
public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune)
{
ArrayList<ItemStack> out = new ArrayList();
ItemStack is = getItemStack( world, x, y, z );
if ( is != null )
out.add( is );
return out;
}
@Override
public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z)
{
return getItemStack( world, x, y, z );
}
@Override
public void getSubBlocks(Item i, CreativeTabs c, List l)
{
l.add( new ItemStack( this, 1, BASE_DAMAGE ) );
l.add( new ItemStack( this, 1, BASE_MONITOR ) );
l.add( new ItemStack( this, 1, BASE_ACCELERATOR ) );
l.add( createStackForBytes( 1024 ) );
l.add( createStackForBytes( 1024 * 4 ) );
l.add( createStackForBytes( 1024 * 16 ) );
l.add( createStackForBytes( 1024 * 64 ) );
}
@Override
public Class getItemBlockClass()
{
return ItemBlockCraftingUnit.class;
}
}

View file

@ -0,0 +1,56 @@
package appeng.block.crafting;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import appeng.block.AEBaseItemBlock;
import appeng.core.localization.GuiText;
public class ItemBlockCraftingUnit extends AEBaseItemBlock
{
public ItemBlockCraftingUnit(Block id) {
super( id );
}
@Override
public String getUnlocalizedName(ItemStack is)
{
switch (is.getItemDamage())
{
case BlockCraftingUnit.BASE_STORAGE:
return "tile.appliedenergistics2.BlockCraftingStorage";
case BlockCraftingUnit.BASE_ACCELERATOR:
return "tile.appliedenergistics2.BlockCraftingAccelerator";
case BlockCraftingUnit.BASE_MONITOR:
return "tile.appliedenergistics2.BlockCraftingMonitor";
}
return super.getUnlocalizedName( is );
}
@Override
public String getItemStackDisplayName(ItemStack is)
{
String name = super.getItemStackDisplayName( is );
long storageBytes = getStorageBytes( is );
if ( storageBytes > 0 )
return name + " - " + GuiText.Stores.getLocal() + " " + (storageBytes / 1024) + "k";
return name;
}
public long getStorageBytes(ItemStack is)
{
NBTTagCompound tag = is.getTagCompound();
if ( tag != null )
{
return tag.getLong( "bytes" );
}
return 0;
}
}

View file

@ -77,7 +77,7 @@ public class BlockCharger extends AEBaseBlock implements ICustomCollision
if ( tile instanceof TileCharger )
{
TileCharger tc = (TileCharger) tile;
if ( AEApi.instance().materials().materialCertusQuartzCrystalCharged.sameAs( tc.getStackInSlot( 0 ) ) )
if ( AEApi.instance().materials().materialCertusQuartzCrystalCharged.sameAsStack( tc.getStackInSlot( 0 ) ) )
{
double xOff = 0.0;

View file

@ -278,7 +278,7 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
if ( output == null )
return false;
return AEApi.instance().items().itemEncodedPattern.sameAs( output ) || AEApi.instance().materials().materialBlankPattern.sameAs( output );
return AEApi.instance().items().itemEncodedPattern.sameAsStack( output ) || AEApi.instance().materials().materialBlankPattern.sameAsStack( output );
}
@Override

View file

@ -133,17 +133,17 @@ public class SlotRestrictedInput extends AppEngSlot
return false;// pattern != null;
}
case BLANK_PATTERN:
return AEApi.instance().materials().materialBlankPattern.sameAs( i );
return AEApi.instance().materials().materialBlankPattern.sameAsStack( i );
case PATTERN:
if ( i.getItem() instanceof ICraftingPatternItem )
return true;
return AEApi.instance().materials().materialBlankPattern.sameAs( i );
return AEApi.instance().materials().materialBlankPattern.sameAsStack( i );
case INSCRIBER_PLATE:
if ( AEApi.instance().materials().materialNamePress.sameAs( i ) )
if ( AEApi.instance().materials().materialNamePress.sameAsStack( i ) )
return true;
for (ItemStack is : Inscribe.plates)
@ -164,7 +164,7 @@ public class SlotRestrictedInput extends AppEngSlot
return isMetalIngot( i );
case VIEWCELL:
return AEApi.instance().items().itemViewCell.sameAs( i );
return AEApi.instance().items().itemViewCell.sameAsStack( i );
case ORE:
return appeng.api.AEApi.instance().registries().grinder().getRecipeForInput( i ) != null;
case FUEL:
@ -172,9 +172,9 @@ public class SlotRestrictedInput extends AppEngSlot
case POWERED_TOOL:
return Platform.isChargeable( i );
case QE_SINGULARTIY:
return api.materials().materialQESingularity.sameAs( i );
return api.materials().materialQESingularity.sameAsStack( i );
case RANGE_BOOSTER:
return api.materials().materialWirelessBooster.sameAs( i );
return api.materials().materialWirelessBooster.sameAsStack( i );
case SPATIAL_STORAGE_CELLS:
return i.getItem() instanceof ISpatialStorageCell && ((ISpatialStorageCell) i.getItem()).isSpatialStorage( i );
case STORAGE_CELLS:

View file

@ -77,6 +77,7 @@ import appeng.core.features.DamagedItemDefinition;
import appeng.core.features.IAEFeature;
import appeng.core.features.ItemStackSrc;
import appeng.core.features.NullItemDefinition;
import appeng.core.features.WrappedDamageItemDefinition;
import appeng.core.features.registries.P2PTunnelRegistry;
import appeng.core.features.registries.entries.BasicCellHandler;
import appeng.core.features.registries.entries.CreativeCellHandler;
@ -272,12 +273,16 @@ public class Registration
// very important block!
blocks.blockMultiPart = addFeature( BlockCableBus.class );
blocks.blockCraftingUnit = addFeature( BlockCraftingUnit.class );
blocks.blockCraftingMonitor = new WrappedDamageItemDefinition( blocks.blockCraftingUnit, BlockCraftingUnit.BASE_MONITOR );
blocks.blockCraftingStorage = new WrappedDamageItemDefinition( blocks.blockCraftingUnit, BlockCraftingUnit.BASE_STORAGE );
blocks.blockCraftingAccelerator = new WrappedDamageItemDefinition( blocks.blockCraftingUnit, BlockCraftingUnit.BASE_ACCELERATOR );
blocks.blockMolecularAssembler = addFeature( BlockMolecularAssembler.class );
blocks.blockQuartzOre = addFeature( OreQuartz.class );
blocks.blockQuartzOreCharged = addFeature( OreQuartzCharged.class );
blocks.blockMatrixFrame = addFeature( BlockMatrixFrame.class );
blocks.blockQuartz = addFeature( BlockQuartz.class );
blocks.blockCraftingUnit = addFeature( BlockCraftingUnit.class );
blocks.blockMolecularAssembler = addFeature( BlockMolecularAssembler.class );
blocks.blockFluix = addFeature( BlockFluix.class );
blocks.blockSkyStone = addFeature( BlockSkyStone.class );
blocks.blockSkyChest = addFeature( BlockSkyChest.class );

View file

@ -6,6 +6,7 @@ import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.IBlockAccess;
import appeng.api.util.AEItemDefinition;
import appeng.block.AEBaseBlock;
import appeng.block.AEBaseItemBlock;
@ -175,11 +176,19 @@ public class AEFeatureHandler implements AEItemDefinition
}
@Override
public boolean sameAs(ItemStack is)
public boolean sameAsStack(ItemStack is)
{
if ( isFeatureAvailable() )
return Platform.isSameItemType( is, stack( 1 ) );
return false;
}
@Override
public boolean sameAsBlock(IBlockAccess world, int x, int y, int z)
{
if ( isFeatureAvailable() && BlockData != null )
return world.getBlock( x, y, z ) == block();
return false;
}
}

View file

@ -4,6 +4,7 @@ import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.IBlockAccess;
import appeng.api.util.AEItemDefinition;
public class DamagedItemDefinition implements AEItemDefinition
@ -53,7 +54,7 @@ public class DamagedItemDefinition implements AEItemDefinition
}
@Override
public boolean sameAs(ItemStack comparableItem)
public boolean sameAsStack(ItemStack comparableItem)
{
if ( comparableItem == null )
return false;
@ -61,4 +62,10 @@ public class DamagedItemDefinition implements AEItemDefinition
return comparableItem.getItem() == baseItem && comparableItem.getItemDamage() == damage;
}
@Override
public boolean sameAsBlock(IBlockAccess world, int x, int y, int z)
{
return false;
}
}

View file

@ -4,6 +4,7 @@ import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.IBlockAccess;
import appeng.api.util.AEItemDefinition;
public class NullItemDefinition implements AEItemDefinition
@ -34,7 +35,13 @@ public class NullItemDefinition implements AEItemDefinition
}
@Override
public boolean sameAs(ItemStack comparableItem)
public boolean sameAsStack(ItemStack comparableItem)
{
return false;
}
@Override
public boolean sameAsBlock(IBlockAccess world, int x, int y, int z)
{
return false;
}

View file

@ -0,0 +1,65 @@
package appeng.core.features;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.IBlockAccess;
import appeng.api.util.AEItemDefinition;
public class WrappedDamageItemDefinition implements AEItemDefinition
{
final AEItemDefinition baseItem;
final int damage;
public WrappedDamageItemDefinition(AEItemDefinition def, int dmg) {
baseItem = def;
damage = dmg;
}
@Override
public Block block()
{
return baseItem.block();
}
@Override
public Item item()
{
return baseItem.item();
}
@Override
public Class<? extends TileEntity> entity()
{
return baseItem.entity();
}
@Override
public ItemStack stack(int stackSize)
{
if ( baseItem == null )
return null;
return new ItemStack( baseItem.block(), stackSize, damage );
}
@Override
public boolean sameAsStack(ItemStack comparableItem)
{
if ( comparableItem == null )
return false;
return comparableItem.getItem() == baseItem.item() && comparableItem.getItemDamage() == damage;
}
@Override
public boolean sameAsBlock(IBlockAccess world, int x, int y, int z)
{
if ( block() != null )
return world.getBlock( x, y, z ) == block() && world.getBlockMetadata( x, y, z ) == damage;
return false;
}
}

View file

@ -25,10 +25,12 @@ public enum GuiText
CraftingTerminal, FormationPlane, Inscriber, QuartzCuttingKnife,
METunnel, ItemTunnel, RedstoneTunnel, MJTunnel, EUTunnel, FluidTunnel, StoredSize,
CopyMode, CopyModeDesc, PatternTerminal, CraftingPattern, ProcessingPattern, Crafts, Creates, And, With, MolecularAssembler,
StoredPower, MaxPower, RequiredPower, Efficiency, InWorldCrafting, inWorldFluix, inWorldPurification, inWorldSingularity, OfSecondOutput, NoSecondOutput, RFTunnel;
CopyMode, CopyModeDesc, PatternTerminal, CraftingPattern, ProcessingPattern, Crafts, Creates, And, With, MolecularAssembler,
StoredPower, MaxPower, RequiredPower, Efficiency, InWorldCrafting, inWorldFluix, inWorldPurification, inWorldSingularity,
OfSecondOutput, NoSecondOutput, RFTunnel, Stores;
String root;

View file

@ -67,7 +67,7 @@ final public class EntityChargedQuartz extends EntityItem
public boolean transform()
{
ItemStack item = getEntityItem();
if ( AEApi.instance().materials().materialCertusQuartzCrystalCharged.sameAs( item ) )
if ( AEApi.instance().materials().materialCertusQuartzCrystalCharged.sameAsStack( item ) )
{
AxisAlignedBB region = AxisAlignedBB.getBoundingBox( posX - 1, posY - 1, posZ - 1, posX + 1, posY + 1, posZ + 1 );
List<Entity> l = worldObj.getEntitiesWithinAABBExcludingEntity( this, region );

View file

@ -50,7 +50,7 @@ final public class EntitySingularity extends EntityItem
return;
ItemStack item = getEntityItem();
if ( AEApi.instance().materials().materialSingularity.sameAs( item ) )
if ( AEApi.instance().materials().materialSingularity.sameAsStack( item ) )
{
AxisAlignedBB region = AxisAlignedBB.getBoundingBox( posX - 4, posY - 4, posZ - 4, posX + 4, posY + 4, posZ + 4 );
List<Entity> l = worldObj.getEntitiesWithinAABBExcludingEntity( this, region );

View file

@ -64,7 +64,7 @@ public class ToolWirelessTerminal extends AEBasePoweredItem implements IWireless
@Override
public boolean canHandle(ItemStack is)
{
return AEApi.instance().items().itemWirelessTerminal.sameAs( is );
return AEApi.instance().items().itemWirelessTerminal.sameAsStack( is );
}
@Override

View file

@ -44,7 +44,7 @@ public class SecurityInventory implements IMEInventoryHandler<IAEItemStack>
@Override
public IAEItemStack injectItems(IAEItemStack input, Actionable type, BaseActionSource src)
{
if ( hasPermission( src ) && AEApi.instance().items().itemBiometricCard.sameAs( input.getItemStack() ) )
if ( hasPermission( src ) && AEApi.instance().items().itemBiometricCard.sameAsStack( input.getItemStack() ) )
{
if ( canAccept( input ) )
{

View file

@ -375,7 +375,7 @@ public class AEBasePart implements IPart, IGridProxyable, IActionHost, IUpgradea
ItemStack is = getItemStack( PartItemStack.Network );
// Blocks and parts share the same soul!
if ( AEApi.instance().parts().partInterface.sameAs( is ) )
if ( AEApi.instance().parts().partInterface.sameAsStack( is ) )
is = AEApi.instance().blocks().blockInterface.stack( 1 );
String name = is.getUnlocalizedName();

View file

@ -18,8 +18,8 @@ public class FacadeRecipe implements IRecipe
{
if ( inv.getStackInSlot( 0 ) == null && inv.getStackInSlot( 2 ) == null && inv.getStackInSlot( 6 ) == null && inv.getStackInSlot( 8 ) == null )
{
if ( anchor.sameAs( inv.getStackInSlot( 1 ) ) && anchor.sameAs( inv.getStackInSlot( 3 ) ) && anchor.sameAs( inv.getStackInSlot( 5 ) )
&& anchor.sameAs( inv.getStackInSlot( 7 ) ) )
if ( anchor.sameAsStack( inv.getStackInSlot( 1 ) ) && anchor.sameAsStack( inv.getStackInSlot( 3 ) ) && anchor.sameAsStack( inv.getStackInSlot( 5 ) )
&& anchor.sameAsStack( inv.getStackInSlot( 7 ) ) )
{
ItemStack facadeis = facade.createFacadeForItem( inv.getStackInSlot( 4 ), !createFacade );
if ( facadeis != null && createFacade )

View file

@ -1,12 +1,58 @@
package appeng.tile.crafting;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import appeng.api.AEApi;
import appeng.me.cluster.IAECluster;
import appeng.me.cluster.IAEMultiBlock;
import appeng.tile.AEBaseTile;
import appeng.tile.events.AETileEventHandler;
import appeng.tile.events.TileEventType;
public class TileCraftingTile extends AEBaseTile implements IAEMultiBlock
{
private long storageBytes = 0;
public TileCraftingTile() {
addNewHandler( new AETileEventHandler( TileEventType.NETWORK, TileEventType.WORLD_NBT ) {
public void writeToNBT(NBTTagCompound data)
{
if ( storageBytes > 0 )
data.setLong( "bytes", storageBytes );
}
public void readFromNBT(NBTTagCompound data)
{
storageBytes = data.getLong( "bytes" );
}
public boolean readFromStream(io.netty.buffer.ByteBuf data) throws java.io.IOException
{
storageBytes = data.readLong();
return false;
}
public void writeToStream(io.netty.buffer.ByteBuf data) throws java.io.IOException
{
data.writeLong( storageBytes );
}
} );
}
@Override
public void onPlacement(ItemStack stack, EntityPlayer player, int side)
{
if ( AEApi.instance().blocks().blockCraftingStorage.sameAsStack( stack ) && stack.hasTagCompound() )
{
NBTTagCompound data = stack.getTagCompound();
storageBytes = data.getLong( "bytes" );
}
}
@Override
public void disconnect()
{
@ -28,4 +74,9 @@ public class TileCraftingTile extends AEBaseTile implements IAEMultiBlock
return false;
}
public long getStorageBytes()
{
return storageBytes;
}
}

View file

@ -127,7 +127,7 @@ public class TileCharger extends AENetworkPowerTile implements ICrankable
tickTickTimer = 20; // keep tickin...
}
}
else if ( internalCurrentPower > 1499 && AEApi.instance().materials().materialCertusQuartzCrystal.sameAs( myItem ) )
else if ( internalCurrentPower > 1499 && AEApi.instance().materials().materialCertusQuartzCrystal.sameAsStack( myItem ) )
{
if ( Platform.getRandomFloat() > 0.8f ) // simulate wait
{
@ -167,7 +167,7 @@ public class TileCharger extends AENetworkPowerTile implements ICrankable
injectExternalPower( PowerUnits.AE, 150 );
ItemStack myItem = getStackInSlot( 0 );
if ( internalCurrentPower > 1499 && AEApi.instance().materials().materialCertusQuartzCrystal.sameAs( myItem ) )
if ( internalCurrentPower > 1499 && AEApi.instance().materials().materialCertusQuartzCrystal.sameAsStack( myItem ) )
{
extractAEPower( internalMaxPower, Actionable.MODULATE, PowerMultiplier.CONFIG );// 1500
setInventorySlotContents( 0, AEApi.instance().materials().materialCertusQuartzCrystalCharged.stack( myItem.stackSize ) );
@ -207,7 +207,7 @@ public class TileCharger extends AENetworkPowerTile implements ICrankable
@Override
public boolean isItemValidForSlot(int i, ItemStack itemstack)
{
return Platform.isChargeable( itemstack ) || AEApi.instance().materials().materialCertusQuartzCrystal.sameAs( itemstack );
return Platform.isChargeable( itemstack ) || AEApi.instance().materials().materialCertusQuartzCrystal.sameAsStack( itemstack );
}
@Override
@ -220,7 +220,7 @@ public class TileCharger extends AENetworkPowerTile implements ICrankable
return true;
}
return AEApi.instance().materials().materialCertusQuartzCrystalCharged.sameAs( itemstack );
return AEApi.instance().materials().materialCertusQuartzCrystalCharged.sameAsStack( itemstack );
}
public void activate(EntityPlayer player)
@ -232,7 +232,7 @@ public class TileCharger extends AENetworkPowerTile implements ICrankable
if ( myItem == null )
{
ItemStack held = player.inventory.getCurrentItem();
if ( AEApi.instance().materials().materialCertusQuartzCrystal.sameAs( held ) || Platform.isChargeable( held ) )
if ( AEApi.instance().materials().materialCertusQuartzCrystal.sameAsStack( held ) || Platform.isChargeable( held ) )
{
held = player.inventory.decrStackSize( player.inventory.currentItem, 1 );
setInventorySlotContents( 0, held );

View file

@ -178,7 +178,7 @@ public class TileInscriber extends AENetworkPowerTile implements IGridTickable
if ( i == 0 || i == 1 )
{
if ( AEApi.instance().materials().materialNamePress.sameAs( itemstack ) )
if ( AEApi.instance().materials().materialNamePress.sameAsStack( itemstack ) )
return true;
for (ItemStack s : Inscribe.plates)
@ -243,8 +243,8 @@ public class TileInscriber extends AENetworkPowerTile implements IGridTickable
if ( renamedItem != null && renamedItem.stackSize > 1 )
return null;
boolean isNameA = AEApi.instance().materials().materialNamePress.sameAs( PlateA );
boolean isNameB = AEApi.instance().materials().materialNamePress.sameAs( PlateB );
boolean isNameA = AEApi.instance().materials().materialNamePress.sameAsStack( PlateA );
boolean isNameB = AEApi.instance().materials().materialNamePress.sameAsStack( PlateB );
if ( (isNameA || isNameB) && (isNameA || PlateA == null) && (isNameB || PlateB == null) )
{