diff --git a/fmp/CableBusPart.java b/fmp/CableBusPart.java index a4a6af0fe..63d25db27 100644 --- a/fmp/CableBusPart.java +++ b/fmp/CableBusPart.java @@ -23,6 +23,7 @@ import net.minecraftforge.common.util.ForgeDirection; import powercrystals.minefactoryreloaded.api.rednet.RedNetConnectionType; import appeng.api.networking.IGridNode; import appeng.api.parts.IFacadeContainer; +import appeng.api.parts.IFacadePart; import appeng.api.parts.IPart; import appeng.api.parts.IPartCollsionHelper; import appeng.api.parts.IPartHost; @@ -34,6 +35,7 @@ import appeng.api.util.AECableType; import appeng.api.util.AEColor; import appeng.api.util.DimensionalCoord; import appeng.core.AELog; +import appeng.facade.IFacadeItem; import appeng.helpers.AEMultiTile; import appeng.parts.BusCollisionHelper; import appeng.parts.CableBusContainer; @@ -282,6 +284,30 @@ public class CableBusPart extends JCuboidPart implements JNormalOcclusion, IReds @Override public boolean canAddPart(ItemStack is, ForgeDirection side) { + if ( is.getItem() instanceof IFacadeItem ) + { + IFacadeItem bi = (IFacadeItem) is.getItem(); + + is = is.copy(); + is.stackSize = 1; + + IFacadePart bp = bi.createPartFromItemStack( is, side ); + if ( !(side == null || side == ForgeDirection.UNKNOWN || tile() == null) ) + { + List boxes = new ArrayList(); + IPartCollsionHelper bch = new BusCollisionHelper( boxes, side, null, true ); + bp.getBoxes( bch ); + for (AxisAlignedBB bb : boxes) + { + if ( !tile().canAddPart( new NormallyOccludedPart( new Cuboid6( bb ) ) ) ) + { + return false; + } + } + } + return true; + } + if ( is.getItem() instanceof IPartItem ) { IPartItem bi = (IPartItem) is.getItem(); diff --git a/parts/CableBusContainer.java b/parts/CableBusContainer.java index 08ecc954e..04f76723a 100644 --- a/parts/CableBusContainer.java +++ b/parts/CableBusContainer.java @@ -41,6 +41,7 @@ import appeng.api.util.DimensionalCoord; import appeng.client.render.BusRenderHelper; import appeng.client.render.CableRenderHelper; import appeng.facade.FacadeContainer; +import appeng.facade.IFacadeItem; import appeng.helpers.AEMultiTile; import appeng.me.GridConnection; import appeng.util.Platform; @@ -140,6 +141,9 @@ public class CableBusContainer implements AEMultiTile, ICableBusContainer @Override public boolean canAddPart(ItemStack is, ForgeDirection side) { + if ( is.getItem() instanceof IFacadeItem ) + return true; + if ( is.getItem() instanceof IPartItem ) { IPartItem bi = (IPartItem) is.getItem(); @@ -390,6 +394,13 @@ public class CableBusContainer implements AEMultiTile, ICableBusContainer { IPartCollsionHelper bch = new BusCollisionHelper( boxes, s, e, visual ); + if ( s != ForgeDirection.UNKNOWN ) + { + IFacadePart fpa = fc.getFacade( s ); + if ( fpa != null ) + fpa.getBoxes( bch ); + } + IPart part = getPart( s ); if ( part != null ) { @@ -969,7 +980,8 @@ public class CableBusContainer implements AEMultiTile, ICableBusContainer } @Override - public void cleanup() { + public void cleanup() + { tcb.cleanup(); } diff --git a/parts/PartPlacement.java b/parts/PartPlacement.java index bff7ff4ba..f57c0df70 100644 --- a/parts/PartPlacement.java +++ b/parts/PartPlacement.java @@ -148,19 +148,22 @@ public class PartPlacement if ( host.getPart( ForgeDirection.UNKNOWN ) == null ) return false; - if ( host.getFacadeContainer().addFacade( fp ) ) + if ( host.canAddPart( held, side ) ) { - host.markForUpdate(); - if ( !player.capabilities.isCreativeMode ) + if ( host.getFacadeContainer().addFacade( fp ) ) { - held.stackSize--; - if ( held.stackSize == 0 ) + host.markForUpdate(); + if ( !player.capabilities.isCreativeMode ) { - player.inventory.mainInventory[player.inventory.currentItem] = null; - MinecraftForge.EVENT_BUS.post( new PlayerDestroyItemEvent( player, held ) ); + held.stackSize--; + if ( held.stackSize == 0 ) + { + player.inventory.mainInventory[player.inventory.currentItem] = null; + MinecraftForge.EVENT_BUS.post( new PlayerDestroyItemEvent( player, held ) ); + } } + return true; } - return true; } } else