diff --git a/api/buildcraft/api/tiles/IControllable.java b/api/buildcraft/api/tiles/IControllable.java new file mode 100644 index 00000000..2ea990e2 --- /dev/null +++ b/api/buildcraft/api/tiles/IControllable.java @@ -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); +} diff --git a/common/buildcraft/BuildCraftCore.java b/common/buildcraft/BuildCraftCore.java index 18cc458a..e33931ee 100644 --- a/common/buildcraft/BuildCraftCore.java +++ b/common/buildcraft/BuildCraftCore.java @@ -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 diff --git a/common/buildcraft/builders/BlockFiller.java b/common/buildcraft/builders/BlockFiller.java index b5894e2a..2b23bbda 100644 --- a/common/buildcraft/builders/BlockFiller.java +++ b/common/buildcraft/builders/BlockFiller.java @@ -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; diff --git a/common/buildcraft/builders/TileBuilder.java b/common/buildcraft/builders/TileBuilder.java index a64f5d65..749862c7 100644 --- a/common/buildcraft/builders/TileBuilder.java +++ b/common/buildcraft/builders/TileBuilder.java @@ -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; diff --git a/common/buildcraft/builders/TileFiller.java b/common/buildcraft/builders/TileFiller.java index da2cf9f1..1cb230fa 100644 --- a/common/buildcraft/builders/TileFiller.java +++ b/common/buildcraft/builders/TileFiller.java @@ -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; + } + } diff --git a/common/buildcraft/builders/statements/ActionFiller.java b/common/buildcraft/builders/statements/ActionFiller.java index fbbb166b..5e45da0b 100644 --- a/common/buildcraft/builders/statements/ActionFiller.java +++ b/common/buildcraft/builders/statements/ActionFiller.java @@ -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); + } } } diff --git a/common/buildcraft/core/BlockBuildCraft.java b/common/buildcraft/core/BlockBuildCraft.java index 89a76ea0..34e14daa 100644 --- a/common/buildcraft/core/BlockBuildCraft.java +++ b/common/buildcraft/core/BlockBuildCraft.java @@ -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); diff --git a/common/buildcraft/core/IMachine.java b/common/buildcraft/core/IMachine.java deleted file mode 100644 index 00561393..00000000 --- a/common/buildcraft/core/IMachine.java +++ /dev/null @@ -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); -} diff --git a/common/buildcraft/core/statements/ActionMachineControl.java b/common/buildcraft/core/statements/ActionMachineControl.java index 130cea2d..f48dc577 100644 --- a/common/buildcraft/core/statements/ActionMachineControl.java +++ b/common/buildcraft/core/statements/ActionMachineControl.java @@ -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); + } } } diff --git a/common/buildcraft/core/statements/DefaultActionProvider.java b/common/buildcraft/core/statements/DefaultActionProvider.java index fd34b85a..2d8ae761 100644 --- a/common/buildcraft/core/statements/DefaultActionProvider.java +++ b/common/buildcraft/core/statements/DefaultActionProvider.java @@ -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 res = new LinkedList(); 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) { diff --git a/common/buildcraft/core/statements/DefaultTriggerProvider.java b/common/buildcraft/core/statements/DefaultTriggerProvider.java index befc94d3..94d746d0 100644 --- a/common/buildcraft/core/statements/DefaultTriggerProvider.java +++ b/common/buildcraft/core/statements/DefaultTriggerProvider.java @@ -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); } diff --git a/common/buildcraft/core/statements/TriggerMachine.java b/common/buildcraft/core/statements/TriggerMachine.java index 737aa622..5f5a7d53 100644 --- a/common/buildcraft/core/statements/TriggerMachine.java +++ b/common/buildcraft/core/statements/TriggerMachine.java @@ -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(); } } diff --git a/common/buildcraft/factory/TileMiningWell.java b/common/buildcraft/factory/TileMiningWell.java index 3f58574c..0fb8a007 100644 --- a/common/buildcraft/factory/TileMiningWell.java +++ b/common/buildcraft/factory/TileMiningWell.java @@ -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; } } diff --git a/common/buildcraft/factory/TilePump.java b/common/buildcraft/factory/TilePump.java index 74bf7d1c..ff1ad95a 100644 --- a/common/buildcraft/factory/TilePump.java +++ b/common/buildcraft/factory/TilePump.java @@ -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) { diff --git a/common/buildcraft/factory/TileQuarry.java b/common/buildcraft/factory/TileQuarry.java index 74a30f85..bf134736 100644 --- a/common/buildcraft/factory/TileQuarry.java +++ b/common/buildcraft/factory/TileQuarry.java @@ -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(); diff --git a/common/buildcraft/factory/TileRefinery.java b/common/buildcraft/factory/TileRefinery.java index 412f2906..c89c9b7c 100644 --- a/common/buildcraft/factory/TileRefinery.java +++ b/common/buildcraft/factory/TileRefinery.java @@ -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) { diff --git a/common/buildcraft/silicon/TileAdvancedCraftingTable.java b/common/buildcraft/silicon/TileAdvancedCraftingTable.java index a1050d14..e412d471 100644 --- a/common/buildcraft/silicon/TileAdvancedCraftingTable.java +++ b/common/buildcraft/silicon/TileAdvancedCraftingTable.java @@ -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 diff --git a/common/buildcraft/silicon/TileAssemblyTable.java b/common/buildcraft/silicon/TileAssemblyTable.java index 5ca0e493..d26eead6 100644 --- a/common/buildcraft/silicon/TileAssemblyTable.java +++ b/common/buildcraft/silicon/TileAssemblyTable.java @@ -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 diff --git a/common/buildcraft/silicon/TileIntegrationTable.java b/common/buildcraft/silicon/TileIntegrationTable.java index 3a474e41..b1893f72 100644 --- a/common/buildcraft/silicon/TileIntegrationTable.java +++ b/common/buildcraft/silicon/TileIntegrationTable.java @@ -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 diff --git a/common/buildcraft/silicon/TileLaser.java b/common/buildcraft/silicon/TileLaser.java index eea952ca..84254342 100644 --- a/common/buildcraft/silicon/TileLaser.java +++ b/common/buildcraft/silicon/TileLaser.java @@ -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; + } } diff --git a/common/buildcraft/silicon/TileLaserTableBase.java b/common/buildcraft/silicon/TileLaserTableBase.java index 463aaf80..fc553028 100644 --- a/common/buildcraft/silicon/TileLaserTableBase.java +++ b/common/buildcraft/silicon/TileLaserTableBase.java @@ -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; } } diff --git a/common/buildcraft/transport/PipeTransportFluids.java b/common/buildcraft/transport/PipeTransportFluids.java index f9561517..51834b4a 100644 --- a/common/buildcraft/transport/PipeTransportFluids.java +++ b/common/buildcraft/transport/PipeTransportFluids.java @@ -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; } /** diff --git a/common/buildcraft/transport/PipeTransportItems.java b/common/buildcraft/transport/PipeTransportItems.java index e7aa139d..43dce9e0 100644 --- a/common/buildcraft/transport/PipeTransportItems.java +++ b/common/buildcraft/transport/PipeTransportItems.java @@ -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); } /**