Facades and FMP parts can no longer overlap.
This commit is contained in:
parent
2e71a6530e
commit
fa307b467e
3 changed files with 50 additions and 9 deletions
|
@ -23,6 +23,7 @@ import net.minecraftforge.common.util.ForgeDirection;
|
||||||
import powercrystals.minefactoryreloaded.api.rednet.RedNetConnectionType;
|
import powercrystals.minefactoryreloaded.api.rednet.RedNetConnectionType;
|
||||||
import appeng.api.networking.IGridNode;
|
import appeng.api.networking.IGridNode;
|
||||||
import appeng.api.parts.IFacadeContainer;
|
import appeng.api.parts.IFacadeContainer;
|
||||||
|
import appeng.api.parts.IFacadePart;
|
||||||
import appeng.api.parts.IPart;
|
import appeng.api.parts.IPart;
|
||||||
import appeng.api.parts.IPartCollsionHelper;
|
import appeng.api.parts.IPartCollsionHelper;
|
||||||
import appeng.api.parts.IPartHost;
|
import appeng.api.parts.IPartHost;
|
||||||
|
@ -34,6 +35,7 @@ import appeng.api.util.AECableType;
|
||||||
import appeng.api.util.AEColor;
|
import appeng.api.util.AEColor;
|
||||||
import appeng.api.util.DimensionalCoord;
|
import appeng.api.util.DimensionalCoord;
|
||||||
import appeng.core.AELog;
|
import appeng.core.AELog;
|
||||||
|
import appeng.facade.IFacadeItem;
|
||||||
import appeng.helpers.AEMultiTile;
|
import appeng.helpers.AEMultiTile;
|
||||||
import appeng.parts.BusCollisionHelper;
|
import appeng.parts.BusCollisionHelper;
|
||||||
import appeng.parts.CableBusContainer;
|
import appeng.parts.CableBusContainer;
|
||||||
|
@ -282,6 +284,30 @@ public class CableBusPart extends JCuboidPart implements JNormalOcclusion, IReds
|
||||||
@Override
|
@Override
|
||||||
public boolean canAddPart(ItemStack is, ForgeDirection side)
|
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 )
|
if ( is.getItem() instanceof IPartItem )
|
||||||
{
|
{
|
||||||
IPartItem bi = (IPartItem) is.getItem();
|
IPartItem bi = (IPartItem) is.getItem();
|
||||||
|
|
|
@ -41,6 +41,7 @@ import appeng.api.util.DimensionalCoord;
|
||||||
import appeng.client.render.BusRenderHelper;
|
import appeng.client.render.BusRenderHelper;
|
||||||
import appeng.client.render.CableRenderHelper;
|
import appeng.client.render.CableRenderHelper;
|
||||||
import appeng.facade.FacadeContainer;
|
import appeng.facade.FacadeContainer;
|
||||||
|
import appeng.facade.IFacadeItem;
|
||||||
import appeng.helpers.AEMultiTile;
|
import appeng.helpers.AEMultiTile;
|
||||||
import appeng.me.GridConnection;
|
import appeng.me.GridConnection;
|
||||||
import appeng.util.Platform;
|
import appeng.util.Platform;
|
||||||
|
@ -140,6 +141,9 @@ public class CableBusContainer implements AEMultiTile, ICableBusContainer
|
||||||
@Override
|
@Override
|
||||||
public boolean canAddPart(ItemStack is, ForgeDirection side)
|
public boolean canAddPart(ItemStack is, ForgeDirection side)
|
||||||
{
|
{
|
||||||
|
if ( is.getItem() instanceof IFacadeItem )
|
||||||
|
return true;
|
||||||
|
|
||||||
if ( is.getItem() instanceof IPartItem )
|
if ( is.getItem() instanceof IPartItem )
|
||||||
{
|
{
|
||||||
IPartItem bi = (IPartItem) is.getItem();
|
IPartItem bi = (IPartItem) is.getItem();
|
||||||
|
@ -390,6 +394,13 @@ public class CableBusContainer implements AEMultiTile, ICableBusContainer
|
||||||
{
|
{
|
||||||
IPartCollsionHelper bch = new BusCollisionHelper( boxes, s, e, visual );
|
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 );
|
IPart part = getPart( s );
|
||||||
if ( part != null )
|
if ( part != null )
|
||||||
{
|
{
|
||||||
|
@ -969,7 +980,8 @@ public class CableBusContainer implements AEMultiTile, ICableBusContainer
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void cleanup() {
|
public void cleanup()
|
||||||
|
{
|
||||||
tcb.cleanup();
|
tcb.cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -148,19 +148,22 @@ public class PartPlacement
|
||||||
if ( host.getPart( ForgeDirection.UNKNOWN ) == null )
|
if ( host.getPart( ForgeDirection.UNKNOWN ) == null )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if ( host.getFacadeContainer().addFacade( fp ) )
|
if ( host.canAddPart( held, side ) )
|
||||||
{
|
{
|
||||||
host.markForUpdate();
|
if ( host.getFacadeContainer().addFacade( fp ) )
|
||||||
if ( !player.capabilities.isCreativeMode )
|
|
||||||
{
|
{
|
||||||
held.stackSize--;
|
host.markForUpdate();
|
||||||
if ( held.stackSize == 0 )
|
if ( !player.capabilities.isCreativeMode )
|
||||||
{
|
{
|
||||||
player.inventory.mainInventory[player.inventory.currentItem] = null;
|
held.stackSize--;
|
||||||
MinecraftForge.EVENT_BUS.post( new PlayerDestroyItemEvent( player, held ) );
|
if ( held.stackSize == 0 )
|
||||||
|
{
|
||||||
|
player.inventory.mainInventory[player.inventory.currentItem] = null;
|
||||||
|
MinecraftForge.EVENT_BUS.post( new PlayerDestroyItemEvent( player, held ) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in a new issue