diff --git a/integration/modules/BC.java b/integration/modules/BC.java index 54c16083e..60900ceaf 100644 --- a/integration/modules/BC.java +++ b/integration/modules/BC.java @@ -1,5 +1,7 @@ package appeng.integration.modules; +import java.lang.reflect.Field; + import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; @@ -12,12 +14,19 @@ import appeng.api.config.TunnelType; import appeng.api.definitions.Blocks; import appeng.api.features.IP2PTunnelRegistry; 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.integration.BaseModule; 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.BuildCraftTransport; +import buildcraft.api.blueprints.SchematicRegistry; import buildcraft.api.tools.IToolWrench; import buildcraft.api.transport.IPipeConnection; import buildcraft.api.transport.IPipeTile; @@ -189,7 +198,16 @@ public class BC extends BaseModule implements IBC addFacade( b.blockQuartz.stack( 1 ) ); addFacade( b.blockQuartzChiseled.stack( 1 ) ); addFacade( b.blockQuartzPiller.stack( 1 ) ); - + + try + { + initBuilderSupport(); + } + catch (Throwable builderSupport) + { + // not supported? + } + Block skyStone = b.blockSkyStone.block(); 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 public void PostInit() { diff --git a/integration/modules/BCHelpers/AECableSchematicTile.java b/integration/modules/BCHelpers/AECableSchematicTile.java new file mode 100644 index 000000000..19408a305 --- /dev/null +++ b/integration/modules/BCHelpers/AECableSchematicTile.java @@ -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 getLayerFlags() + { + return null; + } + + @Override + public void cleanup() + { + + } +} diff --git a/integration/modules/BCHelpers/AEGenericSchematicTile.java b/integration/modules/BCHelpers/AEGenericSchematicTile.java new file mode 100644 index 000000000..73b1a104d --- /dev/null +++ b/integration/modules/BCHelpers/AEGenericSchematicTile.java @@ -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 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) + { + + } + } + } + } + +} diff --git a/integration/modules/BCHelpers/AERotateableBlockSchematic.java b/integration/modules/BCHelpers/AERotateableBlockSchematic.java new file mode 100644 index 000000000..76b79d64a --- /dev/null +++ b/integration/modules/BCHelpers/AERotateableBlockSchematic.java @@ -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(); + } + } + +} diff --git a/integration/modules/helpers/BCPipeHandler.java b/integration/modules/BCHelpers/BCPipeHandler.java similarity index 94% rename from integration/modules/helpers/BCPipeHandler.java rename to integration/modules/BCHelpers/BCPipeHandler.java index 07296841a..4d4a76e22 100644 --- a/integration/modules/helpers/BCPipeHandler.java +++ b/integration/modules/BCHelpers/BCPipeHandler.java @@ -1,4 +1,4 @@ -package appeng.integration.modules.helpers; +package appeng.integration.modules.BCHelpers; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; diff --git a/integration/modules/helpers/BCPipeInventory.java b/integration/modules/BCHelpers/BCPipeInventory.java similarity index 96% rename from integration/modules/helpers/BCPipeInventory.java rename to integration/modules/BCHelpers/BCPipeInventory.java index b16af7165..a2bd0f9db 100644 --- a/integration/modules/helpers/BCPipeInventory.java +++ b/integration/modules/BCHelpers/BCPipeInventory.java @@ -1,4 +1,4 @@ -package appeng.integration.modules.helpers; +package appeng.integration.modules.BCHelpers; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection;