private bool HasIngredient() { if (InputSlot.IsVoid()) { return(false); } SmeltingRecipe recipe = GetSmeltingRecipe(InputSlot); return(recipe != null); }
private void Burn(object state) { lock (_containerLock) { Chunk chunk = World.GetChunk(Coords) as Chunk; if (chunk == null) { StopBurning(); return; } if (_fuelTicksLeft <= 0) { if (HasIngredient() && HasFuel()) { if (!OutputSlot.IsVoid() && !GetSmeltingRecipe(InputSlot).Result.StacksWith(OutputSlot)) { StopBurning(); return; } _fuelTicksFull = GetFuelEfficiency(); _fuelTicksLeft = _fuelTicksFull; SendFurnaceProgressPacket(_progressTicks); RemoveFuel(); BlockData.Blocks blockId = chunk.GetType(Coords); if (blockId == BlockData.Blocks.Furnace) { chunk.SetType(Coords, BlockData.Blocks.Burning_Furnace); } } else { StopBurning(); } return; } _fuelTicksLeft--; if (InputSlot.IsVoid() || (!OutputSlot.IsVoid() && (!GetSmeltingRecipe(InputSlot).Result.StacksWith(OutputSlot) || OutputSlot.Count == 64))) { _progressTicks = 0; } else { if (_progressTicks >= FullProgress) { _progressTicks = 0; AddOutput(); RemoveIngredient(); } _progressTicks++; } double fuelTickCost = ((double)(_fuelTicksFull)) / FullFire; short fireLevel = (short)(_fuelTicksLeft / fuelTickCost); if (fireLevel % 10 == 0 || fireLevel == FullFire) { SendFurnaceFirePacket(fireLevel); } if (_progressTicks % 10 == 0 || _progressTicks == FullProgress) { SendFurnaceProgressPacket(_progressTicks); } } }