api/bccompat changes, add support for powering chutes
This commit is contained in:
parent
65a135123a
commit
9e3423eeef
25 changed files with 111 additions and 57 deletions
12
api/buildcraft/api/power/IRedstoneEngine.java
Normal file
12
api/buildcraft/api/power/IRedstoneEngine.java
Normal 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 {
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 {
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
||||
|
|
Loading…
Reference in a new issue