api/bccompat changes, add support for powering chutes

This commit is contained in:
asiekierka 2015-01-06 14:57:21 +01:00
parent 65a135123a
commit 9e3423eeef
25 changed files with 111 additions and 57 deletions

View file

@ -0,0 +1,12 @@
/**
* Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team
* http://www.mod-buildcraft.com
*
* The BuildCraft API is distributed under the terms of the MIT License.
* Please check the contents of the license, which should be located
* as "LICENSE.API" in the BuildCraft source code distribution.
*/
package buildcraft.api.power;
public interface IRedstoneEngine {
}

View file

@ -1,3 +1,11 @@
/**
* Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team
* http://www.mod-buildcraft.com
*
* The BuildCraft API is distributed under the terms of the MIT License.
* Please check the contents of the license, which should be located
* as "LICENSE.API" in the BuildCraft source code distribution.
*/
package buildcraft.api.power;
import net.minecraftforge.common.util.ForgeDirection;

View file

@ -7,8 +7,10 @@ import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.api.core.EnumColor;
public interface IInjectable {
boolean canInjectItems(ForgeDirection from);
/**
* Offers an ItemStack for addition to the pipe. Will be rejected if the
* Offers an ItemStack for 3addition to the pipe. Will be rejected if the
* pipe doesn't accept items from that side.
*
* @param stack ItemStack offered for addition. Do not manipulate this!
@ -19,11 +21,4 @@ public interface IInjectable {
* @return Amount of items used from the passed stack.
*/
int injectItem(ItemStack stack, boolean doAdd, ForgeDirection from, EnumColor color);
/**
* Same as
* {@link #injectItem(ItemStack, boolean, ForgeDirection, EnumColor)}
* but with no color attribute.
*/
int injectItem(ItemStack stack, boolean doAdd, ForgeDirection from);
}

View file

@ -56,5 +56,7 @@ public interface IPipeTile extends IInjectable {
// For compatibility with BC 6.2.x and below
int injectItem(ItemStack stack, boolean doAdd, ForgeDirection from, EnumColor color);
@Deprecated
int injectItem(ItemStack stack, boolean doAdd, ForgeDirection from);
}

View file

