This commit is contained in:
AlgorithmX2
2014-07-02 18:21:36 -05:00
30 changed files with 612 additions and 213 deletions
+13
View File
@@ -41,6 +41,9 @@ public class BlockCraftingUnit extends AEBaseBlock
@Override @Override
public boolean onActivated(World w, int x, int y, int z, EntityPlayer p, int side, float hitX, float hitY, float hitZ) public boolean onActivated(World w, int x, int y, int z, EntityPlayer p, int side, float hitX, float hitY, float hitZ)
{ {
if ( Platform.isClient() )
return true;
TileCraftingTile tg = getTileEntity( w, x, y, z ); TileCraftingTile tg = getTileEntity( w, x, y, z );
if ( tg != null && !p.isSneaking() && tg.isFormed() && tg.isActive() ) if ( tg != null && !p.isSneaking() && tg.isFormed() && tg.isActive() )
{ {
@@ -94,6 +97,16 @@ public class BlockCraftingUnit extends AEBaseBlock
return RenderBlockCrafting.class; return RenderBlockCrafting.class;
} }
@Override
public void breakBlock(World w, int x, int y, int z, Block a, int b)
{
TileCraftingTile cp = getTileEntity( w, x, y, z );
if ( cp != null )
cp.breakCluster();
super.breakBlock( w, x, y, z, a, b );
}
@Override @Override
public void onNeighborBlockChange(World w, int x, int y, int z, Block junk) public void onNeighborBlockChange(World w, int x, int y, int z, Block junk)
{ {
+10
View File
@@ -61,6 +61,16 @@ public class BlockQuantumLinkChamber extends AEBaseBlock implements ICustomColli
bridge.neighborUpdate(); bridge.neighborUpdate();
} }
@Override
public void breakBlock(World w, int x, int y, int z, Block a, int b)
{
TileQuantumBridge bridge = getTileEntity( w, x, y, z );
if ( bridge != null )
bridge.breakCluster();
super.breakBlock( w, x, y, z, a, b );
}
@Override @Override
protected Class<? extends BaseBlockRender> getRenderer() protected Class<? extends BaseBlockRender> getRenderer()
{ {
+10
View File
@@ -37,6 +37,16 @@ public class BlockQuantumRing extends AEBaseBlock implements ICustomCollision
bridge.neighborUpdate(); bridge.neighborUpdate();
} }
@Override
public void breakBlock(World w, int x, int y, int z, Block a, int b)
{
TileQuantumBridge bridge = getTileEntity( w, x, y, z );
if ( bridge != null )
bridge.breakCluster();
super.breakBlock( w, x, y, z, a, b );
}
@Override @Override
protected Class<? extends BaseBlockRender> getRenderer() protected Class<? extends BaseBlockRender> getRenderer()
{ {
@@ -144,8 +144,8 @@ public class GuiMEMonitorable extends AEBaseMEGui implements ISortSource, IConfi
boolean hasNEI = AppEng.instance.isIntegrationEnabled( "NEI" ); boolean hasNEI = AppEng.instance.isIntegrationEnabled( "NEI" );
int NEI = hasNEI ? 4 : 0; int NEI = hasNEI ? 0 : 0;
int top = hasNEI ? 22 : 4; int top = hasNEI ? 22 : 0;
int magicNumber = 114 + 1; int magicNumber = 114 + 1;
int extraSpace = height - magicNumber - NEI - top - reservedSpace; int extraSpace = height - magicNumber - NEI - top - reservedSpace;
@@ -183,7 +183,9 @@ public class GuiMEMonitorable extends AEBaseMEGui implements ISortSource, IConfi
// slot 18 // slot 18
this.ySize = magicNumber + rows * 18 + reservedSpace; this.ySize = magicNumber + rows * 18 + reservedSpace;
this.guiTop = top; // this.guiTop = top;
int unusedSpace = height - ySize;
guiTop = (int) Math.floor( (float) unusedSpace / (unusedSpace < 0 ? 3.8f : 2.0f) );
int offset = guiTop + 8; int offset = guiTop + 8;
@@ -235,9 +237,15 @@ public class GuiMEMonitorable extends AEBaseMEGui implements ISortSource, IConfi
if ( s instanceof AppEngSlot ) if ( s instanceof AppEngSlot )
{ {
if ( ((AppEngSlot) s).xDisplayPosition < 197 ) if ( ((AppEngSlot) s).xDisplayPosition < 197 )
((AppEngSlot) s).yDisplayPosition = ((AppEngSlot) s).defY + ySize - 78 - 5; repositionSlot( (AppEngSlot) s );
} }
} }
}
protected void repositionSlot(AppEngSlot s)
{
s.yDisplayPosition = s.defY + ySize - 78 - 5;
} }
@Override @Override
+11 -2
View File
@@ -12,6 +12,7 @@ import appeng.api.storage.ITerminalHost;
import appeng.client.gui.widgets.GuiImgButton; import appeng.client.gui.widgets.GuiImgButton;
import appeng.client.gui.widgets.GuiTabButton; import appeng.client.gui.widgets.GuiTabButton;
import appeng.container.implementations.ContainerPatternTerm; import appeng.container.implementations.ContainerPatternTerm;
import appeng.container.slot.AppEngSlot;
import appeng.core.localization.GuiText; import appeng.core.localization.GuiText;
import appeng.core.sync.network.NetworkHandler; import appeng.core.sync.network.NetworkHandler;
import appeng.core.sync.packets.PacketValueConfig; import appeng.core.sync.packets.PacketValueConfig;
@@ -42,7 +43,7 @@ public class GuiPatternTerm extends GuiMEMonitorable
buttonList.add( clearBtn = new GuiImgButton( this.guiLeft + 74, this.guiTop + this.ySize - 163, Settings.ACTIONS, ActionItems.CLOSE ) ); buttonList.add( clearBtn = new GuiImgButton( this.guiLeft + 74, this.guiTop + this.ySize - 163, Settings.ACTIONS, ActionItems.CLOSE ) );
clearBtn.halfSize = true; clearBtn.halfSize = true;
buttonList.add( encodeBtn = new GuiImgButton( this.guiLeft + 147, this.guiTop + this.ySize - 144, Settings.ACTIONS, ActionItems.ENCODE ) ); buttonList.add( encodeBtn = new GuiImgButton( this.guiLeft + 147, this.guiTop + this.ySize - 142, Settings.ACTIONS, ActionItems.ENCODE ) );
} }
@Override @Override
@@ -81,10 +82,18 @@ public class GuiPatternTerm extends GuiMEMonitorable
} }
} }
protected void repositionSlot(AppEngSlot s)
{
if ( s.isPlayerSide() )
s.yDisplayPosition = s.defY + ySize - 78 - 5;
else
s.yDisplayPosition = s.defY + ySize - 78 - 3;
}
public GuiPatternTerm(InventoryPlayer inventoryPlayer, ITerminalHost te) { public GuiPatternTerm(InventoryPlayer inventoryPlayer, ITerminalHost te) {
super( inventoryPlayer, te, new ContainerPatternTerm( inventoryPlayer, te ) ); super( inventoryPlayer, te, new ContainerPatternTerm( inventoryPlayer, te ) );
container = (ContainerPatternTerm) this.inventorySlots; container = (ContainerPatternTerm) this.inventorySlots;
reservedSpace = 85; reservedSpace = 81;
} }
protected String getBackground() protected String getBackground()
+10 -3
View File
@@ -34,9 +34,9 @@ public class BusRenderHelper implements IPartRenderHelper
AEBaseBlock blk = (AEBaseBlock) AEApi.instance().blocks().blockMultiPart.block(); AEBaseBlock blk = (AEBaseBlock) AEApi.instance().blocks().blockMultiPart.block();
BaseBlockRender bbr = new BaseBlockRender(); BaseBlockRender bbr = new BaseBlockRender();
public ForgeDirection ax; private ForgeDirection ax = ForgeDirection.EAST;
public ForgeDirection ay; private ForgeDirection ay = ForgeDirection.UP;
public ForgeDirection az; private ForgeDirection az = ForgeDirection.SOUTH;
int color = 0xffffff; int color = 0xffffff;
@@ -457,4 +457,11 @@ public class BusRenderHelper implements IPartRenderHelper
return az; return az;
} }
public void setOrientation(ForgeDirection dx, ForgeDirection dy, ForgeDirection dz)
{
ax = dx == null ? ForgeDirection.EAST : dx;
ay = dy == null ? ForgeDirection.UP : dy;
az = dz == null ? ForgeDirection.SOUTH : dz;
}
} }
+1 -3
View File
@@ -112,9 +112,7 @@ public class BusRenderer implements IItemRenderer
BusRenderHelper.instance.setInvColor( 0xffffff ); BusRenderHelper.instance.setInvColor( 0xffffff );
renderer.blockAccess = ClientHelper.proxy.getWorld(); renderer.blockAccess = ClientHelper.proxy.getWorld();
BusRenderHelper.instance.ax = ForgeDirection.EAST; BusRenderHelper.instance.setOrientation( ForgeDirection.EAST, ForgeDirection.UP, ForgeDirection.SOUTH );
BusRenderHelper.instance.ay = ForgeDirection.UP;
BusRenderHelper.instance.az = ForgeDirection.SOUTH;
renderer.uvRotateBottom = renderer.uvRotateEast = renderer.uvRotateNorth = renderer.uvRotateSouth = renderer.uvRotateTop = renderer.uvRotateWest = 0; renderer.uvRotateBottom = renderer.uvRotateEast = renderer.uvRotateNorth = renderer.uvRotateSouth = renderer.uvRotateTop = renderer.uvRotateWest = 0;
renderer.useInventoryTint = false; renderer.useInventoryTint = false;
+27 -24
View File
@@ -63,8 +63,8 @@ public class CableRenderHelper
if ( part != null ) if ( part != null )
{ {
cableBusContainer.setSide( s ); cableBusContainer.setSide( s );
BusCollisionHelper bch = new BusCollisionHelper( boxes, BusRenderHelper.instance.ax, BusRenderHelper.instance.ay, BusRenderHelper brh = BusRenderHelper.instance;
BusRenderHelper.instance.az, null, true ); BusCollisionHelper bch = new BusCollisionHelper( boxes, brh.getWorldX(), brh.getWorldY(), brh.getWorldZ(), null, true );
part.getBoxes( bch ); part.getBoxes( bch );
} }
} }
@@ -132,46 +132,49 @@ public class CableRenderHelper
IPart part = cableBusContainer.getPart( s ); IPart part = cableBusContainer.getPart( s );
if ( part != null ) if ( part != null )
{ {
ForgeDirection ax, ay, az;
switch (s) switch (s)
{ {
case DOWN: case DOWN:
BusRenderHelper.instance.ax = ForgeDirection.EAST; ax = ForgeDirection.EAST;
BusRenderHelper.instance.ay = ForgeDirection.NORTH; ay = ForgeDirection.NORTH;
BusRenderHelper.instance.az = ForgeDirection.DOWN; az = ForgeDirection.DOWN;
break; break;
case UP: case UP:
BusRenderHelper.instance.ax = ForgeDirection.EAST; ax = ForgeDirection.EAST;
BusRenderHelper.instance.ay = ForgeDirection.SOUTH; ay = ForgeDirection.SOUTH;
BusRenderHelper.instance.az = ForgeDirection.UP; az = ForgeDirection.UP;
break; break;
case EAST: case EAST:
BusRenderHelper.instance.ax = ForgeDirection.SOUTH; ax = ForgeDirection.SOUTH;
BusRenderHelper.instance.ay = ForgeDirection.UP; ay = ForgeDirection.UP;
BusRenderHelper.instance.az = ForgeDirection.EAST; az = ForgeDirection.EAST;
break; break;
case WEST: case WEST:
BusRenderHelper.instance.ax = ForgeDirection.NORTH; ax = ForgeDirection.NORTH;
BusRenderHelper.instance.ay = ForgeDirection.UP; ay = ForgeDirection.UP;
BusRenderHelper.instance.az = ForgeDirection.WEST; az = ForgeDirection.WEST;
break; break;
case NORTH: case NORTH:
BusRenderHelper.instance.ax = ForgeDirection.WEST; ax = ForgeDirection.WEST;
BusRenderHelper.instance.ay = ForgeDirection.UP; ay = ForgeDirection.UP;
BusRenderHelper.instance.az = ForgeDirection.NORTH; az = ForgeDirection.NORTH;
break; break;
case SOUTH: case SOUTH:
BusRenderHelper.instance.ax = ForgeDirection.EAST; ax = ForgeDirection.EAST;
BusRenderHelper.instance.ay = ForgeDirection.UP; ay = ForgeDirection.UP;
BusRenderHelper.instance.az = ForgeDirection.SOUTH; az = ForgeDirection.SOUTH;
break; break;
case UNKNOWN: case UNKNOWN:
default: default:
BusRenderHelper.instance.ax = ForgeDirection.EAST; ax = ForgeDirection.EAST;
BusRenderHelper.instance.ay = ForgeDirection.UP; ay = ForgeDirection.UP;
BusRenderHelper.instance.az = ForgeDirection.SOUTH; az = ForgeDirection.SOUTH;
break; break;
} }
BusRenderHelper.instance.setOrientation( ax, ay, az );
part.renderDynamic( x, y, z, BusRenderHelper.instance, BusRenderer.instance.renderer ); part.renderDynamic( x, y, z, BusRenderHelper.instance, BusRenderer.instance.renderer );
} }
} }
@@ -61,9 +61,8 @@ public class RenderBlockCrafting extends BaseBlockRender
BusRenderHelper i = BusRenderHelper.instance; BusRenderHelper i = BusRenderHelper.instance;
renderer.blockAccess = w; renderer.blockAccess = w;
i.setPass( 0 ); i.setPass( 0 );
i.ax = ForgeDirection.EAST;
i.ay = ForgeDirection.UP; i.setOrientation( ForgeDirection.EAST, ForgeDirection.UP, ForgeDirection.SOUTH );
i.az = ForgeDirection.SOUTH;
try try
{ {
@@ -141,9 +141,9 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
super.detectAndSendChanges(); super.detectAndSendChanges();
if ( Platform.isServer() ) if ( Platform.isServer() )
{ {
if ( craftingMode != ct.craftingMode ) if ( craftingMode != ct.isCraftingRecipe() )
{ {
craftingMode = ct.craftingMode; craftingMode = ct.isCraftingRecipe();
updateOrderOfOutputSlots(); updateOrderOfOutputSlots();
} }
} }
@@ -285,9 +285,9 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
public boolean isSlotEnabled(int idx) public boolean isSlotEnabled(int idx)
{ {
if ( idx == 1 ) if ( idx == 1 )
return Platform.isServer() ? ct.craftingMode == false : craftingMode == false; return Platform.isServer() ? ct.isCraftingRecipe() == false : craftingMode == false;
if ( idx == 2 ) if ( idx == 2 )
return Platform.isServer() ? ct.craftingMode == true : craftingMode == true; return Platform.isServer() ? ct.isCraftingRecipe() == true : craftingMode == true;
return false; return false;
} }
@@ -386,6 +386,26 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
} }
} }
@Override
public ItemStack slotClick(int slotNum, int p_75144_2_, int p_75144_3_, EntityPlayer p_75144_4_)
{
Slot s = null;
for (Object g : inventorySlots)
{
if ( g instanceof Slot )
{
Slot gg = (Slot) g;
if ( gg.slotNumber == slotNum )
s = gg;
}
}
ItemStack is = super.slotClick( slotNum, p_75144_2_, p_75144_3_, p_75144_4_ );
if ( s == patternSlotOUT )
detectAndSendChanges();
return is;
}
public void clear() public void clear()
{ {
for (Slot s : craftingSlots) for (Slot s : craftingSlots)
+1 -1
View File
@@ -96,7 +96,7 @@ public class PacketValueConfig extends AppEngPacket
ContainerPatternTerm cpt = (ContainerPatternTerm) c; ContainerPatternTerm cpt = (ContainerPatternTerm) c;
if ( Name.equals( "PatternTerminal.CraftMode" ) ) if ( Name.equals( "PatternTerminal.CraftMode" ) )
{ {
cpt.ct.craftingMode = Value.equals( "1" ); cpt.ct.setCraftingRecipe( Value.equals( "1" ) );
} }
else if ( Name.equals( "PatternTerminal.Encode" ) ) else if ( Name.equals( "PatternTerminal.Encode" ) )
{ {
+15 -2
View File
@@ -1,5 +1,6 @@
package appeng.items.materials; package appeng.items.materials;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.EnumSet; import java.util.EnumSet;
@@ -288,6 +289,8 @@ public class ItemMultiMaterial extends AEBaseItem implements IStorageComponent,
return Upgrades.SPEED; return Upgrades.SPEED;
case CardInverter: case CardInverter:
return Upgrades.INVERTER; return Upgrades.INVERTER;
case CardCrafting:
return Upgrades.CRAFTING;
default: default:
return null; return null;
} }
@@ -296,11 +299,21 @@ public class ItemMultiMaterial extends AEBaseItem implements IStorageComponent,
@Override @Override
public void getSubItems(Item par1, CreativeTabs par2CreativeTabs, List cList) public void getSubItems(Item par1, CreativeTabs par2CreativeTabs, List cList)
{ {
for (MaterialType mat : MaterialType.values()) List<MaterialType> types = Arrays.asList( MaterialType.values() );
Collections.sort( types, new Comparator<MaterialType>() {
@Override
public int compare(MaterialType o1, MaterialType o2)
{
return o1.name().compareTo( o2.name() );
}
} );
for (MaterialType mat : types)
{ {
if ( mat.damageValue >= 0 && mat.isRegistered() ) if ( mat.damageValue >= 0 && mat.isRegistered() )
cList.add( new ItemStack( this, 1, mat.damageValue ) ); cList.add( new ItemStack( this, 1, mat.damageValue ) );
} }
} }
} }
+1 -1
View File
@@ -62,7 +62,7 @@ public enum MaterialType
EnderDust(46, AEFeature.QuantumNetworkBridge, "dustEnder", EntitySingularity.class), Singularity(47, AEFeature.QuantumNetworkBridge, EnderDust(46, AEFeature.QuantumNetworkBridge, "dustEnder", EntitySingularity.class), Singularity(47, AEFeature.QuantumNetworkBridge,
EntitySingularity.class), QESingularity(48, AEFeature.QuantumNetworkBridge, EntitySingularity.class), EntitySingularity.class), QESingularity(48, AEFeature.QuantumNetworkBridge, EntitySingularity.class),
BlankPattern(52); BlankPattern(52), CardCrafting(53);
private String oreName; private String oreName;
private EnumSet<AEFeature> features; private EnumSet<AEFeature> features;
+1 -1
View File
@@ -61,7 +61,7 @@ public class ItemCrystalSeed extends AEBaseItem implements IGrowableCrystal
{ {
NBTTagCompound comp = Platform.openNbtData( is ); NBTTagCompound comp = Platform.openNbtData( is );
comp.setInteger( "progress", newDamage ); comp.setInteger( "progress", newDamage );
is.setItemDamage( (is.getItemDamage() / SINGLE_OFFSET) * SINGLE_OFFSET ); is.setItemDamage( (int) (is.getItemDamage() / LEVEL_OFFSET) * LEVEL_OFFSET );
} }
public ItemCrystalSeed() { public ItemCrystalSeed() {
+28 -1
View File
@@ -4,11 +4,13 @@ import java.util.EnumSet;
import java.util.List; import java.util.List;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagList;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.client.MinecraftForgeClient; import net.minecraftforge.client.MinecraftForgeClient;
import appeng.api.AEApi;
import appeng.api.implementations.ICraftingPatternItem; import appeng.api.implementations.ICraftingPatternItem;
import appeng.api.networking.crafting.ICraftingPatternDetails; import appeng.api.networking.crafting.ICraftingPatternDetails;
import appeng.client.render.items.ItemEncodedPatternRenderer; import appeng.client.render.items.ItemEncodedPatternRenderer;
@@ -29,6 +31,29 @@ public class ItemEncodedPattern extends AEBaseItem implements ICraftingPatternIt
MinecraftForgeClient.registerItemRenderer( this, new ItemEncodedPatternRenderer() ); MinecraftForgeClient.registerItemRenderer( this, new ItemEncodedPatternRenderer() );
} }
@Override
public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
{
InventoryPlayer inv = player.inventory;
for (int s = 0; s < player.inventory.getSizeInventory(); s++)
{
if ( inv.getStackInSlot( s ) == stack )
{
inv.setInventorySlotContents( s, AEApi.instance().materials().materialBlankPattern.stack( stack.stackSize ) );
return true;
}
}
return false;
}
@Override
public ItemStack onItemRightClick(ItemStack stack, World w, EntityPlayer p)
{
return AEApi.instance().materials().materialBlankPattern.stack( stack.stackSize );
}
@Override @Override
public void addInformation(ItemStack is, EntityPlayer p, List l, boolean more) public void addInformation(ItemStack is, EntityPlayer p, List l, boolean more)
{ {
@@ -132,7 +157,9 @@ public class ItemEncodedPattern extends AEBaseItem implements ICraftingPatternIt
@Override @Override
public ICraftingPatternDetails getPatternForItem(ItemStack is, World w) public ICraftingPatternDetails getPatternForItem(ItemStack is, World w)
{ {
return new PatternHelper( is, w ); if ( is.hasTagCompound() )
return new PatternHelper( is, w );
return null;
} }
} }
+16 -2
View File
@@ -1,5 +1,8 @@
package appeng.items.parts; package appeng.items.parts;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@@ -61,7 +64,7 @@ public class ItemMultiPart extends AEBaseItem implements IPartItem, IItemGroup
} }
catch (Throwable e) catch (Throwable e)
{ {
AELog.integration(e); AELog.integration( e );
return null; // part not supported.. return null; // part not supported..
} }
@@ -200,7 +203,18 @@ public class ItemMultiPart extends AEBaseItem implements IPartItem, IItemGroup
@Override @Override
public void getSubItems(Item number, CreativeTabs tab, List cList) public void getSubItems(Item number, CreativeTabs tab, List cList)
{ {
for (Entry<Integer, PartTypeIst> part : dmgToPart.entrySet()) List<Entry<Integer, PartTypeIst>> types = new ArrayList( dmgToPart.entrySet() );
Collections.sort( types, new Comparator<Entry<Integer, PartTypeIst>>() {
@Override
public int compare(Entry<Integer, PartTypeIst> o1, Entry<Integer, PartTypeIst> o2)
{
return o1.getValue().part.name().compareTo( o2.getValue().part.name() );
}
} );
for (Entry<Integer, PartTypeIst> part : types)
cList.add( new ItemStack( this, 1, part.getKey() ) ); cList.add( new ItemStack( this, 1, part.getKey() ) );
} }
+1 -16
View File
@@ -20,10 +20,6 @@ import appeng.parts.networking.PartCableCovered;
import appeng.parts.networking.PartCableGlass; import appeng.parts.networking.PartCableGlass;
import appeng.parts.networking.PartCableSmart; import appeng.parts.networking.PartCableSmart;
import appeng.parts.networking.PartDenseCable; import appeng.parts.networking.PartDenseCable;
import appeng.parts.networking.PartLumenCableCovered;
import appeng.parts.networking.PartLumenCableGlass;
import appeng.parts.networking.PartLumenCableSmart;
import appeng.parts.networking.PartLumenDenseCable;
import appeng.parts.networking.PartQuartzFiber; import appeng.parts.networking.PartQuartzFiber;
import appeng.parts.p2p.PartP2PBCPower; import appeng.parts.p2p.PartP2PBCPower;
import appeng.parts.p2p.PartP2PIC2Power; import appeng.parts.p2p.PartP2PIC2Power;
@@ -105,15 +101,7 @@ public enum PartType
P2PTunnelEU(465, AEFeature.P2PTunnelEU, PartP2PIC2Power.class, GuiText.EUTunnel), P2PTunnelEU(465, AEFeature.P2PTunnelEU, PartP2PIC2Power.class, GuiText.EUTunnel),
P2PTunnelRF(466, AEFeature.P2PTunnelRF, PartP2PRFPower.class, GuiText.RFTunnel), P2PTunnelRF(466, AEFeature.P2PTunnelRF, PartP2PRFPower.class, GuiText.RFTunnel);
LumenCableGlass(480, AEFeature.Core, PartLumenCableGlass.class),
LumenCableCovered(500, AEFeature.Core, PartLumenCableCovered.class),
LumenCableSmart(520, AEFeature.Core, PartLumenCableSmart.class),
LumenCableDense(540, AEFeature.DenseCables, PartLumenDenseCable.class);
private final EnumSet<AEFeature> features; private final EnumSet<AEFeature> features;
private final Class<? extends IPart> myPart; private final Class<? extends IPart> myPart;
@@ -136,9 +124,6 @@ public enum PartType
if ( this == CableSmart || this == CableCovered || this == CableGlass || this == CableDense ) if ( this == CableSmart || this == CableCovered || this == CableGlass || this == CableDense )
return AEColor.values(); return AEColor.values();
if ( this == LumenCableSmart || this == LumenCableCovered || this == LumenCableGlass || this == LumenCableDense )
return AEColor.values();
return null; return null;
} }
@@ -64,6 +64,8 @@ public class CraftingCPUCalculator extends MBCalculator
} }
} }
c.done();
Iterator<IGridHost> i = c.getTiles(); Iterator<IGridHost> i = c.getTiles();
while (i.hasNext()) while (i.hasNext())
{ {
@@ -8,12 +8,15 @@ import java.util.Map.Entry;
import net.minecraft.inventory.InventoryCrafting; import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.WorldServer; import net.minecraft.world.WorldServer;
import appeng.api.AEApi; import appeng.api.AEApi;
import appeng.api.config.Actionable; import appeng.api.config.Actionable;
import appeng.api.config.FuzzyMode; import appeng.api.config.FuzzyMode;
import appeng.api.config.PowerMultiplier; import appeng.api.config.PowerMultiplier;
import appeng.api.implementations.ICraftingPatternItem;
import appeng.api.networking.IGrid; import appeng.api.networking.IGrid;
import appeng.api.networking.IGridHost; import appeng.api.networking.IGridHost;
import appeng.api.networking.IGridNode; import appeng.api.networking.IGridNode;
@@ -23,6 +26,7 @@ import appeng.api.networking.crafting.ICraftingPatternDetails;
import appeng.api.networking.energy.IEnergyGrid; import appeng.api.networking.energy.IEnergyGrid;
import appeng.api.networking.events.MENetworkCraftingCpuChange; import appeng.api.networking.events.MENetworkCraftingCpuChange;
import appeng.api.networking.security.BaseActionSource; import appeng.api.networking.security.BaseActionSource;
import appeng.api.networking.security.MachineSource;
import appeng.api.networking.storage.IBaseMonitor; import appeng.api.networking.storage.IBaseMonitor;
import appeng.api.networking.storage.IStorageGrid; import appeng.api.networking.storage.IStorageGrid;
import appeng.api.storage.IMEInventory; import appeng.api.storage.IMEInventory;
@@ -46,6 +50,36 @@ import cpw.mods.fml.common.FMLCommonHandler;
public class CraftingCPUCluster implements IAECluster, IBaseMonitor<IAEItemStack> public class CraftingCPUCluster implements IAECluster, IBaseMonitor<IAEItemStack>
{ {
class TaskProgress
{
long value;
};
/**
* crafting job info
*/
MECraftingInventory inventory = new MECraftingInventory();
IAEItemStack finalOutput;
boolean waiting = false;
private boolean isComplete = true;
Map<ICraftingPatternDetails, TaskProgress> tasks = new HashMap<ICraftingPatternDetails, TaskProgress>();
IItemList<IAEItemStack> waitingFor = AEApi.instance().storage().createItemList();
// instance sate
private LinkedList<TileCraftingTile> tiles = new LinkedList();
private LinkedList<TileCraftingTile> storage = new LinkedList<TileCraftingTile>();
private LinkedList<TileCraftingTile> status = new LinkedList<TileCraftingTile>();
MachineSource machineSrc = null;
int accelerator = 0;
public WorldCoord min;
public WorldCoord max;
public boolean isDestroyed = false;
private final HashMap<IMEMonitorHandlerReceiver<IAEItemStack>, Object> listeners = new HashMap<IMEMonitorHandlerReceiver<IAEItemStack>, Object>(); private final HashMap<IMEMonitorHandlerReceiver<IAEItemStack>, Object> listeners = new HashMap<IMEMonitorHandlerReceiver<IAEItemStack>, Object>();
protected Iterator<Entry<IMEMonitorHandlerReceiver<IAEItemStack>, Object>> getListeners() protected Iterator<Entry<IMEMonitorHandlerReceiver<IAEItemStack>, Object>> getListeners()
@@ -85,23 +119,6 @@ public class CraftingCPUCluster implements IAECluster, IBaseMonitor<IAEItemStack
listeners.remove( l ); listeners.remove( l );
} }
public WorldCoord min;
public WorldCoord max;
public boolean isDestroyed = false;
private boolean isComplete = true;
class TaskProgress
{
int value;
};
private LinkedList<TileCraftingTile> tiles = new LinkedList();
int accelerator = 0;
private LinkedList<TileCraftingTile> storage = new LinkedList<TileCraftingTile>();
private LinkedList<TileCraftingTile> status = new LinkedList<TileCraftingTile>();
public void getListOfItem(IItemList<IAEItemStack> list, CraftingItemList whichList) public void getListOfItem(IItemList<IAEItemStack> list, CraftingItemList whichList)
{ {
switch (whichList) switch (whichList)
@@ -145,24 +162,17 @@ public class CraftingCPUCluster implements IAECluster, IBaseMonitor<IAEItemStack
} }
} }
/**
* crafting job info
*/
MECraftingInventory inventory = new MECraftingInventory();
IAEItemStack finalOutput;
BaseActionSource mySrc;
boolean waiting = false;
Map<ICraftingPatternDetails, TaskProgress> tasks = new HashMap<ICraftingPatternDetails, TaskProgress>();
IItemList<IAEItemStack> waitingFor = AEApi.instance().storage().createItemList();
@Override @Override
public Iterator<IGridHost> getTiles() public Iterator<IGridHost> getTiles()
{ {
return (Iterator) tiles.iterator(); return (Iterator) tiles.iterator();
} }
public IMEInventory<IAEItemStack> getInventory()
{
return inventory;
}
public CraftingCPUCluster(WorldCoord _min, WorldCoord _max) { public CraftingCPUCluster(WorldCoord _min, WorldCoord _max) {
min = _min; min = _min;
max = _max; max = _max;
@@ -205,6 +215,11 @@ public class CraftingCPUCluster implements IAECluster, IBaseMonitor<IAEItemStack
public void addTile(TileCraftingTile te) public void addTile(TileCraftingTile te)
{ {
if ( machineSrc == null || te.isCoreBlock )
machineSrc = new MachineSource( te );
te.isCoreBlock = false;
te.markDirty();
tiles.add( te ); tiles.add( te );
if ( te.isStorage() ) if ( te.isStorage() )
@@ -240,6 +255,7 @@ public class CraftingCPUCluster implements IAECluster, IBaseMonitor<IAEItemStack
if ( is.getStackSize() >= input.getStackSize() ) if ( is.getStackSize() >= input.getStackSize() )
{ {
is.decStackSize( input.getStackSize() ); is.decStackSize( input.getStackSize() );
markDirty();
// AELog.info( "Task: " + is.getStackSize() + " remaining : " + getRemainingTasks() + // AELog.info( "Task: " + is.getStackSize() + " remaining : " + getRemainingTasks() +
// " remaining : " // " remaining : "
@@ -279,6 +295,7 @@ public class CraftingCPUCluster implements IAECluster, IBaseMonitor<IAEItemStack
} }
inventory.injectItems( insert, type, src ); inventory.injectItems( insert, type, src );
markDirty();
return what; return what;
} }
@@ -290,9 +307,17 @@ public class CraftingCPUCluster implements IAECluster, IBaseMonitor<IAEItemStack
public IGrid getGrid() public IGrid getGrid()
{ {
for (TileCraftingTile r : tiles) for (TileCraftingTile r : tiles)
return r.getActionableNode().getGrid(); {
IGridNode gn = r.getActionableNode();
if ( gn != null )
{
IGrid g = gn.getGrid();
if ( g != null )
return r.getActionableNode().getGrid();
}
}
throw new RuntimeException( "No tiles inside a cpu cluster." ); return null;
} }
private void completeJob() private void completeJob()
@@ -314,7 +339,7 @@ public class CraftingCPUCluster implements IAECluster, IBaseMonitor<IAEItemStack
{ {
fuzz = fuzz.copy(); fuzz = fuzz.copy();
fuzz.setStackSize( g.getStackSize() ); fuzz.setStackSize( g.getStackSize() );
IAEItemStack ais = inventory.extractItems( fuzz, Actionable.SIMULATE, null ); IAEItemStack ais = inventory.extractItems( fuzz, Actionable.SIMULATE, machineSrc );
ItemStack is = ais == null ? null : ais.getItemStack(); ItemStack is = ais == null ? null : ais.getItemStack();
if ( is != null && is.stackSize == g.getStackSize() ) if ( is != null && is.stackSize == g.getStackSize() )
@@ -329,7 +354,7 @@ public class CraftingCPUCluster implements IAECluster, IBaseMonitor<IAEItemStack
} }
else else
{ {
IAEItemStack ais = inventory.extractItems( g.copy(), Actionable.SIMULATE, null ); IAEItemStack ais = inventory.extractItems( g.copy(), Actionable.SIMULATE, machineSrc );
ItemStack is = ais == null ? null : ais.getItemStack(); ItemStack is = ais == null ? null : ais.getItemStack();
if ( is == null || is.stackSize < g.getStackSize() ) if ( is == null || is.stackSize < g.getStackSize() )
@@ -345,6 +370,7 @@ public class CraftingCPUCluster implements IAECluster, IBaseMonitor<IAEItemStack
isComplete = true; isComplete = true;
tasks.clear(); tasks.clear();
waitingFor.resetStatus(); waitingFor.resetStatus();
storeItems(); // marks dirty
} }
public void updateCraftingLogic(IGrid grid, IEnergyGrid eg, CraftingCache cc) public void updateCraftingLogic(IGrid grid, IEnergyGrid eg, CraftingCache cc)
@@ -354,23 +380,7 @@ public class CraftingCPUCluster implements IAECluster, IBaseMonitor<IAEItemStack
if ( inventory.getItemList().isEmpty() ) if ( inventory.getItemList().isEmpty() )
return; return;
IStorageGrid sg = grid.getCache( IStorageGrid.class ); storeItems();
IMEInventory<IAEItemStack> ii = sg.getItemInventory();
for (IAEItemStack is : inventory.getItemList())
{
is = inventory.extractItems( is.copy(), Actionable.MODULATE, mySrc );
if ( is != null )
is = ii.injectItems( is, Actionable.MODULATE, mySrc );
if ( is != null )
inventory.injectItems( is, Actionable.MODULATE, mySrc );
}
if ( inventory.getItemList().isEmpty() )
inventory = new MECraftingInventory();
return; return;
} }
@@ -428,7 +438,7 @@ public class CraftingCPUCluster implements IAECluster, IBaseMonitor<IAEItemStack
{ {
fuzz = fuzz.copy(); fuzz = fuzz.copy();
fuzz.setStackSize( input[x].getStackSize() ); fuzz.setStackSize( input[x].getStackSize() );
IAEItemStack ais = inventory.extractItems( fuzz, Actionable.MODULATE, mySrc ); IAEItemStack ais = inventory.extractItems( fuzz, Actionable.MODULATE, machineSrc );
ItemStack is = ais == null ? null : ais.getItemStack(); ItemStack is = ais == null ? null : ais.getItemStack();
if ( is != null && details.isValidItemForSlot( x, is, getWorld() ) ) if ( is != null && details.isValidItemForSlot( x, is, getWorld() ) )
@@ -441,7 +451,7 @@ public class CraftingCPUCluster implements IAECluster, IBaseMonitor<IAEItemStack
} }
else else
{ {
IAEItemStack ais = inventory.extractItems( input[x].copy(), Actionable.MODULATE, mySrc ); IAEItemStack ais = inventory.extractItems( input[x].copy(), Actionable.MODULATE, machineSrc );
ItemStack is = ais == null ? null : ais.getItemStack(); ItemStack is = ais == null ? null : ais.getItemStack();
if ( is != null ) if ( is != null )
@@ -465,7 +475,7 @@ public class CraftingCPUCluster implements IAECluster, IBaseMonitor<IAEItemStack
{ {
ItemStack is = ic.getStackInSlot( x ); ItemStack is = ic.getStackInSlot( x );
if ( is != null ) if ( is != null )
inventory.injectItems( AEItemStack.create( is ), Actionable.MODULATE, mySrc ); inventory.injectItems( AEItemStack.create( is ), Actionable.MODULATE, machineSrc );
} }
ic = null; ic = null;
break; break;
@@ -494,6 +504,7 @@ public class CraftingCPUCluster implements IAECluster, IBaseMonitor<IAEItemStack
} }
ic = null; // hand off complete! ic = null; // hand off complete!
markDirty();
e.getValue().value--; e.getValue().value--;
if ( e.getValue().value <= 0 ) if ( e.getValue().value <= 0 )
@@ -512,7 +523,9 @@ public class CraftingCPUCluster implements IAECluster, IBaseMonitor<IAEItemStack
{ {
ItemStack is = ic.getStackInSlot( x ); ItemStack is = ic.getStackInSlot( x );
if ( is != null ) if ( is != null )
inventory.injectItems( AEItemStack.create( is ), Actionable.MODULATE, mySrc ); {
inventory.injectItems( AEItemStack.create( is ), Actionable.MODULATE, machineSrc );
}
} }
} }
} }
@@ -522,6 +535,32 @@ public class CraftingCPUCluster implements IAECluster, IBaseMonitor<IAEItemStack
waiting = true; waiting = true;
} }
private void storeItems()
{
IGrid g = getGrid();
if ( g == null )
return;
IStorageGrid sg = g.getCache( IStorageGrid.class );
IMEInventory<IAEItemStack> ii = sg.getItemInventory();
for (IAEItemStack is : inventory.getItemList())
{
is = inventory.extractItems( is.copy(), Actionable.MODULATE, machineSrc );
if ( is != null )
is = ii.injectItems( is, Actionable.MODULATE, machineSrc );
if ( is != null )
inventory.injectItems( is, Actionable.MODULATE, machineSrc );
}
if ( inventory.getItemList().isEmpty() )
inventory = new MECraftingInventory();
markDirty();
}
private World getWorld() private World getWorld()
{ {
return null; return null;
@@ -544,7 +583,7 @@ public class CraftingCPUCluster implements IAECluster, IBaseMonitor<IAEItemStack
finalOutput = job.getOutput(); finalOutput = job.getOutput();
waiting = false; waiting = false;
isComplete = false; isComplete = false;
mySrc = src; markDirty();
return true; return true;
} }
catch (CraftBranchFailure e) catch (CraftBranchFailure e)
@@ -557,6 +596,16 @@ public class CraftingCPUCluster implements IAECluster, IBaseMonitor<IAEItemStack
return false; return false;
} }
private void markDirty()
{
getCore().markDirty();
}
private TileCraftingTile getCore()
{
return (TileCraftingTile) machineSrc.via;
}
public void addStorage(IAEItemStack extractItems) public void addStorage(IAEItemStack extractItems)
{ {
inventory.injectItems( extractItems, Actionable.MODULATE, null ); inventory.injectItems( extractItems, Actionable.MODULATE, null );
@@ -623,4 +672,105 @@ public class CraftingCPUCluster implements IAECluster, IBaseMonitor<IAEItemStack
return is; return is;
} }
public void readFromNBT(NBTTagCompound data)
{
finalOutput = AEItemStack.loadItemStackFromNBT( (NBTTagCompound) data.getTag( "finalOutput" ) );
for (IAEItemStack ais : readList( (NBTTagList) data.getTag( "inventory" ) ))
inventory.injectItems( ais, Actionable.MODULATE, machineSrc );
waiting = data.getBoolean( "waiting" );
isComplete = data.getBoolean( "isComplete" );
NBTTagList list = data.getTagList( "tasks", 10 );
for (int x = 0; x < list.tagCount(); x++)
{
NBTTagCompound item = list.getCompoundTagAt( x );
IAEItemStack pattern = AEItemStack.loadItemStackFromNBT( item );
if ( pattern != null && pattern.getItem() instanceof ICraftingPatternItem )
{
ICraftingPatternItem cpi = (ICraftingPatternItem) pattern.getItem();
ICraftingPatternDetails details = cpi.getPatternForItem( pattern.getItemStack(), getWorld() );
if ( details != null )
{
TaskProgress tp = new TaskProgress();
tp.value = item.getLong( "craftingProgress" );
tasks.put( details, tp );
}
}
}
waitingFor = readList( (NBTTagList) data.getTag( "waitingFor" ) );
}
public void writeToNBT(NBTTagCompound data)
{
data.setTag( "finalOutput", writeItem( finalOutput ) );
data.setTag( "inventory", writeList( inventory.getItemList() ) );
data.setBoolean( "waiting", waiting );
data.setBoolean( "isComplete", isComplete );
NBTTagList list = new NBTTagList();
for (Entry<ICraftingPatternDetails, TaskProgress> e : tasks.entrySet())
{
NBTTagCompound item = writeItem( AEItemStack.create( e.getKey().getPattern() ) );
item.setLong( "craftingProgress", e.getValue().value );
list.appendTag( item );
}
data.setTag( "tasks", list );
data.setTag( "waitingFor", writeList( waitingFor ) );
}
private IItemList<IAEItemStack> readList(NBTTagList tag)
{
IItemList<IAEItemStack> out = AEApi.instance().storage().createItemList();
for (int x = 0; x < tag.tagCount(); x++)
{
IAEItemStack ais = AEItemStack.loadItemStackFromNBT( tag.getCompoundTagAt( x ) );
if ( ais != null )
out.add( ais );
}
return out;
}
private NBTTagList writeList(IItemList<IAEItemStack> myList)
{
NBTTagList out = new NBTTagList();
for (IAEItemStack ais : myList)
out.appendTag( writeItem( ais ) );
return out;
}
private NBTTagCompound writeItem(IAEItemStack finalOutput2)
{
NBTTagCompound out = new NBTTagCompound();
if ( finalOutput2 != null )
finalOutput2.writeToNBT( out );
return out;
}
public void done()
{
TileCraftingTile core = getCore();
core.isCoreBlock = true;
if ( core.previousState != null )
{
readFromNBT( core.previousState );
core.previousState = null;
}
}
public BaseActionSource getActionSource()
{
return machineSrc;
}
} }
+25 -22
View File
@@ -528,46 +528,49 @@ public class CableBusContainer implements AEMultiTile, ICableBusContainer
public void setSide(ForgeDirection s) public void setSide(ForgeDirection s)
{ {
ForgeDirection ax, ay, az;
switch (s) switch (s)
{ {
case DOWN: case DOWN:
BusRenderHelper.instance.ax = ForgeDirection.EAST; ax = ForgeDirection.EAST;
BusRenderHelper.instance.ay = ForgeDirection.NORTH; ay = ForgeDirection.NORTH;
BusRenderHelper.instance.az = ForgeDirection.DOWN; az = ForgeDirection.DOWN;
break; break;
case UP: case UP:
BusRenderHelper.instance.ax = ForgeDirection.EAST; ax = ForgeDirection.EAST;
BusRenderHelper.instance.ay = ForgeDirection.SOUTH; ay = ForgeDirection.SOUTH;
BusRenderHelper.instance.az = ForgeDirection.UP; az = ForgeDirection.UP;
break; break;
case EAST: case EAST:
BusRenderHelper.instance.ax = ForgeDirection.SOUTH; ax = ForgeDirection.SOUTH;
BusRenderHelper.instance.ay = ForgeDirection.UP; ay = ForgeDirection.UP;
BusRenderHelper.instance.az = ForgeDirection.EAST; az = ForgeDirection.EAST;
break; break;
case WEST: case WEST:
BusRenderHelper.instance.ax = ForgeDirection.NORTH; ax = ForgeDirection.NORTH;
BusRenderHelper.instance.ay = ForgeDirection.UP; ay = ForgeDirection.UP;
BusRenderHelper.instance.az = ForgeDirection.WEST; az = ForgeDirection.WEST;
break; break;
case NORTH: case NORTH:
BusRenderHelper.instance.ax = ForgeDirection.WEST; ax = ForgeDirection.WEST;
BusRenderHelper.instance.ay = ForgeDirection.UP; ay = ForgeDirection.UP;
BusRenderHelper.instance.az = ForgeDirection.NORTH; az = ForgeDirection.NORTH;
break; break;
case SOUTH: case SOUTH:
BusRenderHelper.instance.ax = ForgeDirection.EAST; ax = ForgeDirection.EAST;
BusRenderHelper.instance.ay = ForgeDirection.UP; ay = ForgeDirection.UP;
BusRenderHelper.instance.az = ForgeDirection.SOUTH; az = ForgeDirection.SOUTH;
break; break;
case UNKNOWN: case UNKNOWN:
default: default:
BusRenderHelper.instance.ax = ForgeDirection.EAST; ax = ForgeDirection.EAST;
BusRenderHelper.instance.ay = ForgeDirection.UP; ay = ForgeDirection.UP;
BusRenderHelper.instance.az = ForgeDirection.SOUTH; az = ForgeDirection.SOUTH;
break; break;
} }
BusRenderHelper.instance.setOrientation( ax, ay, az );
} }
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
+8 -1
View File
@@ -25,6 +25,7 @@ public class UpgradeInventory extends AppEngInternalInventory implements IAEAppE
private int RedstoneUpgrades = 0; private int RedstoneUpgrades = 0;
private int CapacityUpgrades = 0; private int CapacityUpgrades = 0;
private int InverterUpgrades = 0; private int InverterUpgrades = 0;
private int CraftingUpgrades = 0;
public UpgradeInventory(Object itemOrBlock, IAEAppEngInventory _te, int s) { public UpgradeInventory(Object itemOrBlock, IAEAppEngInventory _te, int s) {
super( null, s ); super( null, s );
@@ -98,7 +99,7 @@ public class UpgradeInventory extends AppEngInternalInventory implements IAEAppE
private void updateUpgradeInfo() private void updateUpgradeInfo()
{ {
cached = true; cached = true;
InverterUpgrades = CapacityUpgrades = RedstoneUpgrades = SpeedUpgrades = FuzzyUpgrades = 0; InverterUpgrades = CapacityUpgrades = RedstoneUpgrades = SpeedUpgrades = FuzzyUpgrades = CraftingUpgrades = 0;
for (ItemStack is : this) for (ItemStack is : this)
{ {
@@ -123,6 +124,9 @@ public class UpgradeInventory extends AppEngInternalInventory implements IAEAppE
case INVERTER: case INVERTER:
InverterUpgrades++; InverterUpgrades++;
break; break;
case CRAFTING:
CraftingUpgrades++;
break;
default: default:
break; break;
} }
@@ -133,6 +137,7 @@ public class UpgradeInventory extends AppEngInternalInventory implements IAEAppE
RedstoneUpgrades = Math.min( RedstoneUpgrades, getMaxInstalled( Upgrades.REDSTONE ) ); RedstoneUpgrades = Math.min( RedstoneUpgrades, getMaxInstalled( Upgrades.REDSTONE ) );
SpeedUpgrades = Math.min( SpeedUpgrades, getMaxInstalled( Upgrades.SPEED ) ); SpeedUpgrades = Math.min( SpeedUpgrades, getMaxInstalled( Upgrades.SPEED ) );
InverterUpgrades = Math.min( InverterUpgrades, getMaxInstalled( Upgrades.INVERTER ) ); InverterUpgrades = Math.min( InverterUpgrades, getMaxInstalled( Upgrades.INVERTER ) );
CraftingUpgrades = Math.min( CraftingUpgrades, getMaxInstalled( Upgrades.CRAFTING ) );
} }
public int getInstalledUpgrades(Upgrades u) public int getInstalledUpgrades(Upgrades u)
@@ -152,6 +157,8 @@ public class UpgradeInventory extends AppEngInternalInventory implements IAEAppE
return SpeedUpgrades; return SpeedUpgrades;
case INVERTER: case INVERTER:
return InverterUpgrades; return InverterUpgrades;
case CRAFTING:
return CraftingUpgrades;
default: default:
return 0; return 0;
} }
@@ -1,12 +0,0 @@
package appeng.parts.networking;
import net.minecraft.item.ItemStack;
public class PartLumenCableCovered extends PartCableCovered
{
public PartLumenCableCovered(ItemStack is) {
super( is );
}
}
-12
View File
@@ -1,12 +0,0 @@
package appeng.parts.networking;
import net.minecraft.item.ItemStack;
public class PartLumenCableGlass extends PartCableGlass
{
public PartLumenCableGlass(ItemStack is) {
super( is );
}
}
-12
View File
@@ -1,12 +0,0 @@
package appeng.parts.networking;
import net.minecraft.item.ItemStack;
public class PartLumenCableSmart extends PartCableSmart
{
public PartLumenCableSmart(ItemStack is) {
super( is );
}
}
-12
View File
@@ -1,12 +0,0 @@
package appeng.parts.networking;
import net.minecraft.item.ItemStack;
public class PartLumenDenseCable extends PartDenseCable
{
public PartLumenDenseCable(ItemStack is) {
super( is );
}
}
+60 -3
View File
@@ -5,6 +5,9 @@ import java.util.List;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import appeng.api.implementations.ICraftingPatternItem;
import appeng.api.networking.crafting.ICraftingPatternDetails;
import appeng.api.storage.data.IAEItemStack;
import appeng.client.texture.CableBusTextures; import appeng.client.texture.CableBusTextures;
import appeng.core.sync.GuiBridge; import appeng.core.sync.GuiBridge;
import appeng.tile.inventory.AppEngInternalInventory; import appeng.tile.inventory.AppEngInternalInventory;
@@ -18,13 +21,13 @@ public class PartPatternTerminal extends PartTerminal implements IAEAppEngInvent
AppEngInternalInventory output = new AppEngInternalInventory( this, 3 ); AppEngInternalInventory output = new AppEngInternalInventory( this, 3 );
AppEngInternalInventory pattern = new AppEngInternalInventory( this, 2 ); AppEngInternalInventory pattern = new AppEngInternalInventory( this, 2 );
public boolean craftingMode = true; private boolean craftingMode = true;
@Override @Override
public void writeToNBT(NBTTagCompound data) public void writeToNBT(NBTTagCompound data)
{ {
super.writeToNBT( data ); super.writeToNBT( data );
data.setBoolean( "craftingMode", craftingMode ); data.setBoolean( "craftingMode", isCraftingRecipe() );
pattern.writeToNBT( data, "pattern" ); pattern.writeToNBT( data, "pattern" );
output.writeToNBT( data, "outputList" ); output.writeToNBT( data, "outputList" );
crafting.writeToNBT( data, "craftingGrid" ); crafting.writeToNBT( data, "craftingGrid" );
@@ -34,7 +37,7 @@ public class PartPatternTerminal extends PartTerminal implements IAEAppEngInvent
public void readFromNBT(NBTTagCompound data) public void readFromNBT(NBTTagCompound data)
{ {
super.readFromNBT( data ); super.readFromNBT( data );
craftingMode = data.getBoolean( "craftingMode" ); setCraftingRecipe( data.getBoolean( "craftingMode" ) );
pattern.readFromNBT( data, "pattern" ); pattern.readFromNBT( data, "pattern" );
output.readFromNBT( data, "outputList" ); output.readFromNBT( data, "outputList" );
crafting.readFromNBT( data, "craftingGrid" ); crafting.readFromNBT( data, "craftingGrid" );
@@ -78,6 +81,60 @@ public class PartPatternTerminal extends PartTerminal implements IAEAppEngInvent
@Override @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 ( inv == pattern && slot == 1 )
{
ItemStack is = pattern.getStackInSlot( 1 );
if ( is != null && is.getItem() instanceof ICraftingPatternItem )
{
ICraftingPatternItem pattern = (ICraftingPatternItem) is.getItem();
ICraftingPatternDetails details = pattern.getPatternForItem( is, this.getHost().getTile().getWorldObj() );
if ( details != null )
{
setCraftingRecipe( details.isCraftable() );
for (int x = 0; x < crafting.getSizeInventory() && x < details.getInputs().length; x++)
{
IAEItemStack aeis = details.getInputs()[x];
crafting.setInventorySlotContents( x, aeis == null ? null : aeis.getItemStack() );
}
for (int x = 0; x < output.getSizeInventory() && x < details.getOutputs().length; x++)
{
IAEItemStack aeis = details.getOutputs()[x];
output.setInventorySlotContents( x, aeis == null ? null : aeis.getItemStack() );
}
}
}
}
else if ( inv == crafting )
{
fixCraftingRecipes();
}
host.markForSave(); host.markForSave();
} }
public boolean isCraftingRecipe()
{
return craftingMode;
}
public void setCraftingRecipe(boolean craftingMode)
{
this.craftingMode = craftingMode;
fixCraftingRecipes();
}
private void fixCraftingRecipes()
{
if ( isCraftingRecipe() )
{
for (int x = 0; x < crafting.getSizeInventory(); x++)
{
ItemStack is = crafting.getStackInSlot( x );
if ( is != null )
is.stackSize = 1;
}
}
}
} }
+104
View File
@@ -1,22 +1,36 @@
package appeng.tile.crafting; package appeng.tile.crafting;
import java.util.Arrays;
import java.util.Collections;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.Iterator;
import java.util.LinkedList;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
import appeng.api.config.Actionable;
import appeng.api.implementations.IPowerChannelState; import appeng.api.implementations.IPowerChannelState;
import appeng.api.networking.GridFlags; import appeng.api.networking.GridFlags;
import appeng.api.networking.IGridHost;
import appeng.api.networking.events.MENetworkChannelsChanged; import appeng.api.networking.events.MENetworkChannelsChanged;
import appeng.api.networking.events.MENetworkEventSubscribe; import appeng.api.networking.events.MENetworkEventSubscribe;
import appeng.api.networking.events.MENetworkPowerStatusChange; import appeng.api.networking.events.MENetworkPowerStatusChange;
import appeng.api.parts.ISimplifiedBundle; import appeng.api.parts.ISimplifiedBundle;
import appeng.api.storage.IMEInventory;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.util.WorldCoord;
import appeng.me.cluster.IAECluster; import appeng.me.cluster.IAECluster;
import appeng.me.cluster.IAEMultiBlock; import appeng.me.cluster.IAEMultiBlock;
import appeng.me.cluster.implementations.CraftingCPUCalculator; import appeng.me.cluster.implementations.CraftingCPUCalculator;
import appeng.me.cluster.implementations.CraftingCPUCluster; import appeng.me.cluster.implementations.CraftingCPUCluster;
import appeng.me.helpers.AENetworkProxy; import appeng.me.helpers.AENetworkProxy;
import appeng.me.helpers.AENetworkProxyMultiblock; import appeng.me.helpers.AENetworkProxyMultiblock;
import appeng.tile.events.AETileEventHandler;
import appeng.tile.events.TileEventType;
import appeng.tile.grid.AENetworkTile; import appeng.tile.grid.AENetworkTile;
import appeng.util.Platform; import appeng.util.Platform;
import appeng.util.item.ItemList;
public class TileCraftingTile extends AENetworkTile implements IAEMultiBlock, IPowerChannelState public class TileCraftingTile extends AENetworkTile implements IAEMultiBlock, IPowerChannelState
{ {
@@ -25,6 +39,9 @@ public class TileCraftingTile extends AENetworkTile implements IAEMultiBlock, IP
final CraftingCPUCalculator calc = new CraftingCPUCalculator( this ); final CraftingCPUCalculator calc = new CraftingCPUCalculator( this );
public ISimplifiedBundle lightCache; public ISimplifiedBundle lightCache;
public NBTTagCompound previousState = null;
public boolean isCoreBlock = false;
@Override @Override
protected AENetworkProxy createProxy() protected AENetworkProxy createProxy()
{ {
@@ -42,7 +59,38 @@ public class TileCraftingTile extends AENetworkTile implements IAEMultiBlock, IP
calc.calculateMultiblock( worldObj, getLocation() ); calc.calculateMultiblock( worldObj, getLocation() );
} }
private class CraftingHandler extends AETileEventHandler
{
public CraftingHandler() {
super( TileEventType.WORLD_NBT );
}
@Override
public void writeToNBT(NBTTagCompound data)
{
data.setBoolean( "core", isCoreBlock );
if ( isCoreBlock && clust != null )
clust.writeToNBT( data );
}
@Override
public void readFromNBT(NBTTagCompound data)
{
isCoreBlock = data.getBoolean( "core" );
if ( isCoreBlock )
{
if ( clust != null )
clust.readFromNBT( data );
else
previousState = (NBTTagCompound) data.copy();
}
}
};
public TileCraftingTile() { public TileCraftingTile() {
addNewHandler( new CraftingHandler() );
gridProxy.setFlags( GridFlags.MULTIBLOCK, GridFlags.REQUIRE_CHANNEL ); gridProxy.setFlags( GridFlags.MULTIBLOCK, GridFlags.REQUIRE_CHANNEL );
gridProxy.setValidSides( EnumSet.noneOf( ForgeDirection.class ) ); gridProxy.setValidSides( EnumSet.noneOf( ForgeDirection.class ) );
} }
@@ -164,4 +212,60 @@ public class TileCraftingTile extends AENetworkTile implements IAEMultiBlock, IP
return isPowered() && isFormed(); return isPowered() && isFormed();
} }
public void breakCluster()
{
if ( clust != null )
{
clust.cancel();
IMEInventory<IAEItemStack> inv = clust.getInventory();
LinkedList<WorldCoord> places = new LinkedList<WorldCoord>();
Iterator<IGridHost> i = clust.getTiles();
while (i.hasNext())
{
IGridHost h = i.next();
if ( h == this )
places.add( new WorldCoord( this ) );
else
{
TileEntity te = (TileEntity) h;
for (ForgeDirection d : ForgeDirection.VALID_DIRECTIONS)
{
WorldCoord wc = new WorldCoord( te );
wc.add( d, 1 );
if ( worldObj.isAirBlock( wc.x, wc.y, wc.z ) )
places.add( wc );
}
}
}
Collections.shuffle( places );
if ( places.isEmpty() )
throw new RuntimeException( "No air or even the tile hat was destroyed?!?!" );
for (IAEItemStack ais : inv.getAvailableItems( new ItemList<IAEItemStack>( IAEItemStack.class ) ))
{
ais = ais.copy();
ais.setStackSize( ais.getItemStack().getMaxStackSize() );
while (true)
{
IAEItemStack g = inv.extractItems( ais.copy(), Actionable.MODULATE, clust.getActionSource() );
if ( g == null )
break;
WorldCoord wc = places.poll();
places.add( wc );
Platform.spawnDrops( worldObj, wc.x, wc.y, wc.z, Arrays.asList( g.getItemStack() ) );
}
}
clust.destroy();
}
}
} }
+12 -6
View File
@@ -31,7 +31,7 @@ import appeng.util.Platform;
public class TileQuantumBridge extends AENetworkInvTile implements IAEMultiBlock public class TileQuantumBridge extends AENetworkInvTile implements IAEMultiBlock
{ {
final private static ItemStack ring = AEApi.instance().blocks().blockQuantumRing.stack(1); final private static ItemStack ring = AEApi.instance().blocks().blockQuantumRing.stack( 1 );
final int sidesRing[] = new int[] {}; final int sidesRing[] = new int[] {};
final int sidesLink[] = new int[] { 0 }; final int sidesLink[] = new int[] { 0 };
@@ -134,7 +134,7 @@ public class TileQuantumBridge extends AENetworkInvTile implements IAEMultiBlock
{ {
if ( clust != null ) if ( clust != null )
{ {
if ( ! affectWorld ) if ( !affectWorld )
clust.updateStatus = false; clust.updateStatus = false;
clust.destroy(); clust.destroy();
@@ -162,21 +162,21 @@ public class TileQuantumBridge extends AENetworkInvTile implements IAEMultiBlock
public void onReady() public void onReady()
{ {
super.onReady(); super.onReady();
if ( worldObj.getBlock( xCoord, yCoord, zCoord) == AEApi.instance().blocks().blockQuantumRing.block() ) if ( worldObj.getBlock( xCoord, yCoord, zCoord ) == AEApi.instance().blocks().blockQuantumRing.block() )
gridProxy.setVisualRepresentation( ring ); gridProxy.setVisualRepresentation( ring );
} }
@Override @Override
public void invalidate() public void invalidate()
{ {
disconnect(false); disconnect( false );
super.invalidate(); super.invalidate();
} }
@Override @Override
public void onChunkUnload() public void onChunkUnload()
{ {
disconnect(false); disconnect( false );
super.onChunkUnload(); super.onChunkUnload();
} }
@@ -189,7 +189,7 @@ public class TileQuantumBridge extends AENetworkInvTile implements IAEMultiBlock
if ( xdex != flags ) if ( xdex != flags )
{ {
xdex = flags; xdex = flags;
markForUpdate(); markForUpdate();
} }
if ( isCorner() || isCenter() ) if ( isCorner() || isCenter() )
@@ -283,4 +283,10 @@ public class TileQuantumBridge extends AENetworkInvTile implements IAEMultiBlock
return (xdex & hasSingularity) == hasSingularity; return (xdex & hasSingularity) == hasSingularity;
} }
public void breakCluster()
{
if ( clust != null )
clust.destroy();
}
} }
+6 -3
View File
@@ -37,17 +37,20 @@ public class AEItemDef
static AESharedNBT lowTag = new AESharedNBT( Integer.MIN_VALUE ); static AESharedNBT lowTag = new AESharedNBT( Integer.MIN_VALUE );
static AESharedNBT highTag = new AESharedNBT( Integer.MAX_VALUE ); static AESharedNBT highTag = new AESharedNBT( Integer.MAX_VALUE );
public AEItemDef(Item it) {
item = it;
itemID = System.identityHashCode( item );
}
public AEItemDef copy() public AEItemDef copy()
{ {
AEItemDef t = new AEItemDef(); AEItemDef t = new AEItemDef( item );
t.def = def; t.def = def;
t.item = item;
t.damageValue = damageValue; t.damageValue = damageValue;
t.dspDamage = dspDamage; t.dspDamage = dspDamage;
t.maxDamage = maxDamage; t.maxDamage = maxDamage;
t.tagCompound = tagCompound; t.tagCompound = tagCompound;
t.isOre = isOre; t.isOre = isOre;
t.itemID = itemID;
return t; return t;
} }
+1 -2
View File
@@ -57,8 +57,7 @@ public final class AEItemStack extends AEStack<IAEItemStack> implements IAEItemS
if ( is == null ) if ( is == null )
throw new RuntimeException( "Invalid Itemstack." ); throw new RuntimeException( "Invalid Itemstack." );
def = new AEItemDef(); def = new AEItemDef( is.getItem() );
def.item = is.getItem();
if ( def.item == null ) if ( def.item == null )
throw new RuntimeException( "This ItemStack is bad, it has a null item." ); throw new RuntimeException( "This ItemStack is bad, it has a null item." );