Facades and FMP parts can no longer overlap.

This commit is contained in:
AlgorithmX2 2014-04-19 23:35:48 -05:00
parent 2e71a6530e
commit fa307b467e
3 changed files with 50 additions and 9 deletions

View file

@ -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<AxisAlignedBB> 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();

View file

@ -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();
}

View file

@ -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