Auto-workbenches that cannot craft will not retry crafting again until any input slot changes.

Conflicts:
	common/buildcraft/factory/TileAutoWorkbench.java
This commit is contained in:
immibis 2015-01-17 20:15:38 +13:00 committed by asiekierka
parent ded664beaf
commit 6b3526e739

View file

@ -21,9 +21,9 @@ import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe; import net.minecraft.item.crafting.IRecipe;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.WorldServer; import net.minecraft.world.WorldServer;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.BuildCraftFactory;
import buildcraft.api.core.IInvSlot; import buildcraft.api.core.IInvSlot;
import buildcraft.core.TileBuildCraft; import buildcraft.core.TileBuildCraft;
import buildcraft.core.inventory.InvUtils; import buildcraft.core.inventory.InvUtils;
@ -45,7 +45,11 @@ public class TileAutoWorkbench extends TileBuildCraft implements ISidedInventory
public InventoryCrafting craftMatrix = new LocalInventoryCrafting(); public InventoryCrafting craftMatrix = new LocalInventoryCrafting();
public boolean useLast; public boolean useLast;
public int progress; public int progress;
/** Set when nothing can be crafted unless the input grid is changed.
* Cleared whenever the input grid is changed. Not persisted. */
private boolean isJammed;
private SimpleInventory resultInv = new SimpleInventory(1, "Auto Workbench", 64); private SimpleInventory resultInv = new SimpleInventory(1, "Auto Workbench", 64);
private IInventory inv = InventoryConcatenator.make().add(resultInv).add(craftMatrix); private IInventory inv = InventoryConcatenator.make().add(resultInv).add(craftMatrix);
@ -65,6 +69,24 @@ public class TileAutoWorkbench extends TileBuildCraft implements ISidedInventory
} }
}, 3, 3); }, 3, 3);
} }
@Override
public void setInventorySlotContents(int p_70299_1_, ItemStack p_70299_2_) {
super.setInventorySlotContents(p_70299_1_, p_70299_2_);
isJammed = false;
}
@Override
public void markDirty() {
super.markDirty();
isJammed = false;
}
@Override
public ItemStack decrStackSize(int p_70298_1_, int p_70298_2_) {
isJammed = false;
return super.decrStackSize(p_70298_1_, p_70298_2_);
}
} }
public WeakReference<EntityPlayer> getInternalPlayer() { public WeakReference<EntityPlayer> getInternalPlayer() {
@ -175,6 +197,10 @@ public class TileAutoWorkbench extends TileBuildCraft implements ISidedInventory
if (worldObj.isRemote) { if (worldObj.isRemote) {
return; return;
} }
if (isJammed) {
return;
}
balanceSlots(); balanceSlots();
@ -229,10 +255,12 @@ public class TileAutoWorkbench extends TileBuildCraft implements ISidedInventory
IRecipe recipe = findRecipe(); IRecipe recipe = findRecipe();
if (recipe == null) { if (recipe == null) {
progress = 0; progress = 0;
isJammed = true;
return; return;
} }
if (!useLast && isLast()) { if (!useLast && isLast()) {
progress = 0; progress = 0;
isJammed = true;
return; return;
} }
progress += UPDATE_TIME; progress += UPDATE_TIME;
@ -243,6 +271,7 @@ public class TileAutoWorkbench extends TileBuildCraft implements ISidedInventory
useLast = false; useLast = false;
ItemStack result = recipe.getCraftingResult(craftMatrix); ItemStack result = recipe.getCraftingResult(craftMatrix);
if (result == null) { if (result == null) {
isJammed = true;
return; return;
} }
result = result.copy(); result = result.copy();
@ -322,4 +351,4 @@ public class TileAutoWorkbench extends TileBuildCraft implements ISidedInventory
public boolean hasCustomInventoryName() { public boolean hasCustomInventoryName() {
return false; return false;
} }
} }