Added BC 6x support for facades and added builder support.

This commit is contained in:
AlgorithmX2 2014-05-11 11:28:34 -05:00
parent 1f126054e4
commit 9ad9c7b370
6 changed files with 281 additions and 4 deletions

View file

@ -1,5 +1,7 @@
package appeng.integration.modules; package appeng.integration.modules;
import java.lang.reflect.Field;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item; import net.minecraft.item.Item;
@ -12,12 +14,19 @@ import appeng.api.config.TunnelType;
import appeng.api.definitions.Blocks; import appeng.api.definitions.Blocks;
import appeng.api.features.IP2PTunnelRegistry; import appeng.api.features.IP2PTunnelRegistry;
import appeng.api.parts.IFacadePart; import appeng.api.parts.IFacadePart;
import appeng.api.util.AEItemDefinition;
import appeng.api.util.IOrientableBlock;
import appeng.core.AppEng;
import appeng.facade.FacadePart; import appeng.facade.FacadePart;
import appeng.integration.BaseModule; import appeng.integration.BaseModule;
import appeng.integration.abstraction.IBC; import appeng.integration.abstraction.IBC;
import appeng.integration.modules.helpers.BCPipeHandler; import appeng.integration.modules.BCHelpers.AECableSchematicTile;
import appeng.integration.modules.BCHelpers.AEGenericSchematicTile;
import appeng.integration.modules.BCHelpers.AERotateableBlockSchematic;
import appeng.integration.modules.BCHelpers.BCPipeHandler;
import buildcraft.BuildCraftEnergy; import buildcraft.BuildCraftEnergy;
import buildcraft.BuildCraftTransport; import buildcraft.BuildCraftTransport;
import buildcraft.api.blueprints.SchematicRegistry;
import buildcraft.api.tools.IToolWrench; import buildcraft.api.tools.IToolWrench;
import buildcraft.api.transport.IPipeConnection; import buildcraft.api.transport.IPipeConnection;
import buildcraft.api.transport.IPipeTile; import buildcraft.api.transport.IPipeTile;
@ -189,7 +198,16 @@ public class BC extends BaseModule implements IBC
addFacade( b.blockQuartz.stack( 1 ) ); addFacade( b.blockQuartz.stack( 1 ) );
addFacade( b.blockQuartzChiseled.stack( 1 ) ); addFacade( b.blockQuartzChiseled.stack( 1 ) );
addFacade( b.blockQuartzPiller.stack( 1 ) ); addFacade( b.blockQuartzPiller.stack( 1 ) );
try
{
initBuilderSupport();
}
catch (Throwable builderSupport)
{
// not supported?
}
Block skyStone = b.blockSkyStone.block(); Block skyStone = b.blockSkyStone.block();
if ( skyStone != null ) if ( skyStone != null )
{ {
@ -200,6 +218,42 @@ public class BC extends BaseModule implements IBC
} }
} }
private void initBuilderSupport()
{
SchematicRegistry.declareBlueprintSupport( AppEng.modid );
Blocks blks = AEApi.instance().blocks();
Block cable = blks.blockMultiPart.block();
for (Field f : blks.getClass().getFields())
{
AEItemDefinition def;
try
{
def = (AEItemDefinition) f.get( blks );
if ( def != null )
{
Block myBlock = def.block();
if ( myBlock instanceof IOrientableBlock && ((IOrientableBlock) myBlock).usesMetadata() && def.entity() == null )
{
SchematicRegistry.registerSchematicBlock( myBlock, AERotateableBlockSchematic.class );
}
else if ( myBlock == cable )
{
SchematicRegistry.registerSchematicBlock( myBlock, AECableSchematicTile.class );
}
else if ( def.entity() != null )
{
SchematicRegistry.registerSchematicBlock( myBlock, AEGenericSchematicTile.class );
}
}
}
catch (Throwable t)
{
// :P
}
}
}
@Override @Override
public void PostInit() public void PostInit()
{ {

View file

@ -0,0 +1,143 @@
package appeng.integration.modules.BCHelpers;
import java.util.Set;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Vec3;
import net.minecraftforge.common.util.ForgeDirection;
import appeng.api.parts.IFacadeContainer;
import appeng.api.parts.IPart;
import appeng.api.parts.IPartHost;
import appeng.api.parts.LayerFlags;
import appeng.api.parts.SelectedPart;
import appeng.api.util.AEColor;
import appeng.api.util.DimensionalCoord;
import appeng.parts.CableBusContainer;
import buildcraft.api.blueprints.IBuilderContext;
public class AECableSchematicTile extends AEGenericSchematicTile implements IPartHost
{
@Override
public void rotateLeft(IBuilderContext context)
{
CableBusContainer cbc = new CableBusContainer( this );
cbc.readFromNBT( cpt );
cbc.rotateLeft();
cpt = new NBTTagCompound();
cbc.writeToNBT( cpt );
}
@Override
public IFacadeContainer getFacadeContainer()
{
return null;
}
@Override
public boolean canAddPart(ItemStack part, ForgeDirection side)
{
return false;
}
@Override
public ForgeDirection addPart(ItemStack is, ForgeDirection side, EntityPlayer owner)
{
return null;
}
@Override
public IPart getPart(ForgeDirection side)
{
return null;
}
@Override
public void removePart(ForgeDirection side, boolean suppressUpdate)
{
}
@Override
public void markForUpdate()
{
}
@Override
public DimensionalCoord getLocation()
{
return null;
}
@Override
public TileEntity getTile()
{
return null;
}
@Override
public AEColor getColor()
{
return null;
}
@Override
public void clearContainer()
{
}
@Override
public boolean isBlocked(ForgeDirection side)
{
return false;
}
@Override
public SelectedPart selectPart(Vec3 pos)
{
return null;
}
@Override
public void markForSave()
{
}
@Override
public void partChanged()
{
}
@Override
public boolean hasRedstone(ForgeDirection side)
{
return false;
}
@Override
public boolean isEmpty()
{
return false;
}
@Override
public Set<LayerFlags> getLayerFlags()
{
return null;
}
@Override
public void cleanup()
{
}
}

View file

@ -0,0 +1,59 @@
package appeng.integration.modules.BCHelpers;
import java.util.ArrayList;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
import appeng.tile.AEBaseTile;
import appeng.util.Platform;
import buildcraft.api.blueprints.IBuilderContext;
import buildcraft.api.blueprints.SchematicTile;
public class AEGenericSchematicTile extends SchematicTile
{
@Override
public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z)
{
TileEntity tile = context.world().getTileEntity( x, y, z );
ArrayList<ItemStack> list = new ArrayList();
if ( tile instanceof AEBaseTile )
{
AEBaseTile tcb = (AEBaseTile) tile;
tcb.getDrops( tile.getWorldObj(), tile.xCoord, tile.yCoord, tile.zCoord, list );
}
storedRequirements = list.toArray( new ItemStack[list.size()] );
}
@Override
public void rotateLeft(IBuilderContext context)
{
if ( cpt.hasKey( "orientation_forward" ) && cpt.hasKey( "orientation_up" ) )
{
String forward = cpt.getString( "orientation_forward" );
String up = cpt.getString( "orientation_up" );
if ( forward != null && up != null )
{
try
{
ForgeDirection fdForward = ForgeDirection.valueOf( forward );
ForgeDirection fdUp = ForgeDirection.valueOf( up );
fdForward = Platform.rotateAround( fdForward, ForgeDirection.DOWN );
fdUp = Platform.rotateAround( fdUp, ForgeDirection.DOWN );
cpt.setString( "orientation_forward", fdForward.name() );
cpt.setString( "orientation_up", fdUp.name() );
}
catch (Throwable t)
{
}
}
}
}
}

View file

@ -0,0 +1,21 @@
package appeng.integration.modules.BCHelpers;
import net.minecraftforge.common.util.ForgeDirection;
import appeng.util.Platform;
import buildcraft.api.blueprints.IBuilderContext;
import buildcraft.api.blueprints.SchematicBlock;
public class AERotateableBlockSchematic extends SchematicBlock
{
@Override
public void rotateLeft(IBuilderContext context)
{
if ( meta < 6 )
{
ForgeDirection d = Platform.rotateAround( ForgeDirection.values()[meta], ForgeDirection.DOWN );
meta = d.ordinal();
}
}
}

View file

@ -1,4 +1,4 @@
package appeng.integration.modules.helpers; package appeng.integration.modules.BCHelpers;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;

View file

@ -1,4 +1,4 @@
package appeng.integration.modules.helpers; package appeng.integration.modules.BCHelpers;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;