@ -38,6 +38,7 @@ import net.minecraftforge.common.config.Property;
import buildcraft.api.blueprints.BuilderAPI;
import buildcraft.builders.schematics.SchematicIgnoreMeta;
import buildcraft.compat.CompatHooks;
import buildcraft.core.DefaultProps;
import buildcraft.core.InterModComms;
import buildcraft.core.Version;
@ -147,8 +148,8 @@ public class BuildCraftFactory extends BuildCraftMod {
// EntityRegistry.registerModEntity(EntityMechanicalArm.class, "bcMechanicalArm", EntityIds.MECHANICAL_ARM, instance, 50, 1, true);
CoreProxy.proxy.registerTileEntity(TileQuarry.class, "Machine");
CoreProxy.proxy.registerTileEntity(TileMiningWell.class, "MiningWell");
CoreProxy.proxy.registerTileEntity(CompatHooks.INSTANCE.getTile(TileQuarry.class), "Machine");
CoreProxy.proxy.registerTileEntity(CompatHooks.INSTANCE.getTile(TileMiningWell.class), "MiningWell");
CoreProxy.proxy.registerTileEntity(TileAutoWorkbench.class, "AutoWorkbench");
CoreProxy.proxy.registerTileEntity(TilePump.class, "net.minecraft.src.buildcraft.factory.TilePump");
CoreProxy.proxy.registerTileEntity(TileFloodGate.class, "net.minecraft.src.buildcraft.factory.TileFloodGate");
@ -193,7 +194,7 @@ public class BuildCraftFactory extends BuildCraftMod {
}
miningWellBlock = new BlockMiningWell();
miningWellBlock = (BlockMiningWell) CompatHooks.INSTANCE.getBlock(BlockMiningWell.class);
CoreProxy.proxy.registerBlock(miningWellBlock.setBlockName("miningWellBlock"));
plainPipeBlock = new BlockPlainPipe();
@ -205,7 +206,7 @@ public class BuildCraftFactory extends BuildCraftMod {
frameBlock = new BlockFrame();
CoreProxy.proxy.registerBlock(frameBlock.setBlockName("frameBlock"));
quarryBlock = new BlockQuarry();
quarryBlock = (BlockQuarry) CompatHooks.INSTANCE.getBlock(BlockQuarry.class);
CoreProxy.proxy.registerBlock(quarryBlock.setBlockName("machineBlock"));
tankBlock = new BlockTank();
@ -315,7 +316,7 @@ public class BuildCraftFactory extends BuildCraftMod {
" I ",
'I', "ingotIron",
'C', Blocks.chest,
'G', "gearStone");
'G', "gearIron");
}
if (floodGateBlock != null) {

View file

@ -314,7 +314,7 @@ public class BuildCraftTransport extends BuildCraftMod {
pipeWaterproof.setUnlocalizedName("pipeWaterproof");
CoreProxy.proxy.registerItem(pipeWaterproof);
genericPipeBlock = CompatHooks.INSTANCE.createPipeBlock();
genericPipeBlock = (BlockGenericPipe) CompatHooks.INSTANCE.getBlock(BlockGenericPipe.class);
CoreProxy.proxy.registerBlock(genericPipeBlock.setBlockName("pipeBlock"), ItemBlock.class);

View file

@ -11,7 +11,6 @@ package buildcraft.builders;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.TreeSet;
import io.netty.buffer.ByteBuf;

View file

@ -8,16 +8,15 @@
*/
package buildcraft.compat;
import net.minecraft.block.Block;
import net.minecraft.tileentity.TileEntity;
import cpw.mods.fml.common.Loader;
import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.api.transport.IInjectable;
import buildcraft.transport.BlockGenericPipe;
import buildcraft.transport.TileGenericPipe;
public final class CompatHooks {
public class CompatHooks {
public static final CompatHooks INSTANCE;
static {
@ -45,35 +44,42 @@ public final class CompatHooks {
return null;
}
public BlockGenericPipe createPipeBlock() {
BlockGenericPipe genericPipeBlock;
public Block getBlock(Class<? extends Block> klazz) {
Block block = null;
if (Loader.isModLoaded("BuildCraft|Compat")) {
try {
genericPipeBlock = (BlockGenericPipe) CompatHooks.class.getClassLoader().loadClass("buildcraft.transport.BlockGenericPipeCompat").newInstance();
block = (Block) CompatHooks.class.getClassLoader().loadClass(klazz.getName() + "Compat").newInstance();
} catch (ClassNotFoundException e) {
// Class not supplied by Compat
} catch (Exception e) {
e.printStackTrace();
genericPipeBlock = new BlockGenericPipe();
}
} else {
genericPipeBlock = new BlockGenericPipe();
}
return genericPipeBlock;
if (block == null) {
try {
block = klazz.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
}
public Class<? extends TileEntity> getPipeTile() {
Class<? extends TileEntity> tileClass;
return block;
}
public Class<? extends TileEntity> getTile(Class<? extends TileEntity> klazz) {
Class<? extends TileEntity> tileClass = klazz;
if (Loader.isModLoaded("BuildCraft|Compat")) {
try {
tileClass = (Class<? extends TileEntity>) CompatHooks.class.getClassLoader().loadClass("buildcraft.transport.TileGenericPipeCompat");
tileClass = (Class<? extends TileEntity>) CompatHooks.class.getClassLoader().loadClass(klazz.getName() + "Compat");
} catch (ClassNotFoundException e) {
// Class not supplied by Compat
tileClass = klazz;
} catch (Exception e) {
e.printStackTrace();
tileClass = TileGenericPipe.class;
}
} else {
tileClass = TileGenericPipe.class;
}
return tileClass;

View file

@ -11,7 +11,6 @@ package buildcraft.core.blueprints;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.TreeSet;
import org.apache.logging.log4j.Level;

View file

@ -17,7 +17,6 @@ import java.util.Iterator;
import java.util.LinkedList;
import java.util.ListIterator;
import java.util.Map.Entry;
import java.util.TreeSet;
import net.minecraft.init.Blocks;
import net.minecraft.inventory.IInventory;

View file

@ -18,7 +18,6 @@ import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.IInventory;

View file

@ -106,13 +106,15 @@ public class PathFinding {
int x = start.x + dx;
int y = Math.max(0, start.y + dy);
int z = start.z + dz;
if (zone != null && !zone.contains(x, y, z))
if (zone != null && !zone.contains(x, y, z)) {
continue;
if(pathFound.matches(world, x, y, z))
}
if (pathFound.matches(world, x, y, z)) {
return false;
}
}
}
}
return true;
}

View file

@ -184,7 +184,7 @@ public final class Utils {
IInjectable pipeEntry = possiblePipes.get(choice);
return pipeEntry.injectItem(stack, true, pipeDirections.get(choice));
return pipeEntry.injectItem(stack, true, pipeDirections.get(choice), null);
}
return 0;
}

View file

@ -16,18 +16,25 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
import cofh.api.energy.IEnergyHandler;
import buildcraft.BuildCraftFactory;
import buildcraft.api.blueprints.BuilderAPI;
import buildcraft.api.power.IRedstoneEngineReceiver;
import buildcraft.api.transport.IInjectable;
import buildcraft.core.RFBattery;
import buildcraft.core.TileBuildCraft;
import buildcraft.core.inventory.ITransactor;
import buildcraft.core.inventory.SimpleInventory;
import buildcraft.core.inventory.Transactor;
public class TileHopper extends TileBuildCraft implements IInventory {
public class TileHopper extends TileBuildCraft implements IInventory, IEnergyHandler, IRedstoneEngineReceiver {
private final SimpleInventory inventory = new SimpleInventory(4, "Hopper", 64);
private boolean isEmpty;
@Override
public void initialize() {
this.setBattery(new RFBattery(10, 10, 0));
inventory.addListener(this);
}
@ -66,6 +73,30 @@ public class TileHopper extends TileBuildCraft implements IInventory {
ITransactor transactor = Transactor.getTransactorFor(outputTile);
if (transactor == null) {
if (outputTile instanceof IInjectable && getBattery().getEnergyStored() >= 10) {
ItemStack stackToOutput = null;
int internalSlot = 0;
getBattery().useEnergy(10, 10, false);
for (; internalSlot < inventory.getSizeInventory(); internalSlot++) {
ItemStack stackInSlot = inventory.getStackInSlot(internalSlot);
if (stackInSlot == null || stackInSlot.stackSize == 0) {
continue;
}
stackToOutput = stackInSlot.copy();
stackToOutput.stackSize = 1;
break;
}
if (stackToOutput != null) {
int used = ((IInjectable) outputTile).injectItem(stackToOutput, true, ForgeDirection.UP, null);
if (used > 0) {
decrStackSize(internalSlot, 1);
}
}
}
return;
}
@ -158,4 +189,16 @@ public class TileHopper extends TileBuildCraft implements IInventory {
public boolean hasCustomInventoryName() {
return false;
}
@Override
public boolean canConnectRedstoneEngine(ForgeDirection side) {
// blocks up and down
return (side.ordinal() >= 2);
}
@Override
public boolean canConnectEnergy(ForgeDirection side) {
// blocks up and down
return (side.ordinal() >= 2);
}
}

View file

@ -27,7 +27,6 @@ import net.minecraftforge.fluids.IFluidHandler;
import buildcraft.BuildCraftCore;
import buildcraft.BuildCraftTransport;
import buildcraft.api.core.SafeTimeTracker;
import buildcraft.api.transport.IPipe;
import buildcraft.api.transport.IPipeTile;
import buildcraft.core.DefaultProps;
import buildcraft.core.utils.MathUtils;

View file

@ -43,7 +43,6 @@ import buildcraft.api.core.IIconProvider;
import buildcraft.api.core.ISerializable;
import buildcraft.api.core.Position;
import buildcraft.api.gates.IGateExpansion;
import buildcraft.api.power.IRedstoneEngine;
import buildcraft.api.power.IRedstoneEngineReceiver;
import buildcraft.api.transport.IPipe;
import buildcraft.api.transport.IPipeConnection;
@ -65,7 +64,6 @@ import buildcraft.core.utils.Utils;
import buildcraft.transport.ItemFacade.FacadeState;
import buildcraft.transport.gates.GateFactory;
import buildcraft.transport.gates.GatePluggable;
import buildcraft.transport.pipes.PipePowerWood;
import buildcraft.transport.pluggable.PlugPluggable;
import buildcraft.transport.pluggable.RobotStationPluggable;
@ -1217,7 +1215,7 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler,
if (pipe instanceof IRedstoneEngineReceiver) {
return ((IRedstoneEngineReceiver) pipe).canConnectRedstoneEngine(side);
} else {
return ((getPipeType() != PipeType.POWER) && (getPipeType() != PipeType.STRUCTURE));
return (getPipeType() != PipeType.POWER) && (getPipeType() != PipeType.STRUCTURE);
}
}
}

View file

@ -11,8 +11,8 @@ package buildcraft.transport;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.registry.GameRegistry;
import buildcraft.compat.CompatHooks;
import buildcraft.BuildCraftTransport;
import buildcraft.compat.CompatHooks;
public class TransportProxy {
@ -22,7 +22,7 @@ public class TransportProxy {
public void registerTileEntities() {
// The first name here is the current TE name; the remaining names are old names used for backwards compatibility
GameRegistry.registerTileEntityWithAlternatives(CompatHooks.INSTANCE.getPipeTile(), "net.minecraft.src.buildcraft.transport.GenericPipe", "net.minecraft.src.buildcraft.GenericPipe", "net.minecraft.src.buildcraft.transport.TileGenericPipe");
GameRegistry.registerTileEntityWithAlternatives(CompatHooks.INSTANCE.getTile(TileGenericPipe.class), "net.minecraft.src.buildcraft.transport.GenericPipe", "net.minecraft.src.buildcraft.GenericPipe", "net.minecraft.src.buildcraft.transport.TileGenericPipe");
GameRegistry.registerTileEntity(TileFilteredBuffer.class, "net.minecraft.src.buildcraft.transport.TileFilteredBuffer");
}

View file

@ -8,10 +8,8 @@
*/
package buildcraft.transport.gates;
import net.minecraft.nbt.NBTTagCompound;
import buildcraft.api.statements.IStatement;
import buildcraft.api.statements.IStatementParameter;
import buildcraft.api.statements.StatementManager;
public class StatementSlot {
public IStatement statement;

View file

@ -24,7 +24,6 @@ import net.minecraftforge.fluids.IFluidHandler;
import buildcraft.BuildCraftTransport;
import buildcraft.api.core.IIconProvider;
import buildcraft.api.statements.IActionInternal;
import buildcraft.api.transport.IPipe;
import buildcraft.api.transport.IPipeTile;
import buildcraft.transport.Pipe;
import buildcraft.transport.PipeIconProvider;

View file

@ -25,7 +25,6 @@ import buildcraft.transport.IPipeTransportFluidsHook;
import buildcraft.transport.Pipe;
import buildcraft.transport.PipeIconProvider;
import buildcraft.transport.PipeTransportFluids;
import buildcraft.transport.TileGenericPipe;
public class PipeFluidsSandstone extends Pipe<PipeTransportFluids> implements IPipeTransportFluidsHook, IPipeConnectionForced {

View file

@ -24,12 +24,10 @@ import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.BuildCraftTransport;
import buildcraft.api.core.IIconProvider;
import buildcraft.api.statements.IActionInternal;
import buildcraft.api.transport.IPipe;
import buildcraft.api.transport.IPipeTile;
import buildcraft.transport.Pipe;
import buildcraft.transport.PipeIconProvider;
import buildcraft.transport.PipeTransportItems;
import buildcraft.transport.TileGenericPipe;
import buildcraft.transport.gates.StatementSlot;
import buildcraft.transport.statements.ActionPipeDirection;

View file

@ -23,7 +23,6 @@ import buildcraft.transport.IPipeConnectionForced;
import buildcraft.transport.Pipe;
import buildcraft.transport.PipeIconProvider;
import buildcraft.transport.PipeTransportItems;
import buildcraft.transport.TileGenericPipe;
public class PipeItemsSandstone extends Pipe implements IPipeConnectionForced {

View file

@ -23,7 +23,6 @@ import buildcraft.transport.IPipeConnectionForced;
import buildcraft.transport.Pipe;
import buildcraft.transport.PipeIconProvider;
import buildcraft.transport.PipeTransportPower;
import buildcraft.transport.TileGenericPipe;
public class PipePowerSandstone extends Pipe<PipeTransportPower> implements IPipeConnectionForced {