Merge branch 'rv1' of https://bitbucket.org/AlgorithmX2/appliedenergistics2 into rv1
This commit is contained in:
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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" ) )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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 ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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() ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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 );
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
package appeng.parts.networking;
|
|
||||||
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
|
|
||||||
public class PartLumenCableGlass extends PartCableGlass
|
|
||||||
{
|
|
||||||
|
|
||||||
public PartLumenCableGlass(ItemStack is) {
|
|
||||||
super( is );
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
package appeng.parts.networking;
|
|
||||||
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
|
|
||||||
public class PartLumenCableSmart extends PartCableSmart
|
|
||||||
{
|
|
||||||
|
|
||||||
public PartLumenCableSmart(ItemStack is) {
|
|
||||||
super( is );
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
package appeng.parts.networking;
|
|
||||||
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
|
|
||||||
public class PartLumenDenseCable extends PartDenseCable
|
|
||||||
{
|
|
||||||
|
|
||||||
public PartLumenDenseCable(ItemStack is) {
|
|
||||||
super( is );
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,8 +31,8 @@ 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,14 +134,14 @@ 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();
|
||||||
}
|
}
|
||||||
|
|
||||||
clust = null;
|
clust = null;
|
||||||
|
|
||||||
if ( affectWorld )
|
if ( affectWorld )
|
||||||
gridProxy.setValidSides( EnumSet.noneOf( ForgeDirection.class ) );
|
gridProxy.setValidSides( EnumSet.noneOf( ForgeDirection.class ) );
|
||||||
}
|
}
|
||||||
@@ -157,26 +157,26 @@ public class TileQuantumBridge extends AENetworkInvTile implements IAEMultiBlock
|
|||||||
{
|
{
|
||||||
return !isInvalid();
|
return !isInvalid();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
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,9 +189,9 @@ 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() )
|
||||||
{
|
{
|
||||||
gridProxy.setValidSides( getConnections() );
|
gridProxy.setValidSides( getConnections() );
|
||||||
@@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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." );
|
||||||
|
|||||||
Reference in New Issue
Block a user