add early draft of Tiles API, remove IMachine

This commit is contained in:
asiekierka 2014-10-28 20:15:30 +01:00
parent 8b57b75edc
commit 9c31b0123b
23 changed files with 148 additions and 251 deletions

View file

@ -0,0 +1,11 @@
package buildcraft.api.tiles;
public interface IControllable {
public enum Mode {
Unknown, On, Off, Loop
};
Mode getControlMode();
void setControlMode(Mode mode);
boolean acceptsControlMode(Mode mode);
}

View file

@ -71,6 +71,7 @@ import buildcraft.api.statements.ITriggerExternal;
import buildcraft.api.statements.ITriggerInternal;
import buildcraft.api.statements.StatementManager;
import buildcraft.api.statements.StatementParameterItemStack;
import buildcraft.api.tiles.IControllable;
import buildcraft.core.BlockSpring;
import buildcraft.core.BuildCraftConfiguration;
import buildcraft.core.CommandBuildCraft;
@ -99,7 +100,6 @@ import buildcraft.core.recipes.RefineryRecipeManager;
import buildcraft.core.render.BlockHighlightHandler;
import buildcraft.core.robots.EntityRobot;
import buildcraft.core.statements.ActionMachineControl;
import buildcraft.core.statements.ActionMachineControl.Mode;
import buildcraft.core.statements.ActionRedstoneOutput;
import buildcraft.core.statements.DefaultActionProvider;
import buildcraft.core.statements.DefaultTriggerProvider;
@ -196,10 +196,8 @@ public class BuildCraftCore extends BuildCraftMod {
public static ITriggerExternal triggerFluidContainerBelow50 = new TriggerFluidContainerLevel(TriggerFluidContainerLevel.TriggerType.BELOW_50);
public static ITriggerExternal triggerFluidContainerBelow75 = new TriggerFluidContainerLevel(TriggerFluidContainerLevel.TriggerType.BELOW_75);
public static IActionInternal actionRedstone = new ActionRedstoneOutput();
public static IActionExternal actionOn = new ActionMachineControl(Mode.On);
public static IActionExternal actionOff = new ActionMachineControl(Mode.Off);
public static IActionExternal actionLoop = new ActionMachineControl(Mode.Loop);
public static IActionExternal[] actionControl;
public static boolean loadDefaultRecipes = true;
public static boolean consumeWaterSources = false;
@ -415,6 +413,13 @@ public class BuildCraftCore extends BuildCraftMod {
BuildCraftAPI.isFluidSource = new WorldPropertyIsFluidSource();
ColorUtils.initialize();
actionControl = new IActionExternal[IControllable.Mode.values().length];
for (IControllable.Mode mode : IControllable.Mode.values()) {
if (mode != IControllable.Mode.Unknown) {
actionControl[mode.ordinal()] = new ActionMachineControl(mode);
}
}
}
@Mod.EventHandler

View file

@ -74,7 +74,7 @@ public class BlockFiller extends BlockBuildCraft {
if (tile != null && tile instanceof TileFiller) {
TileFiller filler = (TileFiller) tile;
if (side == 1 || side == 0) {
if (!filler.isActive()) {
if (!filler.hasWork()) {
return textureTopOff;
} else {
return textureTopOn;

View file

@ -36,9 +36,9 @@ import buildcraft.api.robots.EntityRobotBase;
import buildcraft.api.robots.IRequestProvider;
import buildcraft.api.robots.StackRequest;
import buildcraft.api.statements.IStatement;
import buildcraft.api.tiles.IHasWork;
import buildcraft.core.Box;
import buildcraft.core.Box.Kind;
import buildcraft.core.IMachine;
import buildcraft.core.LaserData;
import buildcraft.core.blueprints.Blueprint;
import buildcraft.core.blueprints.BlueprintBase;
@ -62,7 +62,7 @@ import buildcraft.core.network.RPCSide;
import buildcraft.core.robots.ResourceIdRequest;
import buildcraft.core.robots.RobotRegistry;
public class TileBuilder extends TileAbstractBuilder implements IMachine, IFluidHandler, IRequestProvider {
public class TileBuilder extends TileAbstractBuilder implements IHasWork, IFluidHandler, IRequestProvider {
private static int POWER_ACTIVATION = 500;
@ -603,20 +603,10 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine, IFluid
}
@Override
public boolean isActive() {
public boolean hasWork() {
return !done;
}
@Override
public boolean manageFluids() {
return true;
}
@Override
public boolean manageSolids() {
return true;
}
public boolean isBuildingBlueprint() {
return getStackInSlot(0) != null && getStackInSlot(0).getItem() instanceof ItemBlueprint;
}
@ -657,11 +647,6 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine, IFluid
return i != 0;
}
@Override
public boolean allowAction(IStatement action) {
return false;
}
@Override
public boolean hasCustomInventoryName() {
return false;

View file

@ -21,10 +21,11 @@ import buildcraft.api.filler.FillerManager;
import buildcraft.api.statements.IActionReceptor;
import buildcraft.api.statements.IStatement;
import buildcraft.api.statements.IStatementParameter;
import buildcraft.api.tiles.IControllable;
import buildcraft.api.tiles.IHasWork;
import buildcraft.builders.statements.ActionFiller;
import buildcraft.core.Box;
import buildcraft.core.Box.Kind;
import buildcraft.core.IMachine;
import buildcraft.core.blueprints.BptBuilderTemplate;
import buildcraft.core.blueprints.BptContext;
import buildcraft.core.builders.TileAbstractBuilder;
@ -36,11 +37,9 @@ import buildcraft.core.network.PacketUpdate;
import buildcraft.core.network.RPC;
import buildcraft.core.network.RPCHandler;
import buildcraft.core.network.RPCSide;
import buildcraft.core.statements.ActionMachineControl;
import buildcraft.core.statements.ActionMachineControl.Mode;
import buildcraft.core.utils.Utils;
public class TileFiller extends TileAbstractBuilder implements IMachine, IActionReceptor {
public class TileFiller extends TileAbstractBuilder implements IHasWork, IControllable {
private static int POWER_ACTIVATION = 500;
@ -51,7 +50,7 @@ public class TileFiller extends TileAbstractBuilder implements IMachine, IAction
private final Box box = new Box();
private boolean done = false;
private ActionMachineControl.Mode lastMode = ActionMachineControl.Mode.Unknown;
private IControllable.Mode lastMode = IControllable.Mode.Unknown;
private SimpleInventory inv = new SimpleInventory(27, "Filler", 64);
private NBTTagCompound initNBT = null;
@ -291,20 +290,10 @@ public class TileFiller extends TileAbstractBuilder implements IMachine, IAction
}
@Override
public boolean isActive() {
public boolean hasWork() {
return !done && lastMode != Mode.Off;
}
@Override
public boolean manageFluids() {
return false;
}
@Override
public boolean manageSolids() {
return true;
}
@Override
public void openInventory() {
}
@ -313,25 +302,6 @@ public class TileFiller extends TileAbstractBuilder implements IMachine, IAction
public void closeInventory() {
}
@Override
public void actionActivated(IStatement action, IStatementParameter[] parameters) {
if (action == BuildCraftCore.actionOn) {
lastMode = ActionMachineControl.Mode.On;
} else if (action == BuildCraftCore.actionOff) {
lastMode = ActionMachineControl.Mode.Off;
} else if (action == BuildCraftCore.actionLoop) {
lastMode = ActionMachineControl.Mode.Loop;
} else if (action instanceof ActionFiller) {
ActionFiller actFill = (ActionFiller) action;
setPattern(actFill.pattern);
}
}
@Override
public boolean allowAction(IStatement action) {
return true;
}
@Override
public boolean isItemValidForSlot(int slot, ItemStack stack) {
return true;
@ -366,4 +336,21 @@ public class TileFiller extends TileAbstractBuilder implements IMachine, IAction
return true;
}
@Override
public Mode getControlMode() {
return this.lastMode;
}
@Override
public void setControlMode(Mode mode) {
this.lastMode = mode;
}
@Override
public boolean acceptsControlMode(Mode mode) {
return mode == IControllable.Mode.On ||
mode == IControllable.Mode.Off ||
mode == IControllable.Mode.Loop;
}
}

View file

@ -14,6 +14,7 @@ import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.api.statements.IActionExternal;
import buildcraft.api.statements.IStatementContainer;
import buildcraft.api.statements.IStatementParameter;
import buildcraft.builders.TileFiller;
import buildcraft.core.builders.patterns.FillerPattern;
import buildcraft.core.statements.BCStatement;
@ -39,6 +40,8 @@ public class ActionFiller extends BCStatement implements IActionExternal {
@Override
public void actionActivate(TileEntity target, ForgeDirection side,
IStatementContainer source, IStatementParameter[] parameters) {
if (target instanceof TileFiller) {
((TileFiller) target).setPattern(pattern);
}
}
}

View file

@ -19,10 +19,9 @@ import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import cpw.mods.fml.common.FMLCommonHandler;
import buildcraft.api.events.BlockPlacedDownEvent;
import buildcraft.api.tiles.IHasWork;
import buildcraft.core.utils.Utils;
public abstract class BlockBuildCraft extends BlockContainer {
@ -60,7 +59,7 @@ public abstract class BlockBuildCraft extends BlockContainer {
@Override
public int getLightValue(IBlockAccess world, int x, int y, int z) {
TileEntity tile = world.getTileEntity(x, y, z);
if (tile instanceof IMachine && ((IMachine) tile).isActive()) {
if (tile instanceof IHasWork && ((IHasWork) tile).hasWork()) {
return super.getLightValue(world, x, y, z) + 8;
} else {
return super.getLightValue(world, x, y, z);

View file

@ -1,22 +0,0 @@
/**
* Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team
* http://www.mod-buildcraft.com
*
* BuildCraft is distributed under the terms of the Minecraft Mod Public
* License 1.0, or MMPL. Please check the contents of the license located in
* http://www.mod-buildcraft.com/MMPL-1.0.txt
*/
package buildcraft.core;
import buildcraft.api.statements.IStatement;
public interface IMachine {
boolean isActive();
boolean manageFluids();
boolean manageSolids();
boolean allowAction(IStatement action);
}

View file

@ -15,14 +15,11 @@ import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.api.statements.IActionExternal;
import buildcraft.api.statements.IStatementContainer;
import buildcraft.api.statements.IStatementParameter;
import buildcraft.api.tiles.IControllable;
import buildcraft.api.tiles.IControllable.Mode;
import buildcraft.core.utils.StringUtils;
public class ActionMachineControl extends BCStatement implements IActionExternal {
public enum Mode {
Unknown, On, Off, Loop
};
public final Mode mode;
public ActionMachineControl(Mode mode) {
@ -52,6 +49,8 @@ public class ActionMachineControl extends BCStatement implements IActionExternal
@Override
public void actionActivate(TileEntity target, ForgeDirection side,
IStatementContainer source, IStatementParameter[] parameters) {
if (target instanceof IControllable) {
((IControllable)target).setControlMode(mode);
}
}
}

View file

@ -22,8 +22,8 @@ import buildcraft.api.statements.IActionExternal;
import buildcraft.api.statements.IActionInternal;
import buildcraft.api.statements.IActionProvider;
import buildcraft.api.statements.IStatementContainer;
import buildcraft.api.tiles.IControllable;
import buildcraft.api.transport.IPipeTile;
import buildcraft.core.IMachine;
public class DefaultActionProvider implements IActionProvider {
@ -43,16 +43,12 @@ public class DefaultActionProvider implements IActionProvider {
LinkedList<IActionExternal> res = new LinkedList<IActionExternal>();
try {
if (tile instanceof IMachine) {
IMachine machine = (IMachine) tile;
if (machine.allowAction(BuildCraftCore.actionOn)) {
res.add(BuildCraftCore.actionOn);
}
if (machine.allowAction(BuildCraftCore.actionOff)) {
res.add(BuildCraftCore.actionOff);
}
if (machine.allowAction(BuildCraftCore.actionLoop)) {
res.add(BuildCraftCore.actionLoop);
if (tile instanceof IControllable) {
for (IControllable.Mode mode : IControllable.Mode.values()) {
if (mode != IControllable.Mode.Unknown &&
((IControllable) tile).acceptsControlMode(mode)) {
res.add(BuildCraftCore.actionControl[mode.ordinal()]);
}
}
}
} catch (Throwable error) {

View file

@ -22,8 +22,8 @@ import buildcraft.api.statements.IStatementContainer;
import buildcraft.api.statements.ITriggerExternal;
import buildcraft.api.statements.ITriggerInternal;
import buildcraft.api.statements.ITriggerProvider;
import buildcraft.api.tiles.IHasWork;
import buildcraft.api.transport.IPipeTile;
import buildcraft.core.IMachine;
public class DefaultTriggerProvider implements ITriggerProvider {
@ -54,7 +54,7 @@ public class DefaultTriggerProvider implements ITriggerProvider {
}
}
if (tile instanceof IMachine) {
if (tile instanceof IHasWork) {
res.add(BuildCraftCore.triggerMachineActive);
res.add(BuildCraftCore.triggerMachineInactive);
}

View file

@ -13,7 +13,7 @@ import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.api.statements.IStatementContainer;
import buildcraft.api.statements.IStatementParameter;
import buildcraft.api.statements.ITriggerExternal;
import buildcraft.core.IMachine;
import buildcraft.api.tiles.IHasWork;
import buildcraft.core.utils.StringUtils;
public class TriggerMachine extends BCStatement implements ITriggerExternal {
@ -33,13 +33,13 @@ public class TriggerMachine extends BCStatement implements ITriggerExternal {
@Override
public boolean isTriggerActive(TileEntity tile, ForgeDirection side, IStatementContainer container, IStatementParameter[] parameters) {
if (tile instanceof IMachine) {
IMachine machine = (IMachine) tile;
if (tile instanceof IHasWork) {
IHasWork machine = (IHasWork) tile;
if (active) {
return machine.isActive();
return machine.hasWork();
} else {
return !machine.isActive();
return !machine.hasWork();
}
}

View file

@ -18,13 +18,15 @@ import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.BuildCraftCore;
import buildcraft.BuildCraftFactory;
import buildcraft.api.statements.IStatement;
import buildcraft.core.IMachine;
import buildcraft.api.tiles.IHasWork;
import buildcraft.api.transport.IPipeConnection;
import buildcraft.api.transport.IPipeTile.PipeType;
import buildcraft.core.RFBattery;
import buildcraft.core.TileBuildCraft;
import buildcraft.core.utils.BlockUtil;
import buildcraft.core.utils.Utils;
public class TileMiningWell extends TileBuildCraft implements IMachine {
public class TileMiningWell extends TileBuildCraft implements IHasWork, IPipeConnection {
boolean isDigging = true;
@ -118,22 +120,13 @@ public class TileMiningWell extends TileBuildCraft implements IMachine {
}
@Override
public boolean isActive() {
public boolean hasWork() {
return isDigging;
}
@Override
public boolean manageFluids() {
return false;
}
@Override
public boolean manageSolids() {
return true;
}
@Override
public boolean allowAction(IStatement action) {
return false;
public ConnectOverride overridePipeConnection(PipeType type,
ForgeDirection with) {
return type == PipeType.ITEM ? ConnectOverride.CONNECT : ConnectOverride.DISCONNECT;
}
}

View file

@ -32,9 +32,9 @@ import buildcraft.BuildCraftFactory;
import buildcraft.api.core.BlockIndex;
import buildcraft.api.core.SafeTimeTracker;
import buildcraft.api.statements.IStatement;
import buildcraft.api.tiles.IHasWork;
import buildcraft.core.CoreConstants;
import buildcraft.core.EntityBlock;
import buildcraft.core.IMachine;
import buildcraft.core.RFBattery;
import buildcraft.core.TileBuffer;
import buildcraft.core.TileBuildCraft;
@ -46,7 +46,7 @@ import buildcraft.core.proxy.CoreProxy;
import buildcraft.core.utils.BlockUtil;
import buildcraft.core.utils.Utils;
public class TilePump extends TileBuildCraft implements IMachine, IFluidHandler {
public class TilePump extends TileBuildCraft implements IHasWork, IFluidHandler {
public static final int REBUID_DELAY = 512;
public static int MAX_LIQUID = FluidContainerRegistry.BUCKET_VOLUME * 16;
@ -372,7 +372,7 @@ public class TilePump extends TileBuildCraft implements IMachine, IFluidHandler
}
@Override
public boolean isActive() {
public boolean hasWork() {
BlockIndex next = getNextIndexToPump(false);
if (next != null) {
@ -441,21 +441,6 @@ public class TilePump extends TileBuildCraft implements IMachine, IFluidHandler
destroyTube();
}
@Override
public boolean manageFluids() {
return true;
}
@Override
public boolean manageSolids() {
return false;
}
@Override
public boolean allowAction(IStatement action) {
return false;
}
// IFluidHandler implementation.
@Override
public int fill(ForgeDirection from, FluidStack resource, boolean doFill) {

View file

@ -37,11 +37,11 @@ import buildcraft.api.core.NetworkData;
import buildcraft.api.core.SafeTimeTracker;
import buildcraft.api.filler.FillerManager;
import buildcraft.api.statements.IStatement;
import buildcraft.api.tiles.IHasWork;
import buildcraft.core.Box;
import buildcraft.core.Box.Kind;
import buildcraft.core.CoreConstants;
import buildcraft.core.DefaultAreaProvider;
import buildcraft.core.IMachine;
import buildcraft.core.blueprints.Blueprint;
import buildcraft.core.blueprints.BptBuilderBase;
import buildcraft.core.blueprints.BptBuilderBlueprint;
@ -52,7 +52,7 @@ import buildcraft.core.proxy.CoreProxy;
import buildcraft.core.utils.BlockUtil;
import buildcraft.core.utils.Utils;
public class TileQuarry extends TileAbstractBuilder implements IMachine, ISidedInventory {
public class TileQuarry extends TileAbstractBuilder implements IHasWork, ISidedInventory {
private static enum Stage {
BUILDING,
@ -520,7 +520,7 @@ public class TileQuarry extends TileAbstractBuilder implements IMachine, ISidedI
}
@Override
public boolean isActive() {
public boolean hasWork() {
return stage != Stage.DONE;
}
@ -666,16 +666,6 @@ public class TileQuarry extends TileAbstractBuilder implements IMachine, ISidedI
initializeBlueprintBuilder();
}
@Override
public boolean manageFluids() {
return false;
}
@Override
public boolean manageSolids() {
return true;
}
@Override
public int getSizeInventory() {
return 1;
@ -740,12 +730,7 @@ public class TileQuarry extends TileAbstractBuilder implements IMachine, ISidedI
public boolean isBuildingMaterialSlot(int i) {
return true;
}
@Override
public boolean allowAction(IStatement action) {
return false;
}
public void moveHead(double instantSpeed) {
int[] target = getTarget();
double[] head = getHead();

View file

@ -31,7 +31,7 @@ import buildcraft.api.recipes.CraftingResult;
import buildcraft.api.recipes.IFlexibleCrafter;
import buildcraft.api.recipes.IFlexibleRecipe;
import buildcraft.api.statements.IStatement;
import buildcraft.core.IMachine;
import buildcraft.api.tiles.IHasWork;
import buildcraft.core.RFBattery;
import buildcraft.core.TileBuildCraft;
import buildcraft.core.fluids.SingleUseTank;
@ -40,7 +40,7 @@ import buildcraft.core.network.PacketPayload;
import buildcraft.core.network.PacketUpdate;
import buildcraft.core.recipes.RefineryRecipeManager;
public class TileRefinery extends TileBuildCraft implements IFluidHandler, IInventory, IMachine, IFlexibleCrafter {
public class TileRefinery extends TileBuildCraft implements IFluidHandler, IInventory, IHasWork, IFlexibleCrafter {
public static int LIQUID_PER_SLOT = FluidContainerRegistry.BUCKET_VOLUME * 4;
@ -178,20 +178,10 @@ public class TileRefinery extends TileBuildCraft implements IFluidHandler, IInve
}
@Override
public boolean isActive() {
public boolean hasWork() {
return isActive;
}
@Override
public boolean manageFluids() {
return true;
}
@Override
public boolean manageSolids() {
return true;
}
@Override
public void readFromNBT(NBTTagCompound data) {
super.readFromNBT(data);
@ -285,11 +275,6 @@ public class TileRefinery extends TileBuildCraft implements IFluidHandler, IInve
return tankManager.get(number).getAcceptedFluid();
}
@Override
public boolean allowAction(IStatement action) {
return false;
}
/* SMP GUI */
public void getGUINetworkData(int id, int data) {
switch (id) {

View file

@ -32,6 +32,7 @@ import net.minecraftforge.oredict.OreDictionary;
import buildcraft.BuildCraftSilicon;
import buildcraft.api.core.IInvSlot;
import buildcraft.api.power.ILaserTarget;
import buildcraft.api.tiles.IControllable;
import buildcraft.core.TileBuffer;
import buildcraft.core.inventory.InvUtils;
import buildcraft.core.inventory.InventoryCopy;
@ -241,7 +242,7 @@ public class TileAdvancedCraftingTable extends TileLaserTableBase implements IIn
if (worldObj.isRemote) {
return;
}
if (lastMode == ActionMachineControl.Mode.Off) {
if (lastMode == IControllable.Mode.Off) {
return;
}
updateRecipe();
@ -452,12 +453,12 @@ public class TileAdvancedCraftingTable extends TileLaserTableBase implements IIn
@Override
public boolean canCraft() {
return craftable && !justCrafted && lastMode != ActionMachineControl.Mode.Off;
return craftable && !justCrafted && lastMode != IControllable.Mode.Off;
}
@Override
public boolean isActive() {
return requiresLaserEnergy() && super.isActive();
public boolean hasWork() {
return requiresLaserEnergy() && super.hasWork();
}
@Override

View file

@ -26,7 +26,7 @@ import buildcraft.api.core.NetworkData;
import buildcraft.api.recipes.CraftingResult;
import buildcraft.api.recipes.IFlexibleCrafter;
import buildcraft.api.recipes.IFlexibleRecipe;
import buildcraft.core.IMachine;
import buildcraft.api.tiles.IControllable;
import buildcraft.core.network.PacketUpdate;
import buildcraft.core.network.RPC;
import buildcraft.core.network.RPCHandler;
@ -39,7 +39,7 @@ import buildcraft.core.statements.ActionMachineControl;
import buildcraft.core.utils.StringUtils;
import buildcraft.core.utils.Utils;
public class TileAssemblyTable extends TileLaserTableBase implements IMachine, IInventory, IFlexibleCrafter {
public class TileAssemblyTable extends TileLaserTableBase implements IInventory, IFlexibleCrafter {
@NetworkData
public String currentRecipeId = "";
@ -85,7 +85,7 @@ public class TileAssemblyTable extends TileLaserTableBase implements IMachine, I
}
if (getEnergy() >= currentRecipe.craft(this, true).energyCost
&& lastMode != ActionMachineControl.Mode.Off) {
&& lastMode != IControllable.Mode.Off) {
setEnergy(0);
if (currentRecipe.canBeCrafted(this)) {
@ -288,13 +288,13 @@ public class TileAssemblyTable extends TileLaserTableBase implements IMachine, I
}
@Override
public boolean isActive() {
return currentRecipe != null && super.isActive();
public boolean hasWork() {
return currentRecipe != null && super.hasWork();
}
@Override
public boolean canCraft() {
return isActive();
return hasWork();
}
@Override

View file

@ -17,6 +17,7 @@ import buildcraft.api.recipes.CraftingResult;
import buildcraft.api.recipes.IFlexibleCrafter;
import buildcraft.api.recipes.IFlexibleRecipe;
import buildcraft.api.recipes.IIntegrationRecipe;
import buildcraft.api.tiles.IControllable;
import buildcraft.core.inventory.ITransactor;
import buildcraft.core.inventory.InventoryMapper;
import buildcraft.core.inventory.SimpleInventory;
@ -80,7 +81,7 @@ public class TileIntegrationTable extends TileLaserTableBase implements IFlexibl
}
if (getEnergy() >= craftingPreview.energyCost
&& lastMode != ActionMachineControl.Mode.Off) {
&& lastMode != IControllable.Mode.Off) {
setEnergy(0);
craftingPreview = null;
@ -132,7 +133,7 @@ public class TileIntegrationTable extends TileLaserTableBase implements IFlexibl
@Override
public boolean canCraft() {
return isActive();
return hasWork();
}
@Override
@ -184,8 +185,8 @@ public class TileIntegrationTable extends TileLaserTableBase implements IFlexibl
}
@Override
public boolean isActive() {
return craftingPreview != null && super.isActive();
public boolean hasWork() {
return craftingPreview != null && super.hasWork();
}
@Override

View file

@ -26,15 +26,16 @@ import buildcraft.api.statements.IActionInternal;
import buildcraft.api.statements.IActionReceptor;
import buildcraft.api.statements.IStatement;
import buildcraft.api.statements.IStatementParameter;
import buildcraft.api.tiles.IControllable;
import buildcraft.api.tiles.IHasWork;
import buildcraft.core.Box;
import buildcraft.core.EntityLaser;
import buildcraft.core.IMachine;
import buildcraft.core.LaserData;
import buildcraft.core.RFBattery;
import buildcraft.core.TileBuildCraft;
import buildcraft.core.statements.ActionMachineControl;
public class TileLaser extends TileBuildCraft implements IActionReceptor, IMachine {
public class TileLaser extends TileBuildCraft implements IHasWork, IControllable {
private static final float LASER_OFFSET = 2.0F / 16.0F;
private static final short POWER_AVERAGING = 100;
@ -46,7 +47,7 @@ public class TileLaser extends TileBuildCraft implements IActionReceptor, IMachi
private final SafeTimeTracker searchTracker = new SafeTimeTracker(100, 100);
private final SafeTimeTracker networkTracker = new SafeTimeTracker(20, 3);
private ILaserTarget laserTarget;
private ActionMachineControl.Mode lastMode = ActionMachineControl.Mode.Unknown;
private IControllable.Mode lastMode = IControllable.Mode.Unknown;
private int powerIndex = 0;
@NetworkData
@ -81,7 +82,7 @@ public class TileLaser extends TileBuildCraft implements IActionReceptor, IMachi
}
// If a gate disabled us, remove laser and do nothing.
if (lastMode == ActionMachineControl.Mode.Off) {
if (lastMode == IControllable.Mode.Off) {
removeLaser();
return;
}
@ -280,34 +281,10 @@ public class TileLaser extends TileBuildCraft implements IActionReceptor, IMachi
}
@Override
public boolean isActive() {
public boolean hasWork() {
return isValidTable();
}
@Override
public boolean manageFluids() {
return false;
}
@Override
public boolean manageSolids() {
return false;
}
@Override
public boolean allowAction(IStatement action) {
return action == BuildCraftCore.actionOn || action == BuildCraftCore.actionOff;
}
@Override
public void actionActivated(IStatement action, IStatementParameter[] parameters) {
if (action == BuildCraftCore.actionOn) {
lastMode = ActionMachineControl.Mode.On;
} else if (action == BuildCraftCore.actionOff) {
lastMode = ActionMachineControl.Mode.Off;
}
}
private void pushPower(double received) {
powerAverage -= power[powerIndex];
powerAverage += received;
@ -337,4 +314,20 @@ public class TileLaser extends TileBuildCraft implements IActionReceptor, IMachi
public AxisAlignedBB getRenderBoundingBox() {
return new Box(this).extendToEncompass(laser.tail).getBoundingBox();
}
@Override
public Mode getControlMode() {
return this.lastMode;
}
@Override
public void setControlMode(Mode mode) {
this.lastMode = mode;
}
@Override
public boolean acceptsControlMode(Mode mode) {
return mode == IControllable.Mode.On ||
mode == IControllable.Mode.Off;
}
}

View file

@ -19,17 +19,19 @@ import buildcraft.api.power.ILaserTarget;
import buildcraft.api.statements.IActionReceptor;
import buildcraft.api.statements.IStatement;
import buildcraft.api.statements.IStatementParameter;
import buildcraft.core.IMachine;
import buildcraft.api.tiles.IControllable;
import buildcraft.api.tiles.IHasWork;
import buildcraft.api.tiles.IControllable.Mode;
import buildcraft.core.TileBuildCraft;
import buildcraft.core.inventory.SimpleInventory;
import buildcraft.core.statements.ActionMachineControl;
import buildcraft.core.utils.AverageUtil;
public abstract class TileLaserTableBase extends TileBuildCraft implements ILaserTarget, IInventory, IActionReceptor, IMachine {
public abstract class TileLaserTableBase extends TileBuildCraft implements ILaserTarget, IInventory, IHasWork, IControllable {
public int clientRequiredEnergy = 0;
protected SimpleInventory inv = new SimpleInventory(getSizeInventory(), "inv", 64);
protected ActionMachineControl.Mode lastMode = ActionMachineControl.Mode.Unknown;
protected IControllable.Mode lastMode = IControllable.Mode.Unknown;
private int energy = 0;
private int recentEnergyAverage;
private AverageUtil recentEnergyAverageUtil = new AverageUtil(20);
@ -200,31 +202,23 @@ public abstract class TileLaserTableBase extends TileBuildCraft implements ILase
}
@Override
public boolean isActive() {
return lastMode != ActionMachineControl.Mode.Off;
public boolean hasWork() {
return lastMode != IControllable.Mode.Off;
}
@Override
public boolean manageFluids() {
return false;
public Mode getControlMode() {
return this.lastMode;
}
@Override
public boolean manageSolids() {
return false;
public void setControlMode(Mode mode) {
this.lastMode = mode;
}
@Override
public boolean allowAction(IStatement action) {
return action == BuildCraftCore.actionOn || action == BuildCraftCore.actionOff;
}
@Override
public void actionActivated(IStatement action, IStatementParameter[] parameters) {
if (action == BuildCraftCore.actionOn) {
lastMode = ActionMachineControl.Mode.On;
} else if (action == BuildCraftCore.actionOff) {
lastMode = ActionMachineControl.Mode.Off;
}
public boolean acceptsControlMode(Mode mode) {
return mode == IControllable.Mode.On ||
mode == IControllable.Mode.Off;
}
}

View file

@ -24,7 +24,6 @@ import buildcraft.BuildCraftTransport;
import buildcraft.api.core.SafeTimeTracker;
import buildcraft.api.transport.IPipeTile.PipeType;
import buildcraft.core.DefaultProps;
import buildcraft.core.IMachine;
import buildcraft.transport.network.PacketFluidUpdate;
public class PipeTransportFluids extends PipeTransport implements IFluidHandler {
@ -524,7 +523,7 @@ public class PipeTransportFluids extends PipeTransport implements IFluidHandler
}
}
return tile instanceof TileGenericPipe || (tile instanceof IMachine && ((IMachine) tile).manageFluids());
return tile instanceof TileGenericPipe;
}
/**

View file

@ -30,7 +30,6 @@ import buildcraft.api.core.BCLog;
import buildcraft.api.core.Position;
import buildcraft.api.transport.IPipeTile.PipeType;
import buildcraft.core.DefaultProps;
import buildcraft.core.IMachine;
import buildcraft.core.inventory.Transactor;
import buildcraft.core.utils.BlockUtil;
import buildcraft.core.utils.MathUtils;
@ -487,8 +486,7 @@ public class PipeTransportItems extends PipeTransport {
return slots != null && slots.length > 0;
}
return tile instanceof TileGenericPipe || (tile instanceof IInventory && ((IInventory) tile).getSizeInventory() > 0)
|| (tile instanceof IMachine && ((IMachine) tile).manageSolids());
return tile instanceof TileGenericPipe || (tile instanceof IInventory && ((IInventory) tile).getSizeInventory() > 0);
}
/